模块独立性的度量(耦合度和内聚度)

模块独立性的度量

从两个方面来度量模块之间的独立性,这两个概念是模块的耦合度和模块的内聚度

耦合度

耦合度分为: 独立耦合 , 数据耦合 , 控制耦合 , 公共耦合 和 内容耦合

独立耦合

指两个模块之间彼此完全独立,没有直接联系,他们之间的联系仅仅在于他们同属于一个软件系统或共有一个上层模块,这是耦合程度最低的一种(系统中不可能所有的模块都属于这种关系)

数据耦合

数据耦合指两个模块彼此交换数据,如: 一个模块的输出数据是另一个模块的输入数据,或者一个模块带参数调用另一个模块,下层模块又返回参数,在一个系统中,这种耦合是不可避免的,数据耦合的联系程度也较低,这种耦合是不可避免的

控制耦合

在调用过程中,若两个模块间传递的不是数据而是控制参数,则模块间的关系为控制耦合,控制耦合不是一种必须存在的耦合
当被调用模块收到控制信息作为输入参数时,说明该模块内部存在多个并列的逻辑路径,即有多个功能,控制变量从多个功能中选择所要执行的部分,控制耦合是可以完全避免的

  • 找出模块调用时所用的一个或多个控制变量
  • 在被调模块中根据控制变量找出所有的流程
  • 将每一个流程分解为一个独立的模块
  • 将原被调模块中的流程选择部分移到上层模块,变为调用判断

公共耦合

公共耦合又称为公共环境耦合或者数据区耦合,如果多个模块对同一个数据区进行存取操作,则它们之间的关系就是公共耦合,公共耦合最弱的一种是:两个模块共享一个数据变量,一个模块只向其中写数据,另一个模块只从其中读数据
注意的是: 公共耦合很强的时候,关系会变得错综负责,难以控制,系统的可靠性下降,可理解性,可维护性变差

内容耦合

内容耦合是耦合程序最高的一种形式,若一个模块直接访问另一个模块的内部代码或数据,即出现内容耦合,内容耦合会严重破坏模块的独立性和系统的结构化,代码相互纠缠,运行错综复杂,应尽量避免
内容耦合往往变现为以下几种形式:

  • 一个模块访问另一个模块的内部代码或数据
  • 一个模块不通过正常入口而转到另一个模块的内部(如使用goto语句或者jmp指令直接进入另一个模块的内部)
  • 两个模块有一部分代码重叠
  • 一个模块有多个入口(这意味着一个模块有多种功能)
    模块划分时,尽量使用书数据耦合,少用控制耦合(转成数据耦合),限制公共耦合的范围,完全不用内容耦合

内聚度

内聚度是模块内部各成分(语句或者语句段)之间的联系,模块内部各成分联系越紧,其内聚度越大,模块独立性越强,系统越易理解和维护,良好的内聚度的模块应能较好的满足信息局部化的原则,功能完整单一模块的高内聚必然能导致模块的低耦合度,理想情况是,一个模块只使用局部数据变量,完成一个功能
由弱到强的顺序,内聚读可分为7类:

偶然内聚

块中的各个任务(通过语句或指令来实现的)之间没有什么有意义的联系,他们之所以能构成一个模块完全是偶然的原因
偶然内聚的模块有很多缺点:由于模块内没有实质性的联系,很可能在某种情况下一个调用模块需要对它修改而别的模块不需要,这时就很难处理,同时这种模块的含义也不易理解,甚至难以为他去一个何时的名字,偶然内聚的模块也难于测试,空间允许下,不应该使用偶然内聚

逻辑内聚

一个模块完成的任务在逻辑上属于相同或相似的一类(例如,用一个模块产生各种类型的输出)
如: 模块A,B,C的功能相似但不相同,如果把他们合并成一个模块ABC,则这个模块就为逻辑内聚,因为他们是由于逻辑上相似而发生联系的,逻辑联系是一种较弱的联系,当X,Y,Z调用合成的ABC模块时,需要判别执行不同功能的哪一部分
逻辑耦合存在的问题

  • 修改困难,调用模块中有一个要对其改动,还要考虑到其他调用模块
  • 模块内需要增加开关,判断是谁调用
  • 实际上每次调用只执行模块中的一部分,其他部分也被装入了内存,因而效率不高

时间内聚

时间内聚是指一个模块中包含的任务需要在同一时间内执行(如初始化,结束等所需操作)
时间内聚和偶然内聚,逻辑内聚一样,都属于低内聚度类型

过程内聚

如果一个模块内的各个处理元素是相关的,而且必须按固定的次序执行,这种内聚就称为过程内聚,这种内聚往往表现为次序的流程

通信内聚

若一个模块中的各处理元素需引用共同的数据(同一数据项,数据区或文件),则称其元素间的联系为通信内聚,通信内聚的各部分是借助共同使用的数据联系在一起的,故有较好的可理解性,通信内聚和过程内聚属于中内聚度型模块

顺序内聚

若一个模块内的各处理元素关系密切,必须按规定的处理次序执行,则这样的模块为顺序内聚型,在顺序内聚模块内,后执行的语句或语句段往往依赖先执行的语句或语句段,以先执行的部分为条件,由于模块内各处理元素间存在着这种逻辑联系,所以顺序内聚模块的可理解性很强,属于高内聚度型模块

功能耦合

功能耦合是内聚度最高的一种模块类型,如果模块仅完成一个单一的功能,且该模块的所有部分是实现这一功能所必需的,没有多余的语句,则该模块为功能内聚型,功能内聚模块的结构紧凑,界面清晰,易于理解和维护,因而可靠性强,又由于其功能单一,故复用率高,所以他是模块划分时应追求的一种模块类型
在模块设计时力争做到高内聚,并且能够辨别出低内聚的模块,加以修改使用提高内聚度并降低模块之间的耦合度

  • 设计功能单一的模块
  • 控制使用全局数据
  • 模块间尽量传递数据型变量
    构件(模块)设计的最终目的是将数据模型,架构模型,界面模型变为可以操作的软件,构件设计的详细程度可以根据项目的具体情况而定,在概要设计的时候,可以根据具体要求对各个模块进行详细设计,如果某项目开发过程中不存在详细设计过程,则可以将构件设计得尽可能详细,这样概要设计和详细设计合为一个过程
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子君ee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值