内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然拓展。简单地说,理想内聚的模块只做一件事情。
设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多。
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块内的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。
低内聚:
- 偶然内聚:一个模块完成一个任务,这些任务彼此间即使有关系,关系也是很松散的(例如:有时在写完一个程序后,发现一组语句在两处或多出出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块)。
- 逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出)。
- 时间内聚:一个模块内包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作)。
偶然内聚的模块中,各种元素之间没有实质性联系,很可能在一种应用场合需要修改这个模块,而在另一种应用场合又不允许这种修改,从而陷入困境。事实上,偶然内聚的模块出现修改错误的概率比其他类型的模块高得多。
逻辑内聚的模块中,不同的功能混在一起,合用部分程序代码,即使局部功能的修改有时也会影响全局。因此,这类模块的修改也比较困难。
时间内聚在一定程度上反映了程序的某些实质,所以时间内聚比逻辑内聚好些。
中内聚:
- 过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行。使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样往往得到的是过程内聚的模块。
- 通信内聚:模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据。
高内聚:
- 顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个元素的输出数据作为下一个元素的输入数据)
- 功能内聚(最高程度的内聚):根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。如果模块内所有处理元素属于一个整体,完成单一的功能,则称为功能内聚。
主流观点认为,如果给上述7种内聚的优劣评分,会有以下结果
功能内聚 | 10分 | | 时间内聚 | 3分 |
顺序内聚 | 9分 | | 逻辑内聚 | 1分 |
通信内聚 | 7分 | | 偶然内聚 | 0分 |
过程内聚 | 5分 | | | |
事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立性。
什么是耦合https://blog.csdn.net/weixin_57604284/article/details/121299582?spm=1001.2014.3001.5501https://blog.csdn.net/weixin_57604284/article/details/121299582?spm=1001.2014.3001.5501
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)