软件设计中通常用耦合度内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合

一、耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

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

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

1.2 公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 这种耦合会引起下列问题:

所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。
无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。
公共数据名的使用,明显降低了程序的可读性。
公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两个模块之间有公共数据环境,则公共耦合有两种情况。
若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。否则,还是使用模块独立性比较高的数据耦合好些。

1.3 数据耦合(DataCoupling)如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。因此,数据耦合是松散的耦合,模块之间的独立性比较强。在软件程序结构中至少必须有这类耦合。

1.4 印记耦合(StampCoupling)如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。在设计中应尽量避免这种耦合,它使在数据结构上的操作复杂化了。如果采取"信息隐蔽"的方法,把在数据结构上的操作全部集中。


1.5 控制耦合(ControlCoupling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。这种耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对所控制模块的任何修改,都会影响控制模块。另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。
1.6 外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。例如C语言程序中各个模块都访问被说明为extern类型的外部变量。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。

1.7 内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合。
一个模块直接访问另一个模块的内部数据
一个模块不通过正常入口转到另一模块内部
两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
一个模块有多个入口
在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,
都会造成程序出错。好在大多数高级程序设计语言已经设计成不允许出现内容
耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。


二、内聚度是前述信息隐藏和局部化概念的自然扩展,它标志一个模块内部各成分彼此结合的紧密程度。内聚度按其高低程度可分为7级,内聚度越高越好。

内聚度按其高低程度可分为7级,内聚度越高越好。

低级内聚(偶然内聚、逻辑性内聚、时间性内聚)

中级内聚(过程性内聚、通信性内聚)

高级内聚(顺序性内聚、功能性内聚)

2.1 偶然内聚(coincidental cohesion)内聚性最差,指一个模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。常见的偶然性内聚为,当程序员写完一个程序后发现有一组语句多处出现,于是为节省内存便将这组语句单独组成一个模块。

2.2 逻辑性内聚(logical cohesion)如果一个模块完成的诸任务逻辑上相关(例如,一个模块产生所有与类型无关的输入)

2.3 时间性内聚(temporal cohesion)如果一个模块包含的诸任务必须在同一时间段内执行(例如,一个初始化模块)

2.4 过程性内聚(procedural cohesion)模块的过程性内聚度是指,模块内成分彼此相关,并且必须按特定的次序执行

2.5 通信性内聚(communicational cohesion)模块的通信性内聚度是指,模块中各成分都将对数据结构的同一区域进行操作,以达到通信。

2.6 顺序性内聚(sequential cohesion)如果一个模块内的各处理成分均与同一功能相关,且这些处理必须顺序执行

2.7 功能性内聚(functional cohesion)如果模块内所有成分形成一个整体,完成单个功能,功能内聚是最高程度的内聚形式

耦合性、内聚度的介绍相关推荐

  1. 不同耦合度和内聚度的介绍

    耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度.进入或访问一个模块的点以及通过接口的数据. 模块内聚度用于衡量模块内部各成分之间彼此结合的紧密程度. 在软件设计时,追 ...

  2. 内容耦合 c语言例子,耦合性 内聚加实例

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

  3. 在C语言中数据耦合例子,耦合性 内聚加实例 - osc_yip56055的个人空间 - OSCHINA - 中文开源技术交流社区...

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

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

    模块独立性的度量 从两个方面来度量模块之间的独立性,这两个概念是模块的耦合度和模块的内聚度 耦合度 耦合度分为: 独立耦合 , 数据耦合 , 控制耦合 , 公共耦合 和 内容耦合 独立耦合 指两个模块 ...

  5. 软件设计原则:内聚、耦合有哪几种类型?内聚度、耦合度如何比较?

    文章目录 前言 一.何为内聚? 1.1.7 种内聚类型及其描述 二.何为耦合? 2.1.7 种耦合类型及其描述 总结 前言 高内聚.低耦合是我们在软件设计过程中必须遵循的一个重要原则,在整个软件工程中 ...

  6. 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”

    一.耦合性 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传 ...

  7. 专业词汇解释:耦合性、耦合度(Coupling)

    耦合性(Coupling),也叫耦合度 定义:是对模块间关联程度的度量.(是一个抽象的度量单位) 耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少. 模块间的耦合度是指模块 ...

  8. 编程心法 之 内聚度和耦合度是什么

    内聚度 Cohesion 耦合度 Coupling "Coupling" describes the relationships between modules, and &quo ...

  9. php设计模式及耦合性和多形性

    什么是设计模式: 设计模式就是一个教你如何利用真实可靠的设计来组织你的代码的模板. 所有的设计模式都有一些常用的特性:一个标识(a name),一个问题陈述(a problem statement)和 ...

最新文章

  1. 有的人撑死,有的人饿死,有的人吓死
  2. python不能处理excel文件-python处理Excel文件的几个模块
  3. 访问DBGRIDEH中的行与列
  4. 【已解决】Android5.0版本如何打开调试模式
  5. 洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)
  6. HTTP协议1之协议详解--转
  7. linux web 服务器性能,Linux系统Web服务器性能测试(2)
  8. SpringMVC 集成 mybatisPlus 分析
  9. PID控制的输入量与输出量的关系
  10. Java web (JSP)入门
  11. android dumpsys命令使用
  12. xposed自定义参数
  13. jenkins--master/slave模式---master是容器版---slave是非容器版
  14. web前端入门到实战:HTML图像标签img和源属性src及Alt属性、宽高、对齐
  15. 来自一枚初生牛犊不怕虎的小菜鸟的Mock.js使用,不足之处欢迎读者的指出 谢谢...
  16. 13.歌手大赛计分程序。
  17. Dynamics CRM命令栏定制基础知识及手动编辑customization.xml实例
  18. 4、传输介质——光纤与光缆
  19. 微信编辑器哪个操作最简单?
  20. 数据结构练习题――Hero In Maze 简单版

热门文章

  1. CHITUBOX Pro 1.2.0
  2. 移动端点击事件存在时间延迟,延迟时间是多少?如何去解决?
  3. SQL首字母大写其他字母小写
  4. python实现spearman相关性检验
  5. klee 检测漏洞-四个实例
  6. Redis事务——锁机制
  7. Java数组赋值数组复制(拷贝)
  8. 网站备案信息查询,如何通过网站底部查询网站备案信息
  9. 【RT-Thread开源作品秀】运动手表
  10. 网银,快钱,支付宝,财付通的比较