📜  软件工程|耦合和内聚

📅  最后修改于: 2021-01-10 02:53:33             🧑  作者: Mango

耦合与内聚

模块联轴器

在软件工程中,耦合是软件模块之间的相互依赖程度。紧密耦合的两个模块相互之间非常依赖。但是,松散耦合的两个模块彼此不依赖。未耦合的模块在它们内部完全没有相互依赖性。

图中显示了各种类型的耦合技术:

良好的设计是低耦合的设计。耦合通过模块之间的关系数来衡量。即,随着模块之间的调用数量增加或共享数据量大,耦合增加。因此,可以说具有高耦合的设计将具有更多的误差。

模块联轴器的类型

1.没有直接耦合: M1和M2之间没有直接耦合。

在这种情况下,模块从属于不同的模块。因此,没有直接耦合。

2.数据耦合:当一个模块的数据传递到另一模块时,这称为数据耦合。

3.标记耦合:如果两个模块使用复合数据项(例如结构,对象等)进行通信,则它们将被标记耦合。当模块将非全局数据结构或整个结构传递给另一个模块时,它们被称为标记耦合。例如,将C语言中的结构变量或C++语言中的对象传递给模块。

4.控制耦合:如果使用来自一个模块的数据来指导另一个模块的指令执行结构,则两个模块之间存在控制耦合。

5.外部耦合:当两个模块共享外部施加的数据格式,通信协议或设备接口时,就会发生外部耦合。这与与外部工具和设备的通信有关。

6.通用耦合:如果两个模块通过某些全局数据项共享信息,则它们是通用耦合。

7.内容耦合:如果两个模块共享代码,则它们之间存在内容耦合,例如,从一个模块到另一个模块的分支。

模块内聚

在计算机程序设计中,内聚性定义了模块的各个元素所属的程度。因此,内聚力衡量给定模块内功能之间的关系强度。例如,在高度内聚的系统中,功能密切相关。

内聚力是测量的序数类型,通常被描述为“高内聚力”或“低内聚力”。

模块内聚的类型

  • 功能内聚:如果模块的不同元素协作以实现单个函数,则功能内聚存在。
  • 顺序内聚:如果模块的元素形成序列的组成部分,则该模块具有序列内聚,其中序列的一个组成部分的输出将输入到下一个。
  • 通讯凝聚力:如果模块的所有任务都引用或更新相同的数据结构(例如,在数组或堆栈上定义的一组功能),则该模块具有通讯凝聚力。
  • 程序内聚:如果模块的目的集是过程的所有部分,那么该模块就称为过程内聚,在该过程中,必须执行特定的步骤顺序以实现目标,例如解码消息的算法。
  • 时间凝聚力:当模块包含必须同时执行所有方法这一事实而关联的功能时,该模块就具有时间凝聚力。
  • 逻辑内聚性:如果模块的所有元素执行相似的操作,则该模块被称为逻辑内聚性。例如错误处理,数据输入和数据输出等。
  • 巧合的凝聚力:如果某个模块执行一组非常松散地相互关联的任务(如果有的话),则称其具有巧合的凝聚力。

区分耦合和内聚

Coupling Cohesion
Coupling is also called Inter-Module Binding. Cohesion is also called Intra-Module Binding.
Coupling shows the relationships between modules. Cohesion shows the relationship within the module.
Coupling shows the relative independence between the modules. Cohesion shows the module’s relative functional strength.
While creating, you should aim for low coupling, i.e., dependency among modules should be less. While creating you should aim for high cohesion, i.e., a cohesive component/ module focuses on a single function (i.e., single-mindedness) with little interaction with other modules of the system.
In coupling, modules are linked to the other modules. In cohesion, the module focuses on a single thing.