耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。

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

(1)非直接耦合(Nondirect coupling)

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

(2)数据耦合(Data Coupling)

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

(3)标记耦合(Stamp Coupling)

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

(4)控制耦合(control(20upling)

如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。如图4.13所示。这种耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对所控制模块的任何修改,都会影响控制模块。另外,控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。

(5)外部耦合(External(;oupling)

一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。例如C语言程序中各个模块都访问被说明为extern类型的外部变量。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。

(6)公共耦合((;ommon Coupling)

若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

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

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

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

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

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

若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。否则,还是使用模块独立性比较高的数据耦合好些。

(7)内容耦合((70ntent Coupling)

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

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

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

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

4)一个模块有多个入口。

在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。好在大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。

以上由Myers给出的七种耦合类型,只是从耦合的机制上所做的分类,按耦合的松紧程度的排列只是相对的关系。但它给设计人员在设计程序结构时提供了一个决策准则。实际上,开始时两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求设计人员按照Myers提出的方法进行分析,比较和分析,逐步加以改进,以提高模块的独立性。

原则上讲,模块化设计的最终目标,是希望建立模块间耦合尽可能松散的系统。在这样一个系统中,我们设计、编码、测试和维护其中任何一个模块,就不需要对系统中其他模块有很多的了解。此外,由于模块间联系简单,发生在某一处的错误传播到整个系统的可能性很小。因此,模块间的耦合情况很大程度影响到系统的可维护性。

那么,在系统的模块化设计时,如何降低模块间的耦合度呢?以下几点可供参考。

1)根据问题的特点,选择适当的耦合类型

在模块间传递的信息有两种:一种是数据信息,一种是控制信息。传送数据的模块,其耦合程度比传送控制信息的模块耦合程度要低。

在模块调用时,传送的控制信息有两种:一种是传送地址,即调用模块直接转向所调用模块内部的某一地址。在这种情况,一个模块的改动对其他模块有直接影响。另一种是传送判定参数,调用模块把判定参数传送给所调用模块,决定所调用模块如何执行。在这种情况下,模块间的耦合程度也很高,所以应当尽量减少和避免传送控制信息。但另一方面,也不要盲目地追求松散的耦合。例如,一个程序有40种出错信息,若把它们集中放在一个错误处理模块中,通过调用模块传送错误类型到该模块的接口上,再进行处理,就形成“控制耦合”。这样做可以消去重复的信息,使所有错误信息格式标准化。所以,耦合类型的选择,应当根据实际情况,全面权衡,综合地进行考虑。

2)降低模块接口的复杂性

模块接口的复杂性包括三个因素:一是传送信息的数量,即有关的公共数据与调用参数的数量;二是联系方式;三是传送信息的结构。

一般情况,在模块的调用序列中若出现大量的参数,就表明所调用模块要执行许多任务。通过把这个所调用模块分解成更小的模块,使得每个小模块只完成一个任务,就可以减少模块接口的参数个数,降低模块接口的复杂性,从而降低模块间的耦合程度。

模块的联系方式(即调用方式)有两种:call方式和“直接引用”。前者使用标准的过程调用方式,模块间接口的复杂性较低,模块间的耦合程度低。后者是一个模块直接访问另一个模块内部的数据或指令,模块间的耦合程度高。所以,应当尽可能用call方式代替“直接引用”,减少模块接口的复杂性。在参数类型上,尽量少使用指针、过程等类型的参数。

此外,在模块接口上传送的信息若能以标准的、直接的方式提供,则信息结构比较简单。若以非标准的、嵌套的方式提供,则信息结构比较复杂。例如,在模块中要调用画直线的命令LINE,若命令要求直接给它直线两个端点的坐标Xo,yo,x1,y1:

call LINE(zo,yo,X1,y1)

则接口复杂性比给origin(始点),end(终点)要低。因为后者还要定义origin和end的结构。

call LINE(origin,end)

3)把模块的通信信息放在缓冲区中

