耦合
在软件工程中,耦合是一个重要的概念,用于描述模块或组件之间的相互依赖程度。
从非直接耦合到内容耦合的耦合性依次升高,所以非直接耦合是我们最想见到的结果,内容耦合是我们最不想见到的结果。
- 非直接耦合
- 数据耦合
- 标记耦合
- 控制耦合
- 特征耦合
- 公共耦合
- 内容耦合
非直接耦合
两个模块之间没有直接关系, 它们之间的联系完全是通过主模块的控制和调用实现的,这种被称为非直接耦合。
数据耦合
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。
标记耦合
如果一组模块通过数据结构本身传递,则称这种耦合为标记耦合。(和数据耦合类似,但是它传递的是一个对象,或一个数据结构,而数据耦合传递的只是数值)
控制耦合
如果一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能,这种耦合为控制耦合。
特征耦合
特征耦合是指两个都与同一个数据结构有关的模块发生的耦合。
公共耦合
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合
如果发生下列情形,两个模块之间就发生了内容耦合。
- 一个模块直接访问另一个模块的内部数据;
- 一个模块不通过正常入口转到另一模块内部;
- 两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
- 一个模块有多个入口。
内聚
功能内聚是我们需要的,偶然内聚是我们最不希望看到的。
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 过程内聚
- 通信内聚
- 顺序内聚
- 功能内聚
偶然内聚
指一个模块内的各处理元素之间没有任何联系。
逻辑内聚
指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
时间内聚
把需要同时执行的动作组合在一起形成的模块。
过程内聚
指一个模块完成多个任务,这些任务必须按指定的次序执行。
通信内聚
指模块内的所有处理元素都在同一数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据。
顺序内聚
指一个模块中的各个处理元素都密切相关于同一各功能且必须顺序执行,前一个功能元素的输出就是下一个功能的输入。
功能内聚
指模块内的所有元素共同作用完成一个功能,缺一不可。