首页 > 编程知识 正文

软件高内聚低耦合设计历程,低内聚高耦合是一个好设计的特征吗

时间:2023-05-04 17:26:13 阅读:135703 作者:1953

概念关注聚集模块内部元素结合程度、关注聚集模块之间的依赖度。

凝聚性:

也称为区块内联络。 模块功能强度的量度,即模块内部各元素相互紧密结合的程度。 一个模块内各要素(词名间、段间)的联系越强,其凝聚性就越高。

高凝聚是指一个软件模块由高关联性的代码构成,只负责一项任务,也就是人们常说的单一责任原则。

耦合性:

也称为区块之间的联系。 表示软件系统结构中各模块之间相互关系密切程度的度量。 模块之间的联系越强,其耦合性就越强,模块的独立性就越差。 模块间耦合的高低取决于模块间接口的复杂度、调用的方式以及所传递的信息。

关于低耦合,粗略的理解是,它是一个完整的系统,使模块和模块之间尽可能独立存在。 也就是说,在每个模块中,尽可能地使某个特定的子功能独立。 模块和模块之间的接口尽可能少和简单。 如果某两个模块之间关系复杂,最好先考虑进一步的模块划分。 这有利于修改和组合。

内聚聚集有以下几种,它们之间的聚集度由弱到强排列如下。

一、偶然内聚:一个模块中的各个处理元件之间没有任何联系,只是碰巧聚在一起。 这类模块也称为偶然凝聚,凝聚程度最低。

二、逻辑内聚:该模块结合相关联的若干功能,通过在每次调用时传递给模块的参数来确定该模块要实现什么功能。

三、时间内聚:将需要同时执行的动作进行组合的模块称为时间凝聚模块。

http://www.Sina.com/:构件或操作可能会在调用上一个构件或操作后立即调用下一个构件或操作,即使两者之间没有传递数据简而言之,模块内的处理要素相关联,必须以特定顺序执行的情况称为进程凝聚。

例如,完成一个登录的功能,以前的功能判断网络状态,以后的功能执行登录操作,显然是按照特定的顺序执行的。

四、过程内聚意味着模块中的所有处理元件在相同的数据结构上操作或者所有处理功能通过公共数据相关联(有时称为信息凝聚)。 这意味着模块中的每个组件都使用相同的数据结构或生成相同的数据结构。

五、通信内聚两个模块中的每个处理元件都与相同的功能密切相关,这些处理必须按顺序执行。 通常,输出上一个处理要素时会输入下一个处理要素。

例如,为了完成获取某一订单信息的功能,前一功能执行获取用户信息,后一功能执行计算平均价格的操作,显然模块中的两个部分密切相关。

顺序凝聚的凝聚度比较高,但存在功能凝聚越容易维护的缺点。

六、顺序内聚:模块中所有元件的各元件都是为了完成相同的功能而存在,共同完成一个功能,模块不再是可分离的。 也就是说,模块中只含有实现某种功能所需的所有成分,这些成分密切相关,是不可缺少的。

功能聚集是最强的聚集,其优点是其功能明确。 判断一个模块是否在功能上凝聚,一般可以从模块名称中得知。 模块名称中只有一个动词和一个特定目标(单数名词)时,一般为“水费计算”、“产值计算”等功能性绑定。 功能凝聚一般出现在软件结构图的较低层。

凝聚模块的一个重要特征是,他是“助手”,对模块的调用者来说,只需要知道模块如何工作,而不需要知道模块如何工作。

结合可以分为以下几类,它们之间的结合度从高到低依次为:

七、功能内聚:如果一个模块直接访问另一个模块的内容,这两个模块称为内容绑定。

如果程序出现以下情况之一,则表明两个模块之间存在内容合并:

一个模块直接访问另一个模块的内部数据。 一个模块不通过普通入口直接调入另一个模块内部。 两个模块有部分代码重叠。 部分代码具有一定的独立功能。 一个模块有多个入口。

内容联接可能以汇编语言出现。 大多数高级语言旨在不允许合并内容。 该结合的结合性最强,模块独立性最弱。一、 内容耦合:一组模块全部访问同一个全局数据结构称为公共耦合。 公共数据环境可以是全局数据结构、共享通信区域、存储器的公共复盖区域等。 如果模块只是向公共数据环境输入数据,或者只是从公共数据环境中检索数据,则这是一个相对松散的公共耦合。如果模块向公共数据环境输入数据并从公共数据环境中检索数据,则它属于更紧密的公共耦合。

公共耦合会引起以下问题。

无法控制对各模块公共数据的访问,严重影响了软件模块的可靠性和适应性。 恶化软件的可维护性。 如果一个模块更改公共数据,则会影响相关模块。 软件的可理解性下降了。 很难知道哪个数据被哪个模块共享,很难进行排序。

一般来说,只有在模块之间共享的数据较多,不方便通过参数传递时,才会使用公共联接。二、公共耦合:一组模块访问同一个全局简单变量,不通过参数表传递该全局变量的信息称为外部联接。

三、外部耦合:在模块之间交换的不是数据信息,而是标志、开关量等控制信息,一个模块控制另一个模块的功能。

四、控制耦合

g>:调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。表就和的模块间传递的不是简单变量,而是像高级语言中的数据名、记录名和文件名等数据结果,这些名字即为标记,其实传递的是地址。
六、数据耦合:调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。
七、非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。

分析

高内聚,低耦合的系统有什么好处呢?
事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。
高内聚低耦合是否意味着内聚越高越好,耦合越低越好?
并不是内聚越高越好,耦合越低越好,真正好的设计是在高内聚和低耦合间进行平衡,也就是说高内聚和低耦合是冲突的。
最强的内聚莫过于一个类只写一个函数,这样内聚性绝对是最高的。但这会带来一个
明显的问题:类的数量急剧增多,这样就导致了其它类的耦合特别多,于是整个设计就变成了“高内聚高耦合”了。由于高耦合,整个系统变动同样非常频繁。
对于耦合来说,最弱的耦合是一个类将所有的函数都包含了,这样类完全不依赖其它类,耦合性是最低的。但这样会带来一个明显的问题:内聚性很低,于是整个设计就变成了“低耦合低内聚”了。由于低内聚,整个类的变动同样非常频繁。
真正做到高内聚、低耦合是很难的,很多时候未必一定要这样,更多的时候“最适合”的才是最好的,不过、审时度势、融会贯通、人尽其才、物尽其用,才是设计的王道。
软件设计时,如何做好高内聚低耦合?
在模块划分时,要遵循“一个模块,一个功能”的原则,尽可能使模块达到功能内聚。
耦合是影响软件复杂程度和设计质量的一个重要因素,为提高模块的独立性,应建立模块间尽可能松散的系统,在设计上我们应采用以下原则:若模块间必须存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或有控制地使用公共耦合,并限制公共耦合的范围,尽量避免内容耦合。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。