当前位置:网站首页>软件设计之——“高内聚低耦合”
软件设计之——“高内聚低耦合”
2022-07-07 09:07:00 【全栈程序员站长】
耦合度 一、什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度(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的设计,主要是看类的内聚性是否高,偶合度是否低
“高内聚,低耦合”,首先要知道一个软件是由多个子程序组装而成, 而一个程序由多个模块(方法)构成! “高内聚,低耦合”主要是阐述的面向对象系统中,各个类需要职责分离的思想。 每一个类完成特定的独立的功能,这个就是高内聚。耦合就是类之间的互相调用关系,如果耦合很强,互相牵扯调用很多,那么会牵一发而动全身,不利于维护和扩展。 类之间的设置应该要低耦合,但是每个类应该要高内聚.耦合是类之间相互依赖的尺度.如果每个对象都有引用其它所有的对象,那么就有高耦合,这是不合乎要求的,因为在两个对象之间,潜在性地流动了太多信息.低耦合是合乎要求的:它意味着对象彼此之间更独立的工作.低耦合最小化了修改一个类而导致也要修改其它类的”连锁反应”. 内聚是一个类中变量与方法连接强度的尺度.高内聚是值得要的,因为它意味着类可以更好地执行一项工作.低内聚是不好的,因为它表明类中的元素之间很少相关.成分之间相互有关联的模块是合乎要求的.每个方法也应该高内聚.大多数的方法只执行一个功能.不要在方法中添加’额外’的指令,这样会导致方法执行更多的函数. 推广开来说,这个思想并不限于类与类之间的关系。模块和模块,子系统之间也都要遵守这个原则,才可以设计出延展性比较强的系统。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113822.html原文链接:https://javaforall.cn
边栏推荐
- PostgreSQL中的表复制
- Qtcreator sets multiple qmake
- The seventh training assignment
- BUUCTF---Reverse---reverse1
- Operation method of Orange Pie orangepi 4 lts development board connecting SATA hard disk through mini PCIe
- Shardingsphere sub database and table examples (logical table, real table, binding table, broadcast table, single table)
- 从色情直播到直播电商
- Bookmarking - common website navigation for programmers
- Activity生命周期
- Use load_ decathlon_ Datalist (Monai) fast loading JSON data
猜你喜欢
Use load_ decathlon_ Datalist (Monai) fast loading JSON data
90后,辞职创业,说要卷死云数据库
Activity生命周期
Antd select selector drop-down box follows the scroll bar to scroll through the solution
[untitled]
在线硬核工具
Simple and easy to modify spring frame components
How to remove addition and subtraction from inputnumber input box
Verilog 实现数码管显视驱动【附源码】
JSON format query of MySQL
随机推荐
Typescript interface inheritance
PR Lecture Notes
请问申购新股哪个证券公司开户是最好最安全的
2022.7.4DAY596
Still cannot find RPC dispatcher table failed to connect in virtual KD
[installation system] U disk installation system tutorial, using UltraISO to make U disk startup disk
Cmake learning manual
Verilog 实现数码管显视驱动【附源码】
从色情直播到直播电商
基于Retrofit框架的金山API翻译功能案例
“梦想杯”2017 年江苏省信息与未来小学生夏令营 IT 小能手 PK 之程序设计试题
[untitled]
POJ1821 Fence 题解报告
Interprocess communication (IPC)
【安装系统】U盘安装系统教程,使用UltraISO制作U盘启动盘
Laya common script commands
[machine learning 03] Lagrange multiplier method
Compile QT project script with qmake
Mpx 插件
Deconstruction and assignment of variables