程序设计方法

时间:2013-11-04 15:34:38

标签: java c++ oop visual-c++ software-design

对于以下方案设计方法的任何帮助/指导,我将不胜感激。

我正在开发一个类,其中我有类,属性计算出来,如下所示;

class PanelBlock{

    public: 
        PanelBlock();

    private:
        TCHAR m_sSlope[PANEL_NAME_LENGTH];  // To store the Slope

        bool m_bTopPanel;     // This is to identify the
        bool m_bMidPanel;     // location of the PanelBlock.
        bool m_bBotPanel;

        // Similarly we have it for other attributes.
        // My Question here is, 
        // Is it better to have a TCHAR instead of 3/5 booleans here?

        TCHAR m_sPanelLocation[PANEL_LOCATION_LENGTH];

}

我的问题是,

  

在这里使用 TCHAR / String 代替3/5布尔值会更好吗?在我的   应用程序代码,我只是将 TCHAR / String 与特定的比较    TCHAR / String ,如果位置是TOP,执行任务A,还是有布尔值   有什么优点,我错过了?

     

另外,我有大约8个属性,我需要布尔值   确定它是否位于顶部,中部或底部

任何帮助/指导都将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

bool是一个字节类型,而TCHAR取决于它的用法最多可以是两个字节。从内存大小和优化的角度来看,bool更加优化和快速,因为它们是0或1.您应该已经提到了这一变化的目标。涉及很多方面。

答案 1 :(得分:0)

“更好”是主观的,正确的方法取决于你的意思。

在编写新代码时,我总是按照以下顺序在这些术语中定义“更好”:

  1. 简单。清晰易懂的代码比复杂的混淆代码更好,因为它更容易扩展和修复。
  2. Genericity。通用代码比具有非常窄的适用范围的代码更好,因为它减少了您必须编写的代码量。希望这反过来减少了你必须修复的错误数量。
  3. 速度效率。快速代码优于慢速代码。
  4. 空间效率。更少的内存使用率优于更多内容。
  5. 由于这适用于您的代码,我可能会将其设计为对每个不同的属性使用单个bool,而不是尝试使用OR ed标志创建单个整数类型等。布尔是相互排斥的,然后我会用一个enum来表达它们。

    避免过早地微量优化代码非常重要,因为这样做必然会使事情变得更复杂,更不通用,也更难维护。但是,这并不是首先不选择正确算法的借口。

    由于代码是针对真实的生产环境编写和测试的,因此我将分析我的代码并识别热点。如果我找到任何并将其识别为需要修复的事情,那么我的优先事项就会改变:

    1. 速度效率。快速代码优于慢速代码。
    2. 空间效率。更少的内存使用率优于更多内容。
    3. 简单。清晰易懂的代码比复杂的混淆代码更好,因为它更容易扩展和修复。
    4. Genericity。通用代码比具有非常窄的适用范围的代码更好,因为它减少了您必须编写的代码量。希望这反过来减少了你必须修复的错误数量。
    5. 简单仍然相对重要,特别是在开始微优化时。优化代码片段很容易导致复杂性失控,使维护成为一场噩梦。不要完全放弃表演上的简洁。

答案 2 :(得分:0)

虽然不是设计中唯一要考虑的要点,但它通常是一个很好的格言

When doing something, do it once.

你有三个布尔值,控制你的物品的位置。这意味着要弄清楚项目的位置,您需要检查三个项目。此外,要设置项目的位置,您需要设置一个布尔值true和两个布尔值false。几乎每次做某事时,你似乎都会做三件事。

考虑一下

public enum VerticalPanelPosition {
   TOP,
   MIDDLE,
   BOTTOM;
}

现在你只能有一个位置

private VerticalPanelPosition vPosition;

只需做“一件事,一次”

public void setPosition(VerticalPanelPosition position) {
  vposition = position;
}

很抱歉Java语法,但考虑到上下文,我敢打赌你可以毫不费力地将它翻译成C#。

祝你在设计方面做得更好,这是一次又一小步,需要考虑很多事情。