因为缓冲区可以看做是一个先进先出的队列,它保持了通信流中元素的顺序。沿着通信路径而操作的缓冲区将减少模块间互相等待的时间。在模块化设计时,如果能够把缓冲区作为每次通信流的媒介,那么一个模块执行的速度、频率等问题一般不影响其他模块的设计。

看到一个很有意思的比喻:

有两个章鱼,7个脚互相缠绕在一起,就是高耦合性; 仅有1个脚互相缠绕就是低耦合性。

转载于:https://www.cnblogs.com/manson/archive/2009/10/20/1586887.html

耦合性(耦合度) -- Coupling相关推荐

  1. 程序的耦合性和内聚性

    耦合性(Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度. 内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反 ...

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

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

  3. 耦合性(或称“耦合度”)

    耦合性(或称"耦合度") 英文 : coupling 耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间接口的复杂程度.调用模块的方式以及哪些信息通过接口. 一般模 ...

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

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

  5. 计算机耦合分类,耦合性 (计算机科学)

    关于与"耦合性 (计算机科学)"名称相近或相同的条目,请见"耦合". 耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量, ...

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

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

  7. java中接口降低耦合性_如何降低一个程序的耦合性

    耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间接口的复杂程度.调用模块的方式以及哪些信息通过接口. 一般模块之间可能的连接方式有七种,构成耦合性的七种类型.它们之间的关系为(由弱到 ...

  8. 软件工程知识点之耦合性

    耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量.耦合的强弱取决与模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包括控制关系.调用 ...

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

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

最新文章

  1. CUDA Samples: green ball
  2. 如何分配和释放存储空间
  3. 图解Nosql(hbase)与传统数据库的区别
  4. JDBC+Servlet+JSP整合开发之22.JSP简介
  5. 网站的domain不在首页的原因
  6. Android studio 混淆打包 proguard-rules.pro 与 bulid.gradle 配置总结
  7. SVM实战:如何进行乳腺癌检测
  8. ISV客户博客系列:iVoteSports通过Windows Azure扩展它的面向棒球的移动游戏应用程序...
  9. 美国最受欢迎的电商网站,竟然是一家中国公司?
  10. Hbase新API以及Hbase增删改差
  11. 全心加入web前端开发,向上吧!
  12. php 正则匹配 文件,php – 正则表达式匹配.htaccess中的一系列文件类型
  13. webstorm如何自定义代码模板
  14. 用VS2008制作主题和皮肤
  15. Android多媒体技术(二)浅析Camera视频实时采集中涉及的参数配置
  16. TiDB x 中国电信翼支付 | 「效率提升 5 倍」,TiDB 在电信翼支付金融核心场景的应用
  17. 今日分享|闪魔钢化膜5.8又来了/iPhone数据线2条10.8/adidas三叶草同款89/空气炸锅/内裤3条14.9/更多...
  18. 电脑显示没有被指定在上运行_win7运行QQ时出现“.dll没有被指定在Windows上运行,或者它包含错误”如何解决...
  19. VSCode常用插件-快捷键
  20. java计算机毕业设计夕阳红养老院系统源码+lw文档+系统+数据库

热门文章

  1. 蛋壳公寓信息/信息网爬取/小猪短租/豆瓣/拉钩/人民邮电报/百度电视剧/加载更多-获取字符串中间任意内容
  2. 黄石城市职业学院计算机专业,黄石6所中职学校 14个“3+2”专业直升大学
  3. 新手上路,如何迅速搭建一套源码系统
  4. 体育世界杂志体育世界杂志社体育世界编辑部2022年第4期目录
  5. win10下解决谷歌浏览器点击安装包无反应
  6. RedisCluster redis集群配置
  7. EBS 退货单无法退账,VALIDATE_RMA_LOT_QUANTITIES_ERROR
  8. windows下的OpenGL视频播放器开发环境
  9. 计算机视觉—基于BOW的图像检索
  10. 美术集网校—素描头像画不好?找出关键点才重要