耦合与内聚

耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。


数据耦合

数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递.数据耦合联系简单,耦合度低,模块独立性好,模块间的影响最小,是最理想的一种耦合形式。


控制耦合

控制耦合(control coupling)指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。

这种耦合对系统的影响较大,它影响接收控制流模块的内部运行。这种模块严格说不是“黑箱”模块,不利于模块的修改与维护。
虽然控制联结的耦合度高于数据耦合,但这种联结有时是必要的。特别对某些反映状态标志的控制信息传递是必须的。
控制信息不同于数据信息,是控制处理过程的一些参数。


标记耦合

标记耦合指两个模块之间传递的是数据结构,如高级语言的数组名、记录名、文件名等这些名字即为标记,其实传递的是这个数据结构的地址。
被调用的模块只需要使用其中一部分数据元素,可以使用的元素多于它确实需要的元素,这导致对数据的访问失去了控制


公共耦合

公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合.公共数据环境可以是全程变量或数据结构共享的通信,内存的公共覆盖区及任何存储介质上的文件,物理设备等(也有将共享外部设备分类为外部耦合).
由于两个模块都要引用同一个公共数据域,因此有较高的耦合度。一旦公共数据有变化,与之有关的模块都应随之而修改,增加了维护的工作量及难度。

  1. 一个模块往公共环境送数据,另一个模块从公共环境里读数据,这是数据耦合的一种形式,是比较松散的耦合
  2. 两个模块都既往公共模块送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间

内容耦合

当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。如果发生下列情形,两个模块之间就发生了内容耦合

  1. 一个模块直接访问另一个模块的内部数据;
  2.  一个模块不通过正常入口转到另一模块内部;
  3.  两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
  4. 一个模块有多个入口。

尽量使用数据耦合,少用控制耦合与标记耦合,限制公共耦合的范围,完全不是用内容耦合


内聚

是一个模块内部各成分之间相关联程度的度量。


偶然内聚:如果一个模块完成一组任务,这些任务彼此之间即使有关系,关系也是很松散的,就叫做偶然内聚。
有时写完一个程序后,发现了一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内存,这样就出现了偶然内聚的模块
逻辑内聚:如果一个模块包含的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出),叫做逻辑内聚
时间内聚:如果一个模块包含的任务必须在同一时间内执行(例如,模块完成各种初始化工作),就叫时间内聚
过程内聚;如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚
通信内聚:如果模块中所有元素都使用同一个输入数据或产生同一个输出数据,则称为通信内聚
顺序内聚:如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。
功能内聚:模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值