转载请注意出处:

这几天又回顾了下java基础,突然看见松耦合这个字眼,很是疑惑,于是通过上网阅读多篇博客并结合翻阅的资料写下了这篇博客。希望大家可以从中有所收获。

一、耦合,内聚的了解(看懂就行,不用强背)

那么什么是耦合,什么是内聚呢?我来做个解释。

内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内元素彼此之间结合的紧密程度的度量。若一个程序之间各元素之间(程序段之间)联系紧密,则内聚性就高(高内聚)。

耦合性:又称块间联系。指软件系统各模块之间相互紧密联系程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性就越差。相反其耦合性就越弱(低耦合)。

那么对于耦合,内聚的解释网上都有(我也是拷贝了百度,看懂就好,不需要强背)

内聚:内聚有如下的种类,它们之间的内聚度由弱到强排列如下:

一、偶然内聚:一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起。这种模块也称为巧合内聚,内聚程度最低。

二、逻辑内聚:这种模块把几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 。

三、时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。

四、过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。简单的说就是如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。

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

五、通信内聚:指模块内所有处理元素都在同一个数据结构上操作或所有处理功能都通过公用数据而发生关联(有时称之为信息内聚)。即指模块内各个组成部分都使用相同的数据结构或产生相同的数据结构。

六、顺序内聚:一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出时后一个处理元素的输入。

例如某要完成获取订单信息的功能,前一个功能获取用户信息,后一个执行计算均价操作,显然该模块内两部分紧密关联。 
顺序内聚的内聚度比较高,但缺点是不如功能内聚易于维护。

七、功能内聚:模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分。即模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。

功能内聚是最强的内聚,其优点是它的功能明确。判断一个模块是否功能内聚,一般从模块名称就能看出。如果模块名称只有一个动词和一个特定的目标(单数名词),一般来说就是功能内聚,如:“计算水费”、“计算产值”等模块。功能内聚一般出现在软件结构图的较低层次上。 
功能内聚模块的一个重要特点是:他是一个“暗盒”,对于该模块的调用者来说,只需要知道这个模块能做什么,而不需要知道这个模块是如何做的。

耦合:耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:

一、 内容耦合:一个模块直接访问另一模块的内容,则称这两个模块为内容耦合。 
若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合: 
1. 一个模块直接访问另一个模块的内部数据。 
2. 一个模块不通过正常入口而直接转入到另一个模块的内部。 
3. 两个模块有一部分代码重叠(该部分代码具有一定的独立功能)。 
4. 一个模块有多个入口。 
内容耦合可能在汇编语言中出现。大多数高级语言都已设计成不允许出现内容耦合。这种耦合的耦合性最强,模块独立性最弱。

二、公共耦合:一组模块都访问同一个全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合;如果模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧密的公共耦合。 
公共耦合会引起以下问题: 
1. 无法控制各个模块对公共数据的存取,严重影响了软件模块的可靠性和适应性。 
2. 使软件的可维护性变差。若一个模块修改了公共数据,则会影响相关模块。 
3. 降低了软件的可理解性。不容易清楚知道哪些数据被哪些模块所共享,排错困难。 
一般地,仅当模块间共享的数据很多且通过参数传递很不方便时,才使用公共耦合。

三、外部耦合:一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。

四、控制耦合:模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能。

五、标记耦合:调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。表就和的模块间传递的不是简单变量,而是像高级语言中的数据名、记录名和文件名等数据结果,这些名字即为标记,其实传递的是地址。

六、数据耦合:调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递。

七、非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。

推荐博客:http://blog.csdn.net/walid1992/article/details/73278304

二、低耦合(也叫提高松耦合),高内聚

言归正传,那咱们就直入话题吧。

低耦合,高内聚的意思上面都有讲到。现在我们来看看为什么要设计这样的软件设计标准。

为什么要低耦合,高内聚

软件设计当中经常使用耦合度和内聚度作为衡量模块独立的标准。

道理很简单,耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了,这对用户和开发商影响都是很恶劣的,各种风险也就不言而喻了。

为了预防这些问题的发生,其中一个重要手段就是降低代码的耦合度。但也不可能有绝对的零耦合,比如基于J2EE编程那就必须和JDK耦合,而且高耦合也不是一无是处,如果在设计前期预料到某功能后期基本不用修改,那么即使高耦合了也关系不大。

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

低耦合的方法

1、一般情况下,下层的包内代码依赖上层的包内代码(例如:com.example.text.demo下的代码依赖com.example.text的代码),好处是把下层代码移除,而上层代码不受影响。但是部分上层代码也是可以依赖下层代码,具体详情。

2、接口是提高系统之间松耦合的有力手段。例如电视机像遥控器公开了红外线接收器接口,使得电视机和遥控器之间相互独立,当电视机的内部实现发生变化时,比如由电子显示器改为液晶显示器,只要它的红外线接收器接口不变,就不会影响遥控器的实现。

3、封装有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响到其他的系统。

4、抽象机制和动态绑定能公共提高系统之间的松耦合性。

5、模块功能尽量单一。功能单一的模块供其他模块调用的机会就少。

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

