软件工程内聚详解

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

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

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

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

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

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

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

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

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

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

缺点:难以重用

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

缺点:难以重用

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

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

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

缺点:难以重用

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

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

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

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

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

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

更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值