博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高内聚 低耦合
阅读量:2426 次
发布时间:2019-05-10

本文共 1754 字,大约阅读时间需要 5 分钟。

一 什么是低耦合

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

耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计

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

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

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

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

(4)模块之间接口的复杂程度。

下面这些情况会造成类A、B之间的耦合:

a.       A是B的属性

b.       A调用B的实例的方法

c.       A的方法中引用了B,例如B是A方法的返回值或参数。

d.       A是B的子类,或者A实现了B

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

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

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

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

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

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

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

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

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

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

二  为什么要低耦合

耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方

三  如何实现低耦合

1、少使用类的继承,多用接口隐藏实现的细节。因为继承本身就是耦合,一个类的实现必须依赖于另外一个类,如果基类不存在了就不能工作了。 java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。 

2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低耦合一般同时出现,为了限制篇幅,我们将在以后的版期中讨论)。 

3、遵循一个定义只在一个地方出现。 

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

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

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

四 什么是高内聚

故名思议,表示内部间聚集、关联的长度,那么高内聚就是指要高度的聚集和关联。

高内聚:类与类之间的关系而定,高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。

五 高内聚的好处

由于高内聚具备鲁棒性,可靠性,可重用性,可读性等优点,模块设计推荐采用高内聚。

六  如何实现高内聚

每一个类完成特定的独立的功能,这个就是高内聚。

转载地址:http://irbmb.baihongyu.com/

你可能感兴趣的文章
边缘计算精华问答 | 边缘计算有哪些应用场景?
查看>>
要闻君说:Synergy Research Group首发云基础设施数据,腾讯云v5一把;京东物流发力5G;厉害!阿里挖走贾扬清...
查看>>
要闻君说:重磅!阿里巴巴发布了机器学习平台PAI 3.0版本;厉害!三星推出了业界首款HBM2E内存;Google也做云游戏平台...
查看>>
没有新芯片,没有大核弹,黄教主这次给大家带来了个PRADA
查看>>
VMware vSphere 6.7主机与虚拟机高级管理
查看>>
数据中台精华问答 | 数据中台和传统数仓的区别是什么?
查看>>
这是一则计算机视觉顶级会议CVPR与腾讯的爆闻,啥?
查看>>
如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
查看>>
三星计划替换所有日产半导体材料;美企过度响应“禁令”,华为被曝祭出数亿索赔;苹果iPhone 11发布日期刚刚泄露...
查看>>
帮助你驾驭 Kubernetes 的 4 个工具 | Linux 中国
查看>>
Storm精华问答 | storm与Hadoop区别?
查看>>
正式发布!鸿蒙,来了!
查看>>
项目是如何死掉的?太过真实!
查看>>
再见!微服务
查看>>
这!不是一点儿super,青云混合云!
查看>>
华为开发者大会上,鸿蒙问世、方舟编译器开源、还有 EMUI 10;壕置100万美元,苹果推出漏洞攻击报告赏金计划……...
查看>>
Spring精华问答 | 为什么要学习Spring?
查看>>
常见的Hadoop十大应用误解
查看>>
“Java跌落向下,Python奋斗向前”,程序员:看哭了...
查看>>
蜕变!网易轻舟微服务这波操作,始于异构融合、源于中台!
查看>>