编程笔记(2)

来源:互联网 发布:手机以旧换新软件 编辑:程序博客网 时间:2024/06/06 02:09

转载请标明出处:blog.csdn.net/zhangxingping

关于类的命名

先玩个小游戏吧,猜猜看:如果某C++程序段中出现了这个的东东:GetXXXResult, 你会认为它是:

    A:函数名称

    B:类的名称

    C:变量名称

    D:命名空间名称

    上述选项中,您会选择哪个呢?我想大部分开发人员可能会认为这无疑是函数的名称。上面列举的是实际代码中出现的类的名称!我们来看看为什么大多数开发人员会误认为是函数名称呢?在http://blog.csdn.net/seraphbest/article/details/5940472中,博主对常用的C/C++命名规则进行较为详尽的描述。从语法上来说,开发语言并没有要求有这么严格的命名规则,那为什么还需要这些规则呢? 其目的是不言而喻的:方便程序的阅读,维护;减少不必要的麻烦。http://blog.csdn.net/billowszpt/article/details/6290067一文中列出的 Hello world程序估计很少有人能看懂。这样的程序阅读性和可维护性就很差。现代应用程序代码量一般都在上万行,有的甚至是十几万行。试想一下如果代码是上述”Hello world”风格的,那还怎么维护? 恐怕这样软件的生命周期在软件第一个版本发布后就结束了。在之前的编程笔记中提到过函数的名称一般采用动词+名称的形式,从而形成动宾关系。最典型的就是Getter哈Setter函数的命名了,一个都为GetXXX()或者SetXXX()。这两个也是大家最熟悉了。这样做的好处是函数的名称本身就能体现函数的全部功能,代码是自我注释的。函数或者方法本来就是为了做某件事情的,函数名称中采用动词本身就体现了函数的功能。那么类的名称采用上述的GetXXX方式咋就这么让人别扭了?还是先看看MFC中类的名称是怎么样的吧。http://msdn.microsoft.com/en-us/library/ws8s10w4(v=vs.80).aspx。其中不难看出几乎所有的类都是采用名词或者名词性质的短语构成。(笔者只发现有一个很特殊的类:CFileFind类及其子类,从其功能上来看感觉应该是CFileFinder更合理。)Java API中提供的类也大都如此。诚然,类具有完成某种功能的能力,其中肯定需要做某些动作。如果表示该动作的词汇必须出现在类的名称中以便体现类的功能,MFC或者JAVA API(JFC)也都是通过增加词缀来将其转换成名词或者具有名词性质的词。通常是增加后缀-er,-or,-ing等。例如MFC中的CFontHolder,CPictureHolder,CRectTracker等;JAVA API中的Encoder,Encoding,ErrorListener,EventFilter,Executor,等。关于这点稍有经验的开发人员都能感觉到,但是这点却很少出现在编程规范中。笔者也是在看到GetXXXResult类名称后才意识到看来这点也需要在意识中明确。在现在的软件开发过程中,通常都是需要多人合作完成开发的。某个人或者某几个人只是负责其中的一个或者少数的几个模块,这些模块间相互协作才能完成所需的功能。好的命名应该具有自我注视性,这样可以减少团队间的协调沟通时间,为开发增加时间。并且往往后期的维护人员很有可能不再是当时的编码人员了,良好的命名也可以减少维护的成本。从自身角度来讲可以少加班了甚至不加班了。那么这条就作为一个编程规则列出来吧。

规则6:类的名称应该采用名词或者具有名词性质的短语,同时应该是自我注视的,以提高代码的可阅读性和可维护性。