高内聚低耦合
Posted huzixuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高内聚低耦合相关的知识,希望对你有一定的参考价值。
开发一个系统时,要求尽量做到高内聚,低耦合。高内聚,就是模块内部的联系紧密,其中功能内聚是最强的内聚,模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。通常从判断模块名字,就能判断是不是功能内聚,例如“计算水费”,就是单一功能的模块。功能内聚,一般出现在软件结构图的较低层次上,就是细分功能的时候需要做到高内聚(功能内聚)这一点。在模块划分的时候,要尽量遵循一个模块,一个功能的原则。
以下是几种内聚的强弱比较:
偶然内聚 < 逻辑内聚 < 时间内聚 < 过程内聚 < 通信内聚 < 顺序内聚 < 功能内聚
偶然内聚:模块内的元素没啥关系,偶然凑在一起,也称巧合内聚。
逻辑内聚:把相关的几个功能集中在一起,调用的时候,根据传参来确定要实现什么功能。
时间内聚:需要同时执行的动作组合在一起形成一个模块。
过程内聚:允许在调用了前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据传递。这个模块内处理的元素是相关的,而且以一定的次序来执行。
通信内聚:模块内处理的元素都在同一个数据结构上操作,或所有处理操作都通过公用数据发生关联,也就是说模块内各个组成部分都使用相同的数据或产生相同的数据结构。
顺序内聚:也是按顺序执行,通常一个处理元素的输出是后一个处理元素的输入。
低耦合:模块与模块之间的联系低,各模块的独立性强。
以下是耦合性强弱的比较:
内容耦合 > 公共耦合 > 外部耦合 > 控制耦合 > 标记耦合 > 数据耦合 > 非直接耦合
内容耦合:一个模块直接访问了另一个模块的内容,例如访问了另一个模块的内部数据,或者是没有通过正常的入口而直接转入到另一个模块的内部,或是有重叠的代码,或是一个模块有多个入口。
公共耦合:一组模块都访问同一个全局数据结构,如果模块只是向公共数据环境输入,或取出数据,算是比较松散的公共耦合,但如果既可以输入,又可以取出,这是比较紧密的公共耦合。公共耦合降低了软件的可读性,不知道哪些数据是共享,难以排错;如果改动了公共数据,会影响相关的模块。无法控制各个模块对公共数据的存取,影响了软件的可靠性。一般在模块间要共享的的数据多且传参不便时才用公共耦合。
外部耦合:一组模块都访问同一全局简单变量,且不通过参数表传递该全局变量的信息。
控制耦合:模块间传递的不是数据,而是控制信息,例如标志,开关量等,一个块控制了另一个块的功能。
标记耦合:模块之间穿的也不是简单数据,而是传了一些例如像高级语言中的文件名,数据名,记录名之类的地址。
非直接耦合:通过主模块的控制和调用来实现的,独立性最强。
原则:若模块间必须存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或有控制地使用公共耦合,并限制公共耦合的范围,尽量避免内容耦合。
以上关于高内聚低耦合的内容来自百度百科,只是手打下来加深印象。
以上是关于高内聚低耦合的主要内容,如果未能解决你的问题,请参考以下文章