全部博文(1293)
分类: 项目管理
2014-09-02 17:39:51
在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》
对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。
我们的目标是让子程序只把一件事情做好,不再做任何其他事情。
内聚性是针对操作的概念。即操作具有内聚性。通常,一个操作指一个语句,或一个函数调用。一个是简单的操作,一个是复杂的操作。
内聚性的一些概念,理解概念有助于思考如何让子程序尽可能的内聚。
1、 功能的内聚性:让一个子程序仅执行一项操作。这是最强的也是最好的内聚性。其他的内聚性则不够理想。
2、 顺序上的内聚性:子程序内包含按照特定顺序执行的操作,这些步骤需要共享数据,而只有全部执行完毕后,才完成了一下完整的功能。 顺序上的内聚性设计成功能上的内聚性需要对顺序进行分解,形成多个功能更加单一的子程序 。
3、 通信上的内聚性:子程序中的不同操作使用了同样的数据,当不存在其他任何联系。 优化的方法是将子程序分解为多个子程序。
4、 临时的内聚性:子程序中含有一些因为需要同时执行才放到一起的操作。 优化方法是把临时性的子程序看成是一系列事件的组织者,即让它直接调用其他的子程序,而不是直接执行所有的操作。另外,可以通过函数的命名,表达子程序完成的功能。避免使用多个操作叠加的方法命名,因为它暗示子程序只有巧合的内聚性。
除功能的内聚性外,其他类型的内聚性都是不可取的。要想办法避免。
1、 过程上的内聚性:子程序中的操作是按特定的顺序进行的,除此外没有任何联系。对子程序分解,把不同的功能纳入不同的子程序中,让调用方的子程序具有单一而完整的功能。
2、 逻辑上的内聚性:若干操作被放入同一个子程序中,通过传入的控制标志选择执行其中的一项操作。各个操作间没有任何的逻辑关系,这些操作只是被包含在一个很大的case 或 if 语句中。如果此子程序只是分发命令,根据命令调用不同的子程序,则这种做法也是不错的。其他的不好的情况,可以通过分解来进行优化。分解为多个独立的子程序。
3、 巧合的内聚性:子程序内部的各个操作间没有任何的关联。
内聚性考虑的是在一个子程序内部,操作的关联程度。
编写功能上的内聚性的子程序几乎总是可能的,因此把注意力集中于功能上的内聚性,从而得到最大的收获。
使用上面的建议对我的流程引擎程序进行内聚性的优化,发现确实很有价值。值得在后面的设计和编码中坚持这种优化。
转自博客:
http://blog.csdn.net/chgaowei/article/details/4927437
参考博客:
http://blog.sina.com.cn/s/blog_4ca059540100jnk7.html