模块内聚性衡量的是一个模块内部各个元素(语句、指令、函数调用)之间彼此关联的紧密程度。
内聚性从低到高可分为以下七种类型,内聚性越高,模块质量越好。
内聚类型(从低到高排序)
1. 偶然内聚
-
描述:模块中的各部分代码之间没有任何有意义的联系,只是偶然地被组合到一个模块中。
-
例子:一个“工具”模块,里面包含了一个打印报表的函数、一个计算工资的函数和一个连接数据库的函数。这些功能完全无关。
-
问题:难以理解、维护和修改。这是最差的内聚类型。
2. 逻辑内聚
-
描述:模块内的各个部分在逻辑上属于相似类别(例如,都是输入操作或都是输出操作),但功能不同,通过传递的控制标志来决定执行哪一部分。
-
例子:一个“数据处理”模块,根据传入的参数(如:
type=1为新增,type=2为删除,type=3为修改)来执行不同的操作。 -
问题:模块接口复杂,调用者需要知道内部逻辑,一个功能的修改可能影响其他功能。
3. 时间内聚
-
描述:模块内的各个部分因为它们需要在同一时间段内执行而被组合在一起(例如,初始化模块或结束处理模块)。
-
例子:一个“程序启动”模块,负责初始化全局变量、打开数据库连接、创建日志文件。这些操作在时间上(程序启动时)相关,但功能上并不紧密。
-
问题:比逻辑内聚稍好,但模块内部元素的功能关联性依然很弱。
4. 过程内聚
-
描述:模块内的各个部分按照特定的过程顺序执行,一个部分的输出是下一个部分的输入,但它们并不共同完成一个单一的功能。
-
例子:一个“更新数据”模块,其执行流程是:先从文件中读取数据 -> 然后验证数据 -> 最后更新数据库。这些步骤是连续的,但每个步骤本身都是一个独立的功能。
-
问题:模块仍然包含多个独立的功能单元。
5. 通信内聚
-
描述:模块内的所有部分都对相同的一组数据进行操作(即它们共享数据),但执行的操作本身是不同。
-
例子:一个“学生记录处理”模块,它接收一个“学生记录”,然后依次执行:计算该学生的平均分、更新该学生的成绩单、打印该学生的信息。所有操作都围绕“学生记录”这个数据。
-
问题:功能仍然不单一,但基于共同数据,内聚性已较高。
6. 顺序内聚
-
描述:模块内的各个部分顺序执行,且一个部分的输出直接作为下一个部分的输入,它们共同协作完成一个更大的任务。
-
例子:一个“编译程序”模块,它先执行词法分析,将其结果送给语法分析,再将结果送给语义分析。流水线式的处理,前后环节紧密依赖。
-
优点:内聚性高,模块功能明确,易于理解和维护。
7. 功能内聚
-
描述:模块中所有部分共同协作,完成且仅完成一个单一、明确的功能。这是最理想的内聚类型。
-
例子:
-
“计算平方根”模块。
-
“验证用户密码”模块。
-
“生成月度报表”模块。
-
-
优点:模块接口清晰、易于测试、可重用性高、易于维护
总结与记忆技巧
内聚类型 关联基础 质量等级 偶然内聚 无关联 最差 逻辑内聚 逻辑上相似 差 时间内聚 时间上同时发生 差 过程内聚 流程步骤 中等 通信内聚 操作相同数据 良好 顺序内聚 输出作为输入 高 功能内聚 单一明确功能 最高 设计目标:在系统设计中,应尽可能追求功能内聚,避免偶然内聚和逻辑内聚。高内聚的模块与“低耦合”的原则相结合,是构建高质量、可维护软件系统的基石。

3898

被折叠的 条评论
为什么被折叠?



