原文链接 Software Engineering | Coupling and Cohesion - javatpoint
模块耦合
在软件工程中,耦合是指软件模块之间相互依赖的程度。紧耦合的两个模块彼此强烈依赖。然而,松散耦合的两个模块并不相互依赖。非耦合模块在它们内部完全没有相互依赖关系。
各种类型的耦合技术如图所示:
好的设计是低耦合的设计。耦合是通过模块之间关系的数量来衡量的。也就是说,随着模块之间调用次数的增加或共享数据量的增加,耦合也会增加。因此,可以说高耦合的设计会有更多的误差。
耦合的类型
1. 无直接耦合(No Direct Coupling):M1和M2之间没有直接耦合。
在这种情况下,模块从属于不同的模块。因此,没有直接耦合。
2. 数据耦合(Data Coupling:):当一个模块的数据传递给另一个模块时,这称为数据耦合。
3. 戳记耦合(Stamp Coupling: ):如果两个模块使用复合数据项(如结构、对象等)进行通信,那么它们就是戳记耦合的。当模块将非全局数据结构或整个结构传递给另一个模块时,它们被称为戳记耦合。例如,将C语言的结构变量或c++语言的对象传递给模块。
4. 控制耦合(Control Coupling:):如果来自一个模块的数据用于指导另一个模块的指令执行结构,则两个模块之间存在控制耦合。
5. 外部耦合(External Coupling: ):当两个模块共享外部强加的数据格式、通信协议或设备接口时,就会出现外部耦合。这与与外部工具和设备的通信有关。
6. 公共耦合(Common Coupling: ):如果两个模块通过一些全局数据项共享信息,则它们是公共耦合的。
7. 内容耦合(Content Coupling:):如果两个模块共享代码,例如,从一个模块到另一个模块的分支,则存在内容耦合。
模块内聚性
在计算机编程中,内聚定义了一个模块的元素在一起的程度。因此,内聚度量给定模块内功能块之间关系的强度。例如,在高度内聚的系统中,功能是紧密相关的。
凝聚力是一种有序的测量类型,通常被描述为“高凝聚力”或“低凝聚力”。
内聚类型
1,功能内聚(Functional Cohesion):功能内聚是指一个模块中的不同元素相互配合以实现单一功能。
2,顺序内聚(Sequential Cohesion):如果模块的元素构成序列的组件,则模块具有顺序内聚,其中序列的一个组件的输出输入到下一个组件。
3,通信内聚性(Communicational Cohesion):如果模块的所有任务都引用或更新相同的数据结构,例如,在数组或堆栈上定义的函数集,则模块具有通信内聚性。
4,过程内聚(Procedural Cohesion):如果一个模块的目的集合是一个过程的所有部分,在这个过程中,为了实现一个目标,必须执行特定的步骤序列,例如,解码消息的算法,那么这个模块就被称为过程内聚。
5,时间内聚性(Temporal Cohesion):当一个模块包含的函数与所有方法必须同时执行的事实相关联时,这个模块就被称为时间内聚性。
6,逻辑内聚(Logical Cohesion):如果模块的所有元素执行类似的操作,则称模块是逻辑内聚的。例如错误处理、数据输入和数据输出等。
8,巧合内聚(Coincidental Cohesion):如果一个模块执行了一组彼此关联非常松散(如果有关联的话)的任务,那么它就被称为具有巧合内聚。
耦合和内聚的不同
耦合 | 内聚 |
耦合也称为模块间绑定。 | 也被称为模块内绑定。 |
显示了模块之间的关系。 | 显示了模块内部的关系。 |
显示了模块之间的相对独立性。 | 显示了模块的相对功能强度。 |
在创建时,您应该以低耦合为目标,也就是说,模块之间的依赖应该更少。 | 在创建时,您应该以高内聚为目标,即,内聚组件/模块专注于单个功能(即,专一性),与系统的其他模块很少交互。 |
在耦合中,模块被链接到其他模块。 | 在内聚中,模块只关注一件事。 |