模块独立性指模块不依赖其他模块独立完成功能的程度。模块独立程度的两个定性标准度量是耦合和内聚。
耦合性衡量不同模块彼此之间相互依赖(连接)的紧密程度,耦合要低,即每个模块与其他模块的关系要简单;内聚性衡量一个模块内部各个元素紧密结合的程度(比如说,数据、函数高重复利用率能提高模块内聚性),内聚要高,每个模块完成一个相对独立的子功能。
(1)耦合:一个软件结构内不同模块直接互连程度的度量(力求低耦合)
分为四种类型(从低到高排序),
①数据耦合
两个模块间通过参数仅交换数据
②控制耦合
两个模块间传递的信息中含有控制信息。
缺陷:
ⅰ.被调用模块需要知道调用模块的内部结构和逻辑,降低了重用的可能性。
ⅱ.控制耦合往往是多余的,把模块适当分解后,通常可用数据耦合代替它
③公共耦合
两个或两个以上的模块通过一个公共数据环境相互作用。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。
缺陷:
ⅰ.公共耦合的模块难以重用,必须提供一个全局的变量清单。
ⅱ.即使模块本身不改变,它和产品中其他模块之间公共环境耦合的实例数也会变化非常的大。因此,这种耦合的潜在危险很大,模块暴露出比必须多得多的数据,导致难以控制数据的存取,从而导致计算机犯罪。
④内容耦合(最高程度)
ⅰ.一个模块访问另一个模块的内部数据
ⅱ.一个模块不通过正常入口转到另一个模块的内部
ⅲ.两个模块有一部分代码重叠
ⅳ.一个模块有多个入口
降低模块的设计原则:
①尽量使用数据耦合
②少用控制耦合
③限制公共耦合的范围
④完全不使用内容耦合
补充:
在面对对象设计中,耦合指不同对象之间相互关联的紧密程度
①交互耦合(应尽可能松散)
对象之间的耦合通过消息实现连接
②继承耦合(应尽可能紧密)
继承是一般类和特殊类之间耦合的一种形式。通过继承关系结合起来的基类和派生类,构成系统中粒度更大的模块。
(2)内聚:一个模块内各个元素彼此结合的紧密程度。(力求高内聚)
(内聚和耦合是密切相关的,高内聚往往就意味着低耦合)
内聚性从低到高分为7种三个等级,(从低到高)
低等级:偶然内聚、逻辑内聚、时间内聚
中等级:过程内聚、通信内聚
高等级:顺序内聚、功能内聚
①偶然内聚
一个模块完成一组任务,这些任务即使有联系,关系也是很松散的。
②逻辑内聚
模块完成的任务从逻辑上属于相同或相似的一类。
③时间内聚
如果一个模块包含的任务必须在同一段时间内执行。
④过程内聚
一个模块内处理的元素是相关的,并且必须按特定次序执行。
⑤通信内聚
模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据
⑥顺序内聚
一个模块内的处理元素属于一个整体,完成一个单一的功能。
⑦功能内聚
模块中所有的处理元素属于一个整体,完成一个单一的功能。
图解