模块间的耦合

模块间的耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。

耦合的强弱取决于

1.模块间接口的复杂

2.调用模块的方式

3.通过界面传送数据的多少。

模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。

模块间联系越多,其耦合性越强,同时表明其独立性越差。

软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。

划分模块的一个准则就是高内聚低耦合。

 

一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为(独立性由强到弱)

计算机生成了可选文字:模 块 间 的 耦 合 低 非 直 接 耦 合 数 据 耦 合 标 记 耦 合 控 制 耦 合 外 部 耦 合 公 共 耦 合 内 容 耦 合 8 强 模 块 独 立 性

 

非直接耦合(Nondirect Coupling)

如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。

数据耦合(Data Coupling)

如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。

由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。因此,数据耦合是松散的耦合,模块之间的独立性比较强。

在软件程序结构中至少必须有这类耦合,多使用数据耦合

印记耦合(Stamp Coupling)

如果一组模块通过参数表传递记录信息,就是标记耦合

事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。

在设计中应尽量避免这种耦合,它使在数据结构上的操作复杂化了。

控制耦合(Control Coupling)

如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。

这种耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对所控制模块的任何修改,都会影响控制模块。

另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性

外部耦合(External Coupling)

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

公共耦合(Common Coupling)

若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。

公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等

 这种耦合会引起下列问题:

1.所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。

2.无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。

3.公共数据名的使用,明显降低了程序的可读性。

 

公共耦合的复杂程度随耦合模块的个数增加而显着增加。若只是两个模块之间有公共数据环境,则公共耦合有两种情况。

若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合

若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合

只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。否则,还是使用模块独立性比较高的数据耦合好些。

内容耦合(Content Coupling)

如果发生下列情形,两个模块之间就发生了内容耦合。

一个模块直接访问另一个模块的内部数据;

一个模块不通过正常入口转到另一模块内部;

两个模块有一部分程序代码重叠(只可能出现在汇编语言中)

一个模块有多个入口

这种耦合是模块独立性最弱的耦合。

 

 

总之尽量使用数据耦合,少量使用控制耦合,限制使用公共耦合,完全不用内容耦合。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值