功能内聚、顺序内聚、数据耦合、控制耦合例子
- 格式:pdf
- 大小:61.04 KB
- 文档页数:3
什么是耦合、内聚模块独⽴性: 指每个模块只完成系统要求的独⽴⼦功能,并且与其他模块的联系最少且接⼝简单。
两个定性的度量标准――耦合性和内聚性。
耦合性也称块间联系。
指软件系统结构中各模块间相互联系紧密程度的⼀种度量。
模块之间联系越紧密,其耦合性就越强,模块的独⽴性则越差。
模块间耦合⾼低取决于模块间接⼝的复杂性、调⽤的⽅式及传递的信息。
耦合性分类(低――⾼): ⽆直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合;1 ⽆直接耦合:2 数据耦合: 指两个模块之间有调⽤关系,传递的是简单的数据值,相当于⾼级语⾔的值传递;3 标记耦合: 指两个模块之间传递的是数据结构,如⾼级语⾔中的数组名、记录名、⽂件名等这些名字即标记,其实传递的是这个数据结构的地址;4 控制耦合: 指⼀个模块调⽤另⼀个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执⾏块内某⼀功能;5 公共耦合: 指通过⼀个公共数据环境相互作⽤的那些模块间的耦合。
公共耦合的复杂程序随耦合模块的个数增加⽽增加。
6 内容耦合: 这是最⾼程度的耦合,也是最差的耦合。
当⼀个模块直接使⽤另⼀个模块的内部数据,或通过⾮正常⼊⼝⽽转⼊另⼀个模块内部。
所以,⼀般情况下耦合性越低,则应⽤程序开发更灵活更省⼒。
以web UI开发的松耦合为例: 很多设计模式就是为了解决紧耦合的问题。
如果两个组件耦合太紧,则说明⼀个组件和另⼀个组件直接相关,这样的话,如果修改⼀个组件的逻辑,那么另外⼀个组件的逻辑也需修改。
⽐如,假设有⼀个名为error的CSS类名,它是贯穿整个站点的,它被嵌⼊到HTML之中。
如果有⼀天你觉得error的取名并不合适,想将它改为warning,你不仅需要修改CSS还要修改⽤到这个className的HTML。
HTML和CSS 紧耦合在⼀起。
这只是⼀个简单的例⼦。
想象⼀下,如果⼀个系统包含上百个组件,那这简直就是⼀场噩梦。
常见内聚种类(共七种)内聚:⼀个模块内部各个元素彼此结合的紧密程度。
它是衡量⼀个模块内部组成部分间整体统⼀性的度量。
内聚程度最⾼的是功能内聚,最差的是偶然内聚(或称巧合内聚)常见的内聚有七类。
1)功能内聚(Functional Cohesion)如果⼀个模块内所有处理元素完成⼀个,⽽且仅完成⼀个功能,则称为功能内聚。
功能内聚是最⾼程度的内聚。
但在软件结构中,并不是每个模块都能设计成⼀个功能内聚模块。
2)顺序内聚(Sequential Cohesion)如果⼀个模块内处理元素和同⼀个功能密切相关,⽽且这些处理元素必须顺序执⾏,则称为顺序内聚。
3)通信内聚(Communicational Cohesion)如果⼀个模块中所有处理元素都使⽤同⼀个输⼊数据和(或)产⽣同⼀个输出数据,称为通信内聚。
4)过程内聚(Procedural Cohesion)如果⼀个模块内的处理元素是相关的,⽽且必须以特定的次序执⾏,称为过程内聚。
过程内聚与顺序内聚的区别是:顺序内聚中是数据流从⼀个处理单元流到另⼀个处理单元,⽽过程内聚是控制流从⼀个动作流向另⼀个动作。
5)时间内聚(Temporal Cohesion)如果⼀个模块包含的任务必须在同⼀段时间内执⾏,称为时间内聚。
也称为瞬时内聚。
6)逻辑内聚(Logical Cohesion)如果模块完成的任务在逻辑上属于相同或相似的⼀类,称为逻辑内聚。
7)偶然内聚(Coincidental Cohesion)如果⼀个模块由完成若⼲毫⽆关系的功能处理元素偶然组合在⼀起的,就叫偶然内聚。
软件设计中应该:⼒求做到⾼内聚,尽量少⽤中内聚,不⽤低内聚。
内聚和耦合内聚和耦合是软件工程中重要的概念,这对软件系统的设计、开发、维护和更新起着重要的作用。
这两个概念可以通过一些实例得到更清晰的理解。
内聚内聚是指了解某种类型的软件系统,它是指同一软件系统中的组件之间联系紧密的一种特性。
这种紧密联系使得软件系统内部模块之间的保密性得到保护,即,模块之间彼此独立,不会被外部系统干扰。
这样,无论是系统设计者还是系统开发者都可以更加方便地管理系统,避免不必要的成本。
同时,系统的可测试性也得到提升。
一个典型的内聚系统通常包括了一系列的模块,它们彼此之间有紧密的联系。
比如,一个学生信息管理系统就包括了学生信息模块、成绩模块和课程模块等等,它们彼此之间有着紧密的联系,这样,在以后的维护和开发中,系统设计者和开发者就可以更容易地进行系统管理。
耦合耦合是指软件系统中不同组件之间的联系,它是指软件系统中各个组件之间可以相互影响,可以通过一定数量的参数和数据交互来实现结果。
耦合可以分为无耦合和有耦合两种,无耦合是指系统组件之间独立同时可以实现预期功能的情况,而有耦合则指系统组件之间存在着有意义的联系,而且必须合作才能实现业务功能。
耦合可以帮助软件系统实现高度整合,使得系统组件之间可以更加紧密地联系,而且可以在更短的时间内实现更多的业务功能。
比如,一个电子商务系统,它可以实现多个联系,如商品模块、销售模块、财务模块等,他们之间的联系使得用户可以在更短的时间内完成购物程序,同时也为管理者提供了更加灵活的操作性。
总结内聚和耦合是软件系统中重要的概念,它们影响着软件系统的设计、开发、维护和更新,也可以帮助提升系统的可测试性和可扩展性。
内聚是指了解某种类型的软件系统,它使得软件系统内部模块之间变得更加紧密,可以很好地保护模块之间的保密性,并提高系统的可测试性。
耦合是指软件系统中不同组件之间的联系,它可以帮助软件系统实现高度整合,使得系统组件之间可以更加紧密地联系,而且可以在更短的时间内实现更多的业务功能。
软件工程中的耦合软件工程中的耦合:简单地说,对象之间的耦合度就是对象之间的依赖性。
指导使用和维护对象的主要问题是对象之间的多重依赖性。
对象之间的耦合越高,维护成本越高。
因此对象的设计应使类和构件之间的耦合最小。
就是依赖性,相关性吧!!!有软硬件之间的耦合,还有软件各模块之间的耦合。
耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口.一般模块之间可能的连接方式有七种,耦合性由低到高分别是:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
耦合是对一个软件结构内各个模块之间互连程度的度量。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
1.什么是内聚?什么是耦合?内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。
它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
2.内聚分为哪几类?耦合分为哪几类?内聚有如下的种类,它们之间的内聚度由弱到强排列如下:(1)偶然内聚。
模块中的代码无法定义其不同功能的调用。
但它使该模块能执行不同的功能,这种模块称为巧合强度模块。
(2)逻辑内聚。
这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能(3)时间内聚(4)过程内聚(5)通信内聚(6)顺序内聚(7)功能内聚耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:(1)内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合 1. 一个模块直接访问另一个模块的内部数据; 2. 一个模块不通过正常入口转到另一模块内部; 3.两个模块有一部分程序代码重迭(只可能出现在汇编语言中); 4.一个模块有多个入口。
(2)公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
耦合是指两个实体相互依赖于对方的一个量度。
分为以下几种:非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。
标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。
这个记录是某一数据结构的子结构,而不是简单变量。
控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合(1) 一个模块直接访问另一个模块的内部数据;(2) 一个模块不通过正常入口转到另一模块内部;(3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4) 一个模块有多个入口。
延伸阅读:地理学上也会引用耦合这一概念地理时空耦合一切地理事实、地理现象、地理过程、地理表现,既包括了在空间上的性质,又包括着时间上的性质。
只有同时把时间及空间这两大范畴纳入某种统一的基础之中,才能真正认识地理学的基础规律。
在考虑空间关系时,不要忽略时间因素对它的作用,把地理空间格局看作是某种“瞬间的断片”,不同时段的瞬间断片的联结,才能构成对地理学的动态认识。
与此相应,在研究地理过程时,应把这类过程置布于不同地理空间中去考察,以构成某种“空间的变换”,它们可完整地体现地理学的“复杂性”。
地理时空耦合是四维向量的充分表达,除了高度、经度、纬度(垂直方向和水平方向)外,还有时间维的同时考虑。
两个本来分开的电路之间或一个电路的两个本来相互分开的部分之间的交链。
内聚类型耦合类型内聚类型和耦合类型是软件工程中常用的两个概念,用来描述软件模块之间的关联程度和依赖程度。
内聚类型指的是一个模块内部各个元素之间的联系程度,而耦合类型则指的是一个模块与其他模块之间的依赖程度。
我们来讨论内聚类型。
内聚类型分为以下几种:功能内聚、顺序内聚、通信内聚、过程内聚和时间内聚。
功能内聚是指一个模块内部的元素彼此之间实现某个共同的功能,例如一个计算器模块内部的加法、减法、乘法和除法功能。
这些功能是相互关联的,彼此之间形成了一个整体。
顺序内聚是指一个模块内部的元素按照一定的顺序进行执行,例如一个数据处理模块内部的数据输入、处理和输出操作。
这些操作是按照一定的顺序进行的,彼此之间有明确的执行顺序。
通信内聚是指一个模块内部的元素之间通过参数传递或者共享变量进行通信,例如一个图像处理模块内部的像素处理操作。
这些操作需要通过参数传递或者共享变量来进行数据交换和通信。
过程内聚是指一个模块内部的元素按照某个过程或者算法进行操作,例如一个排序算法模块内部的元素按照某个排序算法进行排序操作。
这些操作是按照某个过程或者算法进行的,彼此之间有明确的操作规则。
时间内聚是指一个模块内部的元素在某个时间段内进行操作,例如一个定时任务模块内部的元素按照某个时间间隔进行定时操作。
这些操作是在某个时间段内进行的,彼此之间有明确的时间规定。
接下来,我们来讨论耦合类型。
耦合类型分为以下几种:无耦合、数据耦合、标记耦合、控制耦合和外部耦合。
无耦合是指一个模块与其他模块之间没有任何依赖关系,模块之间可以独立地进行开发和维护。
这种耦合类型是最理想的情况,可以提高软件的可维护性和可重用性。
数据耦合是指一个模块与其他模块之间通过共享数据进行依赖,模块之间通过数据的读取和写入来进行通信。
这种耦合类型存在一定的依赖关系,但是可以通过良好的数据封装和接口设计来降低耦合度。
标记耦合是指一个模块与其他模块之间通过标记变量进行依赖,模块之间通过标记变量的设置和检测来进行通信。
第一章1.1什么是软件?软件和程序的区别是什么?答:⑴软件是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。
软件的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。
⑵软件不是程序,程序是软件的一部分。
程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。
它是由软件开发人员设计和编码的。
程序执行时一般要输入一定的数据,也会输出运行的结果。
没有相关文档,仅有程序是不能称之为软件产品的。
1.2什么是软件生存周期?划分生存周期的主要原则是什么?答:(1)软件的生存周期是指某一软件项目被提出并着手实现开始,直到该软件报废或停止使用为止所经历的时间。
(2)主要原则:各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。
1.3什么是软件危机?它有哪些主要表现?为什么会产生软件危机?答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(2)主要表现:对软件开发成本和研制进度的估计常常很不精确,导致经费预算经常突破,进度超时完成;由于开发人员常常对用户需求只有模糊的了解以及开发人员和用户又未能及时交换意见,导致已完成的软件不能满足用户的需要;软件产品质量差,可靠性得不到保证;软件产品可维护性差;软件成本在计算机系统总成本中所占的比例逐年上升,软件的发展跟不上硬件的发展;软件开发生产率提高的速度远远跟不上计算机应用速度普及深入趋势,软件发展跟不上用户的要求。
(3)产生软件危机的原因:造成软件危机的原因与软件自身的特点有关,也与软件开发人员在开发和维护时采用的生产方式、方法、技术有关。
软件是计算机系统中的逻辑部件,软件产品往往规模庞大,结构复杂。
给软件的开发和维护带来客观的困难;软件开发的管理困难。
由于软件规模大、结构复杂、又具有无形性,导致管理困难,进度控制困难,可靠性无法保证;软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大;软件开发技术落后;生产方式落后;开发工具落后,生产效率提高缓慢。
计算机基础(⼀)模块间耦合的7种类型
⼀般来说,模块之间的耦合有七种类型:
根据耦合性从低到⾼为⾮直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
两个模块之间没有直接关系, 它们之间的联系完全是通过主模块的控制和调⽤实现的,这种耦合为⾮直接耦合;
如果⼀个模块访问另⼀个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输⼊、输出信息的,则称这种耦合为数据耦合;
如果⼀组模块通过数据结构本⾝传递,则称这种耦合为标记耦合;
如果⼀个模块调⽤另⼀个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执⾏块内某⼀功能,这种耦合为控制耦合;
⼀组模块都访问同⼀全局简单变量,⽽且不通过参数表传递该全局变量的信息,则称之为外部耦合;
若⼀组模块都访问同⼀个公共数据环境,则它们之间的耦合就称为公共耦合;
若⼀个模块直接访问另⼀个模块的内部数据、⼀个模块不通过正常⼊⼝转到另⼀个模块内部、两个模块有⼀部分程序代码重叠或者⼀个模块有多个⼊⼝,上述⼏个情形之⼀发⽣则两个模块之间就发⽣了内容耦合。
内聚和耦合的概念嗨,朋友!今天咱们来聊聊编程里超级重要的两个概念——内聚和耦合。
这俩概念就像是建筑里的砖头和水泥,要是没整明白,那盖出来的房子可就不结实,或者干脆就成了烂尾楼啦。
我先来说说内聚吧。
你可以把内聚想象成一个团队里的成员关系。
比如说,有个小组专门负责设计手机APP的界面。
这个小组里的成员呢,有擅长画图标、设计布局的美工,有专门研究用户交互体验的专家,还有负责把这些设计转化成代码的程序员。
他们都紧紧围绕着APP界面设计这个核心任务在工作,这就是高内聚。
每个成员的工作都和APP界面设计这个大目标紧密相关,就像一群蚂蚁齐心协力搬运一块大饼干,没有一个蚂蚁是在瞎忙或者干着和搬饼干完全不相关的事儿。
我有个朋友小李,他之前在一个项目组里。
那个项目组要做一个电商网站,其中有个小团队负责商品展示页面。
这个团队里有个哥们儿,本来应该是优化商品图片展示效果的,可他老是跑去捣鼓网站的用户注册流程。
这就好比是在一个足球队里,守门员不好好守着球门,跑去中场抢球去了,这就是低内聚的表现啊!这样不仅会让商品展示页面的工作进展缓慢,还可能会把整个电商网站的项目进度都给拖慢了。
你说这多让人头疼啊!再来说说耦合。
耦合呢,就像是不同家庭之间的联系。
有些家庭啊,互相之间几乎没什么往来,各自过着自己的小日子,这就好比是低耦合。
在编程里,低耦合就是说不同的模块或者组件之间联系很少,一个模块的变化不太会影响到其他模块。
比如说,一个软件里有用户登录模块和订单管理模块。
这两个模块如果设计得好,用户登录模块改了密码验证的方式,订单管理模块该咋工作还咋工作,不受影响,这就是低耦合的好处。
我给你举个反面例子啊。
我之前见过一个小软件,它的搜索功能和数据存储功能耦合得特别厉害。
搜索功能就像是一个小侦探,要在数据存储这个大仓库里找东西。
可是呢,这俩部分的代码写得乱七八糟,搜索功能里好多地方直接调用了数据存储功能里特别底层的代码。
结果呢,数据存储功能一旦有点小改动,比如说换了一种数据存储的格式,那搜索功能就彻底瘫痪了,就像多米诺骨牌一样,一个倒了全倒了。
低耦合高内聚数据耦合标记耦合控制耦合低耦合高内聚:数据耦合、标记耦合、控制耦合在软件开发领域中,低耦合高内聚是一种设计原则,旨在提高软件系统的可维护性和可扩展性。
低耦合指的是模块之间的依赖关系尽可能的松散,模块间的改动不会对其他模块造成太大的影响;高内聚则强调一个模块内的成员之间的关联性强,模块内功能相近的代码被集中在一起。
数据耦合是指模块之间通过共享数据进行通信的一种耦合方式。
当一个模块依赖于另一个模块的数据时,它们之间就存在数据耦合。
数据耦合可能导致代码的可读性和可维护性下降。
为了降低数据耦合,可以采用封装数据的方式,通过提供接口的方式访问数据,从而减少对数据的直接访问。
标记耦合是指模块之间通过特定的标记进行通信的一种耦合方式。
这种耦合方式常见于参数传递的情况,通过传递特定的标记来决定执行不同的逻辑。
然而,过多的标记耦合会导致代码的可读性和可维护性变差。
为了降低标记耦合,可以引入多态和继承的概念,通过不同的子类来实现不同的逻辑。
控制耦合是指一个模块对另一个模块的控制依赖的一种耦合方式。
当一个模块依赖于另一个模块的控制流程时,它们之间就存在控制耦合。
控制耦合可能导致模块之间的相互联系过于紧密,一旦其中一个模块发生改动,可能需要修改另一个模块的代码。
为了降低控制耦合,可以采用事件驱动的方式,通过事件的触发和处理来进行模块之间的通信。
低耦合高内聚是一种设计原则,通过降低模块之间的依赖关系及增强模块内部的关联性,来提高软件系统的可维护性和可扩展性。
在具体实现中,可以通过减少数据耦合、标记耦合和控制耦合来达到这一目标。
通过封装数据、使用多态和继承来降低数据耦合和标记耦合;通过使用事件驱动的方式来降低控制耦合。
也要注意在代码编写过程中,遵循软件设计的其他原则,如单一职责原则、开闭原则等,以确保系统具有良好的设计质量。
个人观点与理解上,低耦合高内聚是我认为非常重要的设计原则。
在实际开发中,我始终努力遵循这一原则,以提高代码的可维护性和可扩展性。
04总体设计一、选择题1•模块的内聚性最高的是(功能内聚)2.总体设计的目的是确定整个系统的(功能及模块结构)。
3.—个模块内部各程序都在同一数据结构上操作,这个模块的内聚性称为(通信内聚)4.软件总体设计是指软件总体结构设计和数据设计,该阶段的主要任务不包括(C)0A.设计软件的模块结构B.定义接口并建立数据结构C.模块设计D.生成概要设计规格说明5.如果某种内聚要求一个模块中包含的任务必须在同一段时间内执行,则这种内聚为(时间内聚)。
6.为了提高模块的独立性,模块之间最好使用(数据耦合)。
7.结构化程序设计的一种基本方法是(逐步求精法)。
&对软件进行分解,是为了(降低模块的复杂程度)。
9.在软件工程中,描绘软件结构的图形工具不包括(C )。
A.层次图B. HIPC®C. PAD图D. H图10.两个模块彼此传递的信息中有控制信息,这种耦合称为(控制耦合)。
11•耦合是对软件不同模块之间互连程度的度量。
各种耦合按从强到弱排列如下:(内容耦合,公共环境耦合,控制耦合,数据耦合)12.结构化设计又称为(面向数据流设计)。
13.按照总体设计中的启发式规则,模块的作用域和模块的控制域之间的关系应为(模块的作用域应在模块的控制域之内)。
14.在SD方法中全面指导模块划分的最重要的原则是(模块独立性)。
15.软件总体设计是指软件总体结构设计和数据设计,该阶段的主要任务不包括(C)。
A.设计软件的模块结构B.定义接口并建立数据结构C.模块内部算法设计D.生成概要设计规格说明二、填空1•软件设计的主要任务是根据_______________________________ 导出系统的实现方案。
(软件需求规格说明书)2.一个模块拥有的直属下级模块的个数称为 ______ , 一个模块的直接上级模块的个数称为。
(模块的扇出、模块的扇入)3.将数据流图映射为软件结构时,所用映射方法涉及信息流的类型。
为每种内聚和耦合举例
⼆、耦合:
1、内容耦合:⼀个模块直接修改或操作另⼀个模块的数据,或者直接转⼊另⼀个模块。
例:c++中的友元类,类A是类B的友元类,那么A则可随意的修改类B的数据。
2、公共耦合:两个以上的模块共同引⽤⼀个全局数据项。
例:类A和类B公⽤类C的数据成员,并通过类C的数据成员进⾏沟通。
3、控制耦合:⼀个模块在界⾯上传递⼀个信号控制另⼀个模块,接收信号的模块的动作根据信号值进⾏调整。
例:模块A获取⽤户类型(普通⽤户、⾼级⽤户)传递给模块B,模块B根据不同类型的⽤户提供不同的服务。
这种情况下模块A和模块B就是控制耦合。
4、数据耦合:模块间通过参数传递基本类型的数据。
例:模块A实现两个数的加法操作,模块B实现两个加数的初始化,模块B将两个加数传给模块A,模块A进⾏相加。
这种情况下模块A和模块B就是数据耦合。
耦合和内聚的种类耦合和内聚是软件工程中两个重要的概念,它们主要用于描述模块之间的关系。
耦合指的是模块之间的依赖关系,而内聚则指的是模块内部的功能相关性。
在软件设计中,好的耦合和内聚可以提高代码的可维护性和可复用性。
一、耦合的种类1. 数据耦合数据耦合是指一个模块通过共享数据来与其他模块进行通信。
这种耦合方式会增加模块之间的依赖性,降低模块的独立性。
当一个模块的数据发生改变时,其他依赖于该数据的模块也需要进行相应的修改。
数据耦合会增加代码的复杂性,降低代码的可维护性。
2. 控制耦合控制耦合是指一个模块通过控制流程来与其他模块进行通信。
这种耦合方式通常通过调用其他模块的函数或方法来实现。
控制耦合会增加模块之间的依赖性,使得代码难以理解和修改。
当一个模块的流程发生改变时,其他依赖于该模块的模块也需要进行相应的调整。
3. 外部耦合外部耦合是指一个模块依赖于外部环境的接口或输入。
这种耦合方式会使得模块的行为受到外部环境的影响,增加了代码的不确定性。
外部耦合会导致代码的可测试性下降,使得模块难以独立进行单元测试。
二、内聚的种类1. 功能内聚功能内聚是指一个模块内部的所有功能都与同一个目标相关。
这种内聚方式将相关的功能组织在一起,使得模块的结构清晰,易于理解和维护。
功能内聚可以提高代码的可读性和可维护性,使得代码更易于重用。
2. 过程内聚过程内聚是指一个模块内部的功能按照执行顺序相关联。
这种内聚方式会使得模块的逻辑流程清晰,易于理解和调试。
过程内聚可以提高代码的可读性和可测试性,使得代码更易于调整和优化。
3. 通信内聚通信内聚是指一个模块内部的功能通过共享数据进行通信。
这种内聚方式将相关的功能组织在一起,使得模块的结构清晰,易于理解和维护。
通信内聚可以提高代码的可读性和可维护性,使得代码更易于重用。
4. 顺序内聚顺序内聚是指一个模块内部的功能按照执行顺序相关联。
这种内聚方式会使得模块的逻辑流程清晰,易于理解和调试。
使⽤C语⾔实例描述程序中的内聚和耦合问题编程时,我们讲究的是⾼内聚低耦合,在协同开发、代码移植、维护等环节都起到很重要的作⽤。
⼀、原理篇⽽低耦合,是指模块之间尽可能的使其独⽴存在,模块之间不产⽣联系不可能,但模块与模块之间的接⼝应该尽量少⽽简单。
这样,⾼内聚从整个程序中每⼀个模块的内部特征⾓度,低耦合从程序中各个模块之间的关联关系⾓度,对我们的设计提出了要求。
程序设计和软件⼯程发展过程中产⽣的很多技术、设计原则,都可以从内聚和耦合的⾓度进⾏解读。
作为C语⾔程序设计的初学者,结合当前对于函数的理解可达到的程度,我们探讨⼀下如何做到⾼内聚低耦合。
针对低耦合。
耦合程度最低的是⾮直接耦合,指两个函数之间的联系完全是通过共同的调⽤函数的控制和调⽤来实现的,耦合度最弱,函数的独⽴性最强。
但⼀组函数之间没有数据传递显然不现实,次之追求数据耦合,调⽤函数和被调⽤函数之间只传递简单的数据参数,例如采⽤值传递⽅式的函数。
有些函数数在调⽤时,利⽤形式参数传地址的⽅式,在函数体内通过指针可以修改其指向的作⽤域以外的存储单元,这构成了更强的耦合,称为特征耦合,在这⾥,使函数之间产⽣联系的是地址这样的特征标识。
另外,有两个函数可能会打开同⼀个⽂件进⾏操作,这也构成了特征耦合的⼀种形式。
更强的耦合是外部耦合,这⾥,⼀组模块都访问同⼀全局变量,⽽且不通过参数表传递该全局变量的信息,当发现程序执⾏结果异常时,很难定位到是在哪个函数中出了差错。
不少初学者觉得参数传递⿇烦,将要处理的数据尽可能地定义为全局变量,这样,函数之间的接⼝简单了,但形成的是耦合性很强的结构。
在C语⾔中,还可以通过静态局部变量,在同⼀个程序的两次调⽤之间共享数据,这也可以视为是⼀种外部耦合,只不过静态局部变量的作⽤域限于函数内部,其影响也只在函数内部,耦合程度⽐使全局变量也还是弱很多。
由此,我们可以理解前述在使⽤全局变量、静态局部变量时提出的“⽤在合适的时候,不滥⽤”的原则。