# 耦合的类型(由高到低)

  • 内容耦合

一个模块直接修改或者直接操作另一个模块的数据。

  • 公共耦合

由两个以上的模块共同引用一个全局数据项。

  • 控制耦合

一个模块向另一模块传递一个控制信号,接受信号的模块将依据该信号值进行必要的活动。

  • 标记耦合

两个模块至少有一个通过界面传递的公共参数,包含内部结构,如数组,字符串等。

  • 数据耦合

模块间通过参数传递基本类型的数据。

图形理解

模块A
模块A
模块B
模块B
公共数据
公共数据
私有数据
私有数据
界面
界面
界面
界面
私有数据
私有数据
公共耦合
公共耦合
控制耦合
控制耦合
内容耦合
内容耦合
复杂数据 标记耦合
复杂数据 标记耦合
简单数据 数据耦合
简单数据 数据耦合
Viewer does not support full SVG 1.1

# 内聚的类型(由低到高)

  • 偶然内聚

一个模块之间各成分之间没有任何关系。

  • 逻辑内聚

几个逻辑相关的功能放在同一模块中。

  • 时间内聚

一个模块完成的功能必须在同一时间内完成,而这些功能只是因为时间因素关联在一起。

  • 过程内聚

处理各成分必须以特定的次序执行。

  • 通信内聚

各成分操作都在呕吐难以数据集或生成同一数据集。

  • 顺序内聚

各成分与一个功能相关,且一个成分的输出作为另一成分的输入。

  • 功能内聚

模块的所有成分对完成单一功能是最基本的,且该模块对完成这一功能而言是充分必要的。

图形理解

函数A
函数A
函数B
函数B
函数C
函数C
偶然内聚
偶然内聚
逻辑内聚
逻辑内聚
函数A
函数A
函数B
函数B
函数C
函数C
时间内聚
时间内聚
函数A
函数A
函数B
函数B
函数C
函数C
时间T
时间T
过程内聚
过程内聚
函数A
函数A
函数C
函数C
函数B
函数B
函数A
函数A
函数B
函数B
函数C
函数C
通信内聚
通信内聚
顺序内聚
顺序内聚
函数A
函数A
功能内聚
功能内聚
函数B
函数B
函数C
函数C
输出1
输出1
输出2
输出2
函数A
函数A
函数B
函数B
函数C
函数C
结果1
结果1
结果2
结果2
结果3
结果3
Viewer does not support full SVG 1.1

高内聚,低耦合。