● 高内聚
内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。内聚程度从低到高大致划分为低端、中段和高端。模块设计者没有必要确定内聚的精确级别,重要的是尽量争取高内聚,避免低内聚。
顺序性内聚 功能性内聚
时序性内聚 过程性内聚 通讯性内聚
偶然性内聚 逻辑性内聚
低端… 中段… 高端…
各种内聚类型的含义如下:
*偶然性内聚。如果一个模块的各成分之间的关系彼此松散(几乎无关),称为偶然性内聚。
*逻辑性内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑性内聚。例如一个模块读取各种不同类型外设的输入。
*时序性内聚。如果一个模块内的几个功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间性内聚。
*过程性内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程性内聚。
*通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
*顺序内聚。如果模块内的某个成分的输出作为另一个成分的输入,则称为顺序内聚。
*功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。
● 低耦合
耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。
耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的函数调用数量;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。
耦合程度从低到高大致划分为低端、中段和高端,如图3-16所示。模块设计应当争取“高内聚、低耦合”,而避免“低内聚、高耦合”。
印记耦合 控制耦合
公共耦合 内容耦合
非直接耦合 数据耦合
低端… 中段… 高端…
各种耦合类型的含义如下:
*非直接耦合。模块之间没有直接的信息传递,称为非直接耦合。
*数据耦合。模块之间通过接口传递参数(数据),称为数据耦合。
*标记耦合。模块间通过接口传递内部数据结构的一部分(而不是简单的参数),称为印记(Stamp)耦合。此数据结构的变化将使相关的模块发生变化。
*控制耦合。模块传递信号(如开关值、标志量等)给另一个模块,接收信号的模块根据信号值调整动作,称为控制耦合。
*公共耦合。两个以上的模块共同引用一个全局数据项,称为公共耦合。
*内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。