对于开发者而言,耦合原则表示程序中单个的模块应该尽可能的独立。

处理一个模块时,不应该依赖另一个模块的内部工作。

内聚原则是指,在一个给定的模块内部,所有的代码应该只完成一个单个的目标。

IT界有一句很著名的口号:强内聚、松耦合。

即使是最初级的程序员,在常常的被教导中,他也了解了这句口号的含义:我们的程序要模块化,模块要完成明确的一组关联的服务功能,要求它的各部分是相关的、有机组合起来是完整体(外部程序来看黑盒子),模块的内部各成分之间相关联程度要尽可能高(强内聚);而模块与模块之间又要求是可分拆的、少依赖的(松耦合)。

人们易于实现强内聚的模块,例如:一个函数实现一个独立的功能,这就是强内聚。

人们不易实现松耦合,因为,孤独的模块毫无意义,只有模块间的相互协调地工作,才能实现系统的目的。而对于模块间的相互关系的设计,没有一定的经验是难以把握。耦合的强度依赖于:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。等等。

当然,“强内聚、松耦合”也是有矛盾的,如:内聚性越强,则要求的函数越多(每个函数只作一件“事”),这样,将它们组合成“大”的功能,也就越复杂,就不可能达到松耦合。因此,应在二者之间作出平衡与折衷的选择,这也体现程序员的水平。从系统论的角度来看,系统是有层次的,即系统可以分为子系统,模块可分为子模块,“强内聚、松耦合”的“度”的把握,应结合系统的次层性来考虑,即通常应在层次性上作出折衷,如:模块内子程序(下一个层次上)应共享数据(有一定的耦合度),而减少全局变量能降低子程序性间的耦合性。

面向对象的语言进一步强化了“强内聚、松耦合”,类的封装性既强调了相关内容(数据及其操作)的内聚,又强调了类的独立性和私密性。而类的继承性以及友元等,就是在松耦合的原则下规范了类之间的关联关系。类与类之间通常通过接口的契约实现服务提供者/服务请求者模式,这就是典型的松耦合。

“强内聚、松耦合”对于程序编写分工、程序的可维护性以及测试都有重要的关系,如:从设计角度来看,在“强内聚、松耦合”的指导下进行的设计得到的程序模块,符合项目管理的WBS(工作分解结构)的要求,其相对独立的模块可以分配到具体的程序员进行开发,另外,程序编码外包也必须建立在这种原则的设计之下;从程序生命期角度来看,它有利于提高程序质量,特别是方便于程序的日后维护,即程序模块的相对独立性是可维护性的保证;再从测试角度来看,符合“强内聚、松耦合”的程序,易于对局部(模块)进行黑盒测试,也易于编写测试用的“桩”和“驱动”。

“强内聚、松耦合”也是对组织结构的要求,项目组分为几个小组(正式的或非正式的),各小组的工作应是高度相关的,各小组之间的工作应尽量是较少相关或有明确的接口,从而减少沟通成本。其实,“强内聚、松耦合”是系统中应遵守的普遍原则,我们在许多领域都可以找到它的应用。

“强内聚、松耦合”是我们不得不念的“三字经”,我们一定要念好它。

转载于:https://www.cnblogs.com/haik/archive/2010/04/02/1703435.html

高内聚、低耦合的含义是什么?相关推荐

  1. 高内聚低耦合是什么含义,怎么实现?

    一.含义 高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低. 目的:使程序模块的可重用性.移植性大大增强. 通常程序结构中 ...

  2. 知识篇: 面向对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法...

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  3. 如何实现代码的高内聚低耦合

    之前在参加宋宝华老师的培训时,宋老师经常说写代码要做到高内聚低耦合,当时并不太理解其意义,只是感觉这句话是正确的,但是不知道具体如何操作,后来代码写的看的多了,才初窥门径,下面就是自己的一点经验总结. ...

  4. 线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)

    生产者与消费者模式 一个生产者与一个消费者 题目:现在有两个线程,可以操作初始值为0的一个变量,实现一个线程对该变量加1,另一个线程对该变量减1,这两个线程的操作加一.减一交替,进行10轮,变量的初始 ...

  5. 浅谈面向对象开发原则:高内聚,低耦合

    软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低 ...

  6. 高内聚低耦合通俗理解_带你从入门到精通——「高内聚低耦合」

    如果这是第二次看到我的文章,欢迎订阅z哥的公号(跨界架构师)哦~ 本文长度为2871字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 下面的这个场景你可能会觉得很熟悉(Z哥我又要出演了): Z哥: ...

  7. 编码至高法则-高内聚低耦合

    此法则适合所有语言,咱们以JavaScript和Java两个角度分析一下这个东东. 一.javascript 有这样的一个页面,js.css代码都写在html页面中. 例如:gnj.html v1版本 ...

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

    耦合度 一.什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口 ...

  9. 为什么要高内聚低耦合?

    首先我觉的有必要声明高内聚低耦合是基于面向对象思想的概念,所以撇开面向对象这个基本思想来理解高内聚低耦合可能比较不容易.但是网络上的文章和博客大多只是单纯的以高内聚低耦合来谈高内聚低耦合.本篇博客试图 ...

  10. 最简单理解高内聚低耦合

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

最新文章

  1. 双柱状图柱子数量比较多_微生物组数据冲击图和柱状图一条代码解决
  2. c#关于JWT跨域身份验证解决方案
  3. 最小操作系统的代码解释、NASM的初步使用
  4. .NET系列 之 开源和不开源的背后
  5. Cordova内部http请求的proxy实现原理
  6. 手机出货量暴跌!00后4年没换手机:除了贵、穷还有别的原因...
  7. C# Object.Equals方法深入研究
  8. 案例-三角形(CSS3)
  9. python3小游戏源代码_python3实现弹弹球小游戏
  10. Mac配置adb笔记,彻底解决zsh: command not found: adb问题
  11. 计算机耗材管理系统,办公用品(消耗品)管理系统 单机版
  12. 国家开放大学-农村社会学-形考作业4
  13. 第一节-戴师兄数据分析学习笔记
  14. Eclipse修改JSP新建模板
  15. Android 设备接入扫码枪,Android 设备接入扫码枪
  16. linux 脚本 pause,Linux Shell脚本pause命令
  17. Linux:netstat命令结果详解
  18. DevOps—持续开发Gitlab(三)
  19. Java Stream来写算法01——自幂数(水仙花数)
  20. 如何制作自己的网页字体图标

热门文章

  1. Jasypt : 整合spring boot加密应用配置文件敏感信息
  2. 网站禁止复制怎样操作
  3. mysql 类型转换 cast 将 float 转换为 decimal
  4. 8086PC机的内存地址空间分配
  5. hibernate要点
  6. MikroTik Routeros Wlan应用之-pppoe Server
  7. 币圈“水逆”,暴跌与高危漏洞
  8. [MySQL 5.1 体验]MySQL 复制
  9. 《 线性代数及其应用 (原书第4版)》—— 2.3 可逆矩阵的特征
  10. [转]MySQL innodb buffer pool