模块的独立性的衡量标准有两个
- 耦合
耦合的强弱取决于模块接口的复杂程度、调用模块的方式以及通过接口的信息。 - 内聚
一个模块内部各个元素彼此结合的紧密程度的度量
七种耦合
原则
尽量使用数据耦合,少用控制耦合,限制使用公共耦合,坚决不用内容耦合。
耦合的强弱
-
内容耦合
- 一个模块直接访问另一个模块的内部数据(汇编语言会有,比如都要用加法寄存器)
- 不是通过正常入口转到另一个模块的内部(例如 goto)
- 两个模块的一部分代码重迭
- 一个模块有多个入口
-
公共耦合
- 若一组模块都访问同一个公共数据环境(例如面向对象里的类中的static)
- 公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
- 分类
- 公共耦合存在的问题:其中一个模块对数据的修改,将会影响所有的相
关模块,另外由于无法控制各个模块对公共数据的存取,使软件的可靠
性和可维护性较差。
-
外部耦合
- 一组模块都访问同一 全局简单变量 而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
- 一组模块都访问同一 全局简单变量 而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
-
控制耦合
- 如果一个模块传送给另一个模块的参数中包含了控制信息 (参数是一个函数)
-
标记耦合
- 两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构,传递的是一个数组或者结构体),就是标记耦合。
-
数据耦合
- 两个模块之间仅通过参数表传递简单数据(基本数据类型),则称为数据耦合。
-
非直接耦合
- 两个模块之间没有直接关系