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

软件工程——内聚性和耦合性 也就是说,模块之间传递的是数据的值,而不是数据的地址结构。因此,数据耦合的模块之间耦合度较低,因为它们只需要理解数据的含义和作用,而不需要关心数据的具体实现。若干模块访问一个公共的数据环境(全局数据结构、共享的通信区、内存的公共覆盖区等),耦合的复杂程度随耦合模块的数量的增加而显著增加。外部耦合和公共耦合都涉及到模块对公共资源的访问,但他们在访问资源类型、模块之间的关联度以及维护的复杂性上都有所区别。耦合性由高到低分别为:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。 阅读详情

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

  英文 : coupling

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

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

  (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)把模块的通信信息放在缓冲区中

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

避坑指南:ArcGIS 做莫兰指数分析,你的‘空间关系概念化’选对了吗? 本文深入解析了ArcGIS中莫兰指数分析的关键参数——'空间关系概念化'的选择策略。通过对比反距离法、固定距离法和K最近邻法的适用场景与影响机制,帮助研究者避免常见误区,提升空间自相关分析的准确性和解释力。特别针对全域莫兰指数和局域莫兰指数的计算差异提供了实用建议。 阅读详情

相关推荐

Device Mapper 代码分析

Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实虚拟的块设备。DM以块设备的形式注册到Linux内核中,凡是挂载(者说“映射”)于DM结构下的块设备,不管他们是如何组织,如何通讯,在Linux看来都是一个完整的DM块设备。因此DM让不同组织形式的块设备者块设备集群在Linux内核面前有一个完整统一的DM表示。一、DM

SonicLing的专栏 1万+

什么是耦合性

耦合性(Coupling) 耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。...

smallfatman的博客 2万+

神经网络MLP 进行全球海温预测(代码+数据集+包版本+python国内镜像网站)

内含:数据集:HadISST_sst.nc训练代码:MLP_train.py预测代码:MLP_pre.py所需包及版本:requirementspython版本:3.6.5(内含python镜像,快速下载地址)适用于:1. 大作业为该类选题的同学2. 通过简单的demo进行神经网络学习的同学运行指南:1. 两个代码文件和数据集放同一目录,先运行MLP_train.py,生成mlp_model.pkl(注意路径可自行修改),再运行MLP_pre.py(注意路径可自行修改)2. 数据集较大,训练时间较长,请耐心等待(原版大概20分钟,可修改参数来减少训练时间) 结果:训练代码显示MSE值,预测代码显示验证集的第一个时间步长的预测值和真实值。

软件工程概论---内聚性和耦合性

软件工程概论---内聚性和耦合性(知识点)

weixin_69884785的博客 6196

耦合度耦合性

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

weixin_41575632的博客 796

关于耦合度以及低耦合度的必要性

耦合性(英语:Coupling,dependency,耦合力耦合度)是一种软件度量,是指一程序中,模块及模块之间信息参数依赖的程度。内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出[1]。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。耦合性可以是低耦合性为松散耦合),也可以是高...

ChasingdreamLY的博客 8300

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

耦合性(Coupling),也叫耦合度 定义:是对模块间关联程度的度量。(是一个抽象的度量单位) 耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。...

JeekMrc的博客 4459

原创经典-为什么Spring中的IOC(控制反转)能够降低耦合性(解耦)?

1. IOC为什么能降低耦合性?IOC为什么能够解耦? 2. 面向接口编程相对于面向对象编程有什么好处。 3. 工厂模式有什么好处?为什么要费劲巴拉地创造一个`类`去`生产对象`,直接`new`不挺好的吗? 4. IOC生产bean的核心理念............

JavaProfessional 6206

java多态 降低代码耦合性_如何降低耦合度

一、什么是耦合度耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准。耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。耦合按从强到弱的顺序可分为以下几种类型:(1)内容耦合。当一个模块直...

weixin_36242060的博客 1486

术语-软件度量-耦合性耦合性

ylbtech-术语-软件度量-耦合性耦合性 耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中...

weixin_30273763的博客 535

“内聚性”和“耦合性

内聚性 又块内联系 指***模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。*** 特性 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。 模块中组成元素结合的越紧密,模块的内聚性就越高,模块的独立性也就越高。 理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。 模块的内聚性和耦合性是两个相互对立且又密切相关的概念。 耦合性 也叫耦合度,是对模块间关联程度的度量。 耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少

喜欢前端的后端 MelodyJerry 2990

耦合度

软件工程中对象之间的耦合度就是对象之间的依赖性。对象之间的耦合度越高,维护成本越高。 耦合性:是对模块关联程度的度量。耦合的强弱取决于模块间接口的复杂性,调用模块的方式以及通过界面传递数据的多少。 模块间联系越多,其耦合性越强,同时表明其独立性越差。 耦合分以下几种: 内容耦合 > 公共耦合 > 外部耦合 > 控制耦合 > 标记耦合 > 数据耦合 > 非直接耦合 内容耦合。 当一个模块直接修改操作另一个模块的数据时,一个模块不通过正常入口而转入另一个模块时,这样的

qq_45697630的博客 3468

Java当中什么是耦合、如何解(降低)耦合

什么是耦合性 耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。 什么是程序间的耦合 假如:当我去new一个对象的时候,而这个对象不存在,这个时候程序会报编译时异常,也就意味着程序连运行都运行不了。 如何解耦 我们可以利用Java的反射技术,通过类定名,来进行反射创建对象,这个时候我们可以成功的避免编译时异常,并且保证了项

怪咖@的博客 1万+

耦合性简单解释

解耦的目的就是达到, A模块调用B时, 不需要知道B的内部实现 耦合等级: 高耦合->低耦合 红色为常见的耦合,->后面基本就是这篇文章的3条总结.如果能明白就不需要继续看了 内容耦合 共用耦合common coupling->尽量不要全局变量, --->>各个模块不依赖全局变量 外部耦合 控制耦合control coupling ->不要用A模块的flag去控制B模块. --->>A不需要知道B的结构 特征耦合stamp coupling or data struct coupling->(如果模块只用到

jiht594的专栏 6060

耦合与耦合性概念解释(一)

耦合是指两个两个以上的电路元件电网络的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象。 耦合作为名词在通信工程、软件工程、机械工程等工程中都有相关名词术语。 耦合主要分为以下几种: 多场耦合 现实工程中,物理场是许多的 ,温度场,引力场,湿度场等等均属于物理场,而我们要解决的许多问题是这些物理场的叠加问题,因为这些物理场直接是相互影响的。比如炼钢

u012999868的专栏 7568

什么是耦合性

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

Suasea的专栏 5441

耦合与耦合性区别(二)

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合性耦合度”)

u012999868的专栏 7498

软件工程知识点之耦合性

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。 一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为(耦合性性由强到弱): 内容耦合(Content Coupling).

wzw的博客 2465

耦合性与内聚性

1) 耦合性  耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。  决定耦合性高低的主要因素   由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。 (1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则这种耦合为数...

东苑草根 1256
上一篇: string使用
下一篇: springcloudalibaba nacosclient自动获取配置 启动流程
half000
博客等级 码龄18年 7粉丝 38原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值