软件工程内聚详解

简介

内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。

内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。

在进行软件设计时,应力争做到高内聚,低耦合。

偶然性内聚

定义:一个模块执行多个完全不相关的操作,则具有偶然性内聚。

缺点①可维护性差②模块不可重用

矫正:将模块分成更小的模块,每个模块执行一个操作。

举例:一个函数内调用读取文件与打印当前时间。

逻辑性内聚

定义:这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 。

举例:void fun(int a)  当a==1输出“OK”当a==其它值时输出“ERROR”。(其它情况多参数可能屏蔽其它实参)

时间性内聚

定义:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

缺点:难以重用

过程性内聚

定义:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。简单的说就是如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。

缺点:难以重用

解决方案:将模块分割成多个单独的操作。

通信性内聚

定义:执行一系列与产品要遵循的步骤顺序有关的操作,并且,如果所有操作都对相同的数据进行,则该模块具有通信性内聚。

举例:计算速度并且将其发送到打印机并输出结果。

缺点:难以重用

解决方案:将模块分割成多个单独的操作。

功能性内聚

模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。

优点:它的功能明确。判断一个模块是否功能内聚,一般从模块名称就能看出。如果模块名称只有一个动词和一个特定的目标(单数名词),一般来说就是功能内聚,如:“计算水费”、“计算产值”等模块。功能内聚一般出现在软件结构图的较低层次上。

信息性内聚

定义:如果模块进行许多操作,每个都有各自的入口点,每个操作的代码相对独立,而且所有的操作都对相同的数据结构完成。

注意:①逻辑性内聚的各个操作是互相纠缠的,而信息性内聚模块各操作代码是完全独立的。②信息性内聚的模块主要用来实现一种抽象的数据类型。

总结

1、功能内聚:实现一个功能。
2、信息内聚:完成多个功能,各个功能在同一数据结构上操作。
3、通信内聚:模块内各功能部分使用了相同的输入数据或产生相同的输出数据。
4、过程内聚:把流程图中某一部分划出组成模块,即过程内聚,如循环部分、判定部分、计算部分分成三个模块。
5、时间内聚:又称为经典内聚,大多为多功能模块,模块的各个功能的执行与时间有关,如初始化模块和终止模块。
6、逻辑内聚:把几种相关的功能组合在一起,由传送给模块的判定参数来确定执行哪一种功能。
7、偶然内聚:模块内各部分之间没有联系,或即使有联系,也很松散,是内聚程序最低的模块

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注