`

软件设计之——“高内聚低耦合”

 
阅读更多

耦合度
一、什么是耦合度
软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度
(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。 内聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。
耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计

及编码质量评价的一个标准。耦合的强度依赖于以下几个因素:

(1)一个模块对另一个模块的调用;

(2)一个模块向另一个模块传递的数据量;

(3)一个模块施加到另一个模块的控制的多少;

(4)模块之间接口的复杂程度。
耦合按从强到弱的顺序可分为以下几种类型:
a)非直接耦合:两模块间没有直接关系,之间的联系完全是通过主模块的控制和调用来实现的   

b)数据耦合:一个模块访问另一模块,彼此间通过简单数据参数来交换输入、输出信息。这里的简单数据参数不同于控制参数、公共数据结构或外部变量。   

c)标记耦合:如一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,不是简单变量。   

d)控制耦合:一个模块通过传递开关、标志、名字等控制信息,明显的控制选择另一模块的功能   

e)外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息   

f)公共耦合:一组模块都访问同一个公共数

据环境。该公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。   

g)内容耦合:一个模块直接修改另一个模块的数据,或直接转入另一个模块   

内聚度是指内部各元素之间联系的紧密程度,模块的内聚种类通常可分为7种,按其内聚度从低

到高的次序依此为:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。

二、为什么要低耦合

了解什么是耦合及耦合的分类后,我想大家对为什么要降低耦合度已经有一定的认识,并且多数开发人员也大概尝尽了高耦合带来的苦

头。道理很简单,耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果

可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会

导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了,这对用户

和开发商影响都是很恶劣的,各种风险也就不言而喻了。
为了预防这些问题的发生,其中一个重要手段就是降低代码的耦合度。但也不可能有绝对的零耦合,比如基于J2EE编程那就必须和JDK

耦合,而且高耦合也不是一无是处,如果在设计前期预料到某功能后期基本不用修改,那么即使高耦合了也关系不大。但是,在还没有能力

设计出基本不用修改的代码前,还得要求以低耦合为标准。那么怎样才能最大限度地降低耦合度呢?下面介绍降低耦合度的几种方法。

三、降低耦合度的方法
1、少使用类的继承,多用接口隐藏实现的细节。 java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。
2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低

耦合一般同时出现,为了限制篇幅,我们将在以后的版期中讨论)。
3、遵循一个定义只在一个地方出现。
4、少使用全局变量。
5、类属性和方法的声明少用public,多用private关键字,
6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。
7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库。
8、最后当然就是避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,

限制公共耦合的范围,避免使用内容耦合。

内聚: 故名思议,表示内部间聚集、关联的长度,那么高内聚就是指要高度的聚集和关联。
高内聚:类与类之间的关系而定,高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。由于高内聚具备鲁棒性,可靠性,可重用性,可读性等优点,模块设计推荐采用高内聚。

这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低

“高内聚,低耦合”,首先要知道一个软件是由多个子程序组装而成,
而一个程序由多个模块(方法)构成!
“高内聚,低耦合”主要是阐述的面向对象系统中,各个类需要职责分离的思想。
每一个类完成特定的独立的功能,这个就是高内聚。耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展。
类之间的设置应该要低耦合,但是每个类应该要高内聚.耦合是类之间相互依赖的尺度.如果每个对象都有引用其它所有的对象,那么就有高耦合,这是不合乎要求的,因为在两个对象之间,潜在性地流动了太多信息.低耦合是合乎要求的:它意味着对象彼此之间更独立的工作.低耦合最小化了修改一个类而导致也要修改其它类的"连锁反应". 内聚是一个类中变量与方法连接强度的尺度.高内聚是值得要的,因为它意味着类可以更好地执行一项工作.低内聚是不好的,因为它表明类中的元素之间很少相关.成分之间相互有关联的模块是合乎要求的.每个方法也应该高内聚.大多数的方法只执行一个功能.不要在方法中添加'额外'的指令,这样会导致方法执行更多的函数.


推广开来说,这个思想并不限于类与类之间的关系。模块和模块,子系统之间也都要遵守这个原则,才可以设计出延展性比较强的系统。

分享到:
评论

相关推荐

    论文:高内聚低耦合软件架构的构建_程春蕊

    《高内聚低耦合软件架构的构建》这篇论文深入探讨了软件工程中的核心设计理念——高内聚与低耦合,这是构建高质量、可维护、易于扩展的软件系统的重要原则。高内聚指的是模块内部元素之间的紧密关联,而低耦合则意味...

    (优化2)android高内聚低耦合任务事件总线框架

    在Android开发中,高内聚低耦合是一个重要的设计原则,它能提升代码的质量和可维护性。"(优化2)android高内聚低耦合任务事件总线框架"这个标题暗示了我们要讨论的是如何利用事件总线来优化任务处理,以实现更好的...

    架构实战——软件架构设计的过程

    - **高内聚**:确保每个模块内部的功能紧密相关,这样可以提高代码的复用性和易于理解。 - **灵活性**:设计时要考虑未来可能出现的变化,使系统能够在不进行大规模重构的情况下适应新的需求。 - **性能优化**:考虑...

    软件技术基础课件7——软件工程概念2.ppt

    总结来说,本课件深入讲解了软件工程中从概要设计到详细设计的关键概念,包括模块化、内聚性、耦合性、数据结构设计以及流程图等,为软件开发提供了坚实的基础。这份文档对于学习软件工程的学生和从业人员来说,是...

    软件设计大作业——画板(千万别错过!)

    项目的源代码结构应该遵循良好的软件工程原则,如模块化、低耦合和高内聚,以确保代码的可读性和可维护性。每个类和方法应有明确的职责,接口和抽象类的使用有助于定义和实现组件之间的交互。 总之,“软件设计大...

    软件工程考卷样题及答案

    2004——2005学年第一学期期终试题 一、 选择题(10%) ...A:  ①低内聚低耦合 ②低内聚高耦合 ③高内聚低耦合 ④高内聚高耦合 B、C: ①数据  ②非直接 ③控制 ④内容 D、E: ①偶然 ②逻辑 ③功能

    软件工程基础 ——很不错的学习资料

    4. **模块独立性**:衡量模块之间的独立程度,通过耦合性和内聚性评估,追求高内聚低耦合的设计原则。 综上所述,软件工程不仅是一套开发软件的理论框架,更是一种实践指南,它引导着软件开发团队在每一个环节都能...

    17C语言程序设计课程设计——汇智成绩集成系统.rar

    5. 结构化程序设计:如何将问题分解为模块化的函数,遵循一定的设计原则如单一职责、高内聚低耦合。 6. 错误处理:通过异常处理或条件判断来处理可能出现的运行时错误。 7. 测试与调试:确保代码功能正确无误,可能...

    软件工程课程设计

    设计应遵循高内聚低耦合原则,确保系统可扩展性和易维护性。 #### 六、详细设计 详细设计阶段细化每个模块的实现细节,包括算法设计、数据库表结构设计、界面布局等。这一阶段产出的文档将指导后续的编码工作。 #...

    软件工程——实践者的研究方法

    此外,书中还提到了软件设计的原则,如高内聚、低耦合,以及如何通过设计评审来改进设计质量。 编码和测试是软件开发过程中的重要环节。《软件工程——实践者的研究方法》介绍了各种编程规范和最佳实践,以保证代码...

    软件工程课本讲解软件设计理论.pptx

    本文将深入探讨软件设计的核心概念,特别是模块化、模块间的调用关系、信息传递、模块独立性以及耦合和内聚等关键理论。 首先,模块化是软件设计的基础。一个软件系统被划分为多个独立的模块,每个模块都有自己的...

    设计模式——策略模式

    - 高内聚低耦合:策略类封装了各自的算法,使得算法的变化不会影响到客户端代码。 - 易于维护和理解:将每种算法封装成单独的类,使得代码更易于理解和维护。 通过这种方式,策略模式提供了一种灵活的方式来处理...

    软件工程复习资料——考试必备~~~

    4. **软件设计原则**:如模块化、抽象、信息隐藏、耦合性和内聚性等,这些都是设计高质量软件的基础。 5. **结构化设计和面向对象设计**:了解两种主要的设计方法,包括类、对象、继承、多态和封装等面向对象特性。...

    二级公共基础速学教程

    高内聚低耦合被视为优秀设计的标志,有助于提升软件质量和维护效率。 以上知识点全面覆盖了计算机二级公共基础中软件工程的基础理论,从软件概念、生命周期到设计原则,构建了对软件开发全流程的深刻理解,为后续...

    系统详细设计说明书——

    模块划分的原则是高内聚、低耦合,以确保系统易于理解和维护。 2. **数据结构设计**:定义系统中涉及的数据类型、数据库表结构、字段及关系。这部分详细描述了数据的存储和组织方式,包括数据实体、数据属性、数据...

    数据挖掘在软件维护中的应用——软件缺陷管理

    软件度量是评估软件质量、预测项目风险的重要手段,包括代码行数、复杂度、耦合性、内聚性等指标。通过对这些度量数据的挖掘,可以发现影响软件稳定性和可维护性的关键因素,进一步指导软件设计和改进。同时,度量...

    Effective Arch Design——架构设计的10条经验(温昱)

    3. **高内聚**:保持模块内部的内聚性,确保模块内的元素紧密相关,功能集中,避免"上帝类"或"巨石"模块的出现,提高代码的可读性和可维护性。 4. **分层架构**:常见的分层架构包括表示层、业务逻辑层、数据访问层...

    第4讲 软件工程-软件设计

    - 低耦合高内聚:模块间耦合度低,内部元素间内聚度高,增强系统稳定性。 - 可重用性:设计可复用的模块,减少重复劳动,提升效率。 - 可扩展性:考虑未来需求变化,设计应易于扩展和修改。 3. **概要设计**(也...

    软件工程思想 系统设计

    5.2.2 内聚与耦合 5.2.3 封闭——开放性 5.3 数据结构与算法设计 5.4 用户界面设计 5.4.1 界面设计中美的需求与导向作用 5.4.2 界面美的内涵 一、界面的合适性 二、界面的风格 三、界面的广义美 5.5 系统设计示例...

    软件工程第5章传统软件设计.pptx

    设计阶段的关键原则之一是提高模块的独立性,即追求松耦合和高内聚。松耦合意味着模块之间的依赖性较低,而高内聚则意味着模块内部的功能紧密相关。通过增加内聚和减少耦合,可以提高模块的可复用性和系统的稳定性。...

Global site tag (gtag.js) - Google Analytics