7、少使用全局变量

8、类属性和方法的声明少用public,多用private关键字。

9、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合性

10、尽量不用“硬代码”的方式写程序,同时也避免直接用SQL语句操作数据库。

11、最后避免直接操作或调用其他模板或类(内容耦合);如果模块之间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合。

推荐博客:http://blog.csdn.net/csh624366188/article/details/7183726

推荐书籍:《Java面向对象编程》-孙卫琴编著

菜鸟一只,如有不对之处请指出。您的鼓励是我写作的最大动力!




低耦合,高内聚的详解相关推荐

  1. 详解高耦合低内聚,低耦合高内聚

    什么是高耦合低内聚,低耦合高内聚 耦合:不就是耦合系数高与低吗,就是关联性强不强 内聚:内聚是指是不是具有很强的功能性,一个模块或方法是不是只干一件事,越强的内聚或者高内聚模块应当恰好只做一件事. 用 ...

  2. c语言如何实现高内聚低耦合_如何实现高内聚低耦合?高内聚低耦合的现实例子...

    下面要给大家分享的是一个高内聚低耦合例子,那么编程应该如何实现高内聚低耦合呢?一起来看看下面的实例吧! 案例: 在一个学校里面,有着老师若干名,依次编号. 有学生若干名,依次编号. 现在的话,是要求要 ...

  3. 很强大!低耦合高内聚的MCU实用软件框架

    大家好,我是晓宇,不知道大家有没有听过软件设计中的低耦合,高内聚的两个原则. 具体是什么意思呢? 在一个项目中:每个模块之间相联系越紧密,则耦合性越高:这样你改动其中一个模块,其他模块也需要一起改动, ...

  4. Java中的低耦合高内聚法则

    java框架模式_低耦合高内聚法则 定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越来越密切,耦合度越来越大,当一个类发生改变时,对另外一个类的影响也越大. 解决方案:尽量降 ...

  5. 程序开发之——低耦合高内聚

    内聚概念 内聚性,又称块内联系.指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量. 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标.模块中组成元素结合的越紧密 ...

  6. 低耦合高内聚什么意思?

    低耦合高内聚 很多小伙伴不理解低耦合高内聚什么意思?我给大家通俗的讲一下 低耦合 解决冗余(rongyu)代码,提高代码重复使用率 冗余:很多相似的代码

  7. 低耦合,高内聚的详解(绝对全面)

    转载请注意出处: 这几天又回顾了下java基础,突然看见松耦合这个字眼,很是疑惑,于是通过上网阅读多篇博客并结合翻阅的资料写下了这篇博客.希望大家可以从中有所收获. 一.耦合,内聚的了解(看懂就行,不 ...

  8. 面向对象三大特性五大原则 + 低耦合高内聚

    面向对象的三大特性是"封装."多态"."继承",五大原则是"单一职责原则"."开放封闭原则"."里氏 ...

  9. 简单理解高内聚低耦合-高内聚低耦合通俗理解是什么?

    低耦合: 耦合就是元素与元素之间的连接,感知和依赖量度.这里说的元素即是功能,对象,系统,子系统.模块. 例如:现在有方法A和方法B 我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就 ...

最新文章

  1. ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
  2. 分享内容apd android,Appium - DesiredCapabilities对象的参数配置及含义
  3. 8.3控制质量(后续不断完善)
  4. Maven(2)--生命周期以及插件目标
  5. echart 动画 饼图_echarts构建关系图,节点可收缩和展开,可添加点击事件
  6. 石头剪刀布python编程_《python核心编程第二版》练习题——游戏:石头剪刀布
  7. 在布局空间标注的尺寸量不对_卫生间最佳布局尺寸,合理布局做到1毫米都不浪费!...
  8. CSS 盒模型之外边距 margin属性
  9. 剑指Offer之第一个只出现一次的字符
  10. 魔鬼一样的二分查找模板
  11. 用python解方程和微积分
  12. 计算机CPU四大体系架构
  13. ESP8266-Arduino编程实例-HDC1080温度湿度传感器驱动
  14. kafka connector使用(Docker一键启动版)
  15. PHP字符串运算结果,php字符运算
  16. mysql 按记录编号_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
  17. 【pycharm】WiFi密码破解【简单易学】
  18. 软件需求分析报告 -机票预订系统
  19. 大数据分析软件包含哪些技术?
  20. 阿里云云栖大会2020----云游戏平台发布(记录)

热门文章

  1. 小白电脑家庭版升级专业版
  2. 抱歉,今年我劝各位真的别轻易离职!
  3. 儿童护眼灯哪个品牌比较好?2022年国家认可护眼灯品牌
  4. python中的goto函数_如何在 Python 中实现 goto 语句
  5. JS-斜杠和反斜杠的转换
  6. 随机变量及其分布函数
  7. myeclipse jndi oracle,MyEclipse+WebSphere 通过 JNDI 连接 Sybase 简介
  8. 亚马逊最新财报盈利下滑,我们仍然看好
  9. webpack学习(输出output)
  10. 【Android】 字体setTypeface动态实现加粗字体