题记:正在读《浮现式设计:专业软件开发的演进本质》(荣获第19届Jolt生产力大奖)一书,顺手写下了一点自己的感想与浅见,是以为记。
封装、内聚、耦合,这是编码的首要原则。
这三个原则不是面向对象开发才有的,早在面向过程的开发方法中就已经作为普适原则存在了,随便问一位软件工程师,都能对“高内聚,低耦合”说上几句。到了面向对象方法中,对“封装”的概念进一步得到强化,利用类的设计来封装属性和行为。
到了实际的编码过程当中,别说这三个词的含义存在多少了,就是这三个词本身还能不能想起来都不一定。
对于封装,看到最多的就是不会用public\protected\private,一律全是public,如果问一句为什么,回答竟然是“也许别人也用得上这个方法”,汗!
再来看内聚,对于类内聚,这里最常见的问题是把相关的方法放到一起就定义一个类。这就不得不说到面向对象方法的优势了,本来是通过类的定义来解决问题域到解域的映射,现在脱离了问题域来定义类,我们说这样的内聚是不恰当的。对于方法内聚,当我们发现一个方法的名字与方法的内容不一致了,或者一个方法找不到合适的名字了,往往就是违背了内聚原则了。
对于耦合,注意是低耦合而不是零耦合,如果没有耦合就出不来软件了。耦合有两种,一种是有意耦合,是设计方案中确定的必然的耦合,另一种是意外耦合,不是经过设计的,而是悄悄潜入系统的耦合。但是,也要注意分辨有意耦合是否真的需要。我们在设计阶段进行的设计验证,很多时候就是在判断这一点。
以上是提高软件质量的基本原则,还有软件几个软件质量标准,即冗余、可读性、可测试性。
冗余是一些重复的代码段,比较常见的就是所谓的剪贴板继承了,Copy一段代码,不改或稍加修改即进入了产品库,这样的代码产生的冗余最终导致可维护性的降低,修改一处而忘了另一处。有些时候可以通过引入继承耦合来减少冗余,把公共代码放到基类中,但也要注意上下文语意中是否允许。
可读性则强调代码风格的一致性、命名的准确性等,记着,代码写成什么样机器都懂,但要写出人能读懂的,很难。
可测试性现实当中我们也考虑的不多,但不管是否实施了单元测试,在设计代码的时候如果能考虑到可测试性,其实也是在落封装、内聚、耦合的原则,如果真的能把单元测试一起放到工程过程中来,则对软件质量的提高无疑是事半功倍的。
——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——