内聚的含义:内聚指一个模块内部元素彼此结合的紧密程度
在面向对象领域,谈到“内聚”的时候,模块的概念远远不止我们通常所理解的“系统内的某个模块”这个范围,而是可大可小,大到一个子系统,小到一个函数,你都可以理解为内聚里所说的 “模块”。所以可以用“内聚”来判断一个函数设计是否合理,一个类设计是否合理,一个接口设计是否合理, 一个包设计是否合理,一个模块/子系统设计是否合理。
其次:“元素”究竟是什么? 有了前面对“模块”的深入研究后,元素的含义就比较容易明确了(不同语言稍有不同)。
函数:函数的元素就是“代码”
类/接口:类的元素是“函数、属性”
包:包的元素是“类、接口、全局数据”等
模块:模块的元素是“包、命名空间”等
再次:“结合”是什么? 英文的原文是“belong”,有“属于”的意思,翻译成中文“结合”,更加贴近中文的理解。但“结合”本 身这个词容易引起误解。绝大部分人看到“结合”这个单词,想到的肯定是“你中有我、我中有你”这样 的含义,甚至可能会联想到“美女和帅哥”的结合,抑或“青蛙王子和公主”的结合这种情况。这样的理解本身也并没有错,但比较狭隘。 我们以类的设计为例:假如一个类里面的函数都是只依赖本类其它函数(当然不能循环调用啦),那内聚性肯定是最好的,因为“结合”得很紧密
判断一个模块(函数、类、包、子系统)“内聚性”的高低,最重要的是关注模块的元素是否都忠于模块的职责,简单来说就是“不要挂羊头卖狗肉”。
【内聚的分类】
以下各种形式的内聚的内聚性越来越高
【巧合内聚(Coincidental cohesion)】
延伸阅读
学习是年轻人改变自己的最好方式