低耦合:
耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统。模块。

例如:现在有方法A和方法B

我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就不能正常的工作,那么就说元素A和元素B耦合

耦合带来的问题:
当元素B变更或者不存在时,都将影响元素A的正常运作,影响系统的可维护性和易变更性。同时元素A只能运行在元素B中,这也大大的降低了A元素的可复用性。正因为耦合的种种弊端,我们才需要在软件设计上追求低耦合

低耦合如何做:
元素A不能过度依赖元素B

合理的职责划分:让系统中的对象各司其职,不仅是提高内聚的要求,同时也可以有效地降低耦合

使用接口而不是继承:我们不难发现。继承就是一种耦合,假如子类A继承了父类B,不论是直接继承或者间接继承,一但父类B不存在或者发生任何变更,都将导致子类A不得不修改或者重写。假如父类B的子类数十上百的,这就是灾难性的变更。

高内聚:
高内聚是另外一个评判软件设计质量的标准。内聚更为专业的说法叫做功能内聚,是对系统中元素职责的相关性和集中度的量度。如果元素有高度的相关职责,除了这些职责在没有其他的工作,那么该元素就有高内聚。

例如:

这就好像,如果我是一个项目经理,我的职责是监控和协调我的项目各个阶段的工作。当我的项目进入需求分析阶段,我会请求需求分析员来完成;当我的项目进入开发阶段,我会请求软件开发人员来完成;当我的项目需要测试的时候,我会请求测试人员。。。。。。如果我参与了开发,我就不是一个高内聚的元素,因为开发不是我的职责。

为什么要高内聚:
可读性

复用性

可维护性和易变更性

简单的理解高内聚低耦合:
耦合和内聚的的评判标准是强度,耦合越弱越好,内聚越强越好

耦合指模块与模块之间的关系,最弱的耦合就是通过一个主控模快来协调n哥模块进行运作。例如:。还是举一个我举过的例子:客户要求在界面上增加一个字段,你的项目要修改几个地方呢?如果你只要修改项目文档,那么你的开发构架就是最低强度的耦合,而这种设计 成熟的开发团队都已经做到了,他们使用开发工具通过项目模型驱动数据库和各层次的代码,而不是直接修改那些代码;

内聚指的是模块内部的功能,最强的就是功能不能拆分,也就是原子化。

在简单的说:
高内聚、低耦合讲的是程序单位协作的问题, 你可以这样理解,一个企业的管理, 最理想的情况就是各个部门各司其职,井然有序,互不干涉, 但是需要沟通交流的时候呢, 各个部门都可以找到接口人专门负责部门沟通以及对外沟通。 在软件里呢, 就是说各个模块要智能明确, 一个功能尽量由一个模块实现, 同样,一个模块最好只实行一个功能。这个是所谓的“内聚”; 模块与模块之间、系统与系统之间的交互,是不可避免的, 但是我们要尽量减少由于交互引起的单个模块无法独立使用或者无法移植的情况发生, 尽可能多的单独提供接口用于对外操作, 这个就是所谓的“低耦合”。 但是实际的设计开发过程中,总会发生这样那样的问题与情况, 真正做到高内聚、低耦合是很难的,很多时候未必一定要这样, 更多的时候“最适合”的才是最好的, 不过,理解思想,审时度势地使用, 融会贯通,灵活运用,才是设计的王道。

耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统。模块。

例如:现在有方法A和方法B

我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就不能正常的工作,那么就说元素A和元素B耦合

耦合带来的问题:
当元素B变更或者不存在时,都将影响元素A的正常运作,影响系统的可维护性和易变更性。同时元素A只能运行在元素B中,这也大大的降低了A元素的可复用性。正因为耦合的种种弊端,我们才需要在软件设计上追求低耦合

低耦合如何做:
元素A不能过度依赖元素B

合理的职责划分:让系统中的对象各司其职,不仅是提高内聚的要求,同时也可以有效地降低耦合

使用接口而不是继承:我们不难发现。继承就是一种耦合,假如子类A继承了父类B,不论是直接继承或者间接继承,一但父类B不存在或者发生任何变更,都将导致子类A不得不修改或者重写。假如父类B的子类数十上百的,这就是灾难性的变更。

高内聚:
高内聚是另外一个评判软件设计质量的标准。内聚更为专业的说法叫做功能内聚,是对系统中元素职责的相关性和集中度的量度。如果元素有高度的相关职责,除了这些职责在没有其他的工作,那么该元素就有高内聚。

例如:

这就好像,如果我是一个项目经理,我的职责是监控和协调我的项目各个阶段的工作。当我的项目进入需求分析阶段,我会请求需求分析员来完成;当我的项目进入开发阶段,我会请求软件开发人员来完成;当我的项目需要测试的时候,我会请求测试人员。。。。。。如果我参与了开发,我就不是一个高内聚的元素,因为开发不是我的职责。

为什么要高内聚:
可读性

复用性

可维护性和易变更性

简单的理解高内聚低耦合:
耦合和内聚的的评判标准是强度,耦合越弱越好,内聚越强越好。
耦合指模块与模块之间的关系,最弱的耦合就是通过一个主控模快来协调n哥模块进行运作。例如:。还是举一个我举过的例子:客户要求在界面上增加一个字段,你的项目要修改几个地方呢?如果你只要修改项目文档,那么你的开发构架就是最低强度的耦合,而这种设计 成熟的开发团队都已经做到了,他们使用开发工具通过项目模型驱动数据库和各层次的代码,而不是直接修改那些代码;
内聚指的是模块内部的功能,最强的就是功能不能拆分,也就是原子化。

在简单的说:
高内聚、低耦合讲的是程序单位协作的问题, 你可以这样理解,一个企业的管理, 最理想的情况就是各个部门各司其职,井然有序,互不干涉, 但是需要沟通交流的时候呢, 各个部门都可以找到接口人专门负责部门沟通以及对外沟通。 在软件里呢, 就是说各个模块要智能明确, 一个功能尽量由一个模块实现, 同样,一个模块最好只实行一个功能。这个是所谓的“内聚”; 模块与模块之间、系统与系统之间的交互,是不可避免的, 但是我们要尽量减少由于交互引起的单个模块无法独立使用或者无法移植的情况发生, 尽可能多的单独提供接口用于对外操作, 这个就是所谓的“低耦合”。 但是实际的设计开发过程中,总会发生这样那样的问题与情况, 真正做到高内聚、低耦合是很难的,很多时候未必一定要这样, 更多的时候“最适合”的才是最好的, 不过,理解思想,审时度势地使用, 融会贯通,灵活运用,才是设计的王道。

最简单理解高内聚低耦合相关推荐

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

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

  2. 深入理解高内聚,低耦合

    起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量 ...

  3. 如何理解高内聚低耦合?Java/Android 程序员必看的知识

    推荐阅读: Android MVC设计模式详解 Android 框架MVVM详解 Android MVC设计模式详解 Java/Android 常见的设计模式总结,提高代码重用性和扩展下 概念 耦合性 ...

  4. 怎样理解高内聚低耦合?

    在网上查了很多相关的资料不能更好地去帮我们理解高内聚与低耦合.以我自己的理解总结以下几点: 什么是高内聚: 在我们开发项目中的时候,需要有很多的模块,但模块与模块间肯定会存在相互调用.高内聚指的就是模 ...

  5. 软件开发及过程管理——理解高内聚-低耦合

    目录 一. 低耦合(Low Coupling) 二. 哪些是耦合 三. 高内聚-低耦合的作用 3.1 根据可能的变化设计软件 3.2 合理的职责划分 3.3 使用接口而不是继承 四. 设计模式专栏 一 ...

  6. 怎么理解高内聚低耦合

    本文转自:http://www.cnblogs.com/hegezhou_hot/archive/2010/09/18/1830306.html 一.上章回顾 在上篇中我们讲解了几类UML2.0语言新 ...

  7. 如何理解高内聚低耦合

    高内聚就是说相关度比较高的部分尽可能的集中,不要分散 例如内聚性要求强的话就像Windows32中系统提供的API,里面的函数太多了,都放在一个Dll中,那么每个函数完成一个功能.这样强大的功能,会比 ...

  8. c语言如何实现高内聚低耦合_怎么理解高内聚低耦合

    本文转自:http://www.cnblogs.com/hegezhou_hot/archive/2010/09/18/1830306.html 一.上章回顾 在上篇中我们讲解了几类UML2.0语言新 ...

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

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

最新文章

  1. 最简便的清空memcache的方法
  2. bookstrap 怎么用ajax,bootstrap里怎么用ajax请求数据到table里
  3. C# 获取当前月第一天和最后一天 计算两个日期差多少天
  4. java多线程的实现方式_Java 多线程(一)——多线程的实现方式
  5. SAP Spartacus 如何借助env-cmd 实现 B2B 和 B2C 功能启动的无缝切换
  6. [转]Android中pendingIntent的深入理解
  7. .NET6正式版将近,70%开发者或面临技术断层!
  8. 7天拿到阿里安卓岗位offer,统统给你解决!
  9. ssh连接远程linux环境
  10. python学习精华——成长篇(二)
  11. SHEL脚本中调用另外一个脚本的函数和变量
  12. 提示缺少msvcpNNN.dll怎么办
  13. snap7/Qt/ros-------ubantu14.04下杂记
  14. pytorch读取lmdb文件报错,lmdb.InvalidParameterError:解决
  15. LeetCode 1818. 绝对差值和 [java实现]
  16. TextView设置字体透明度或背景透明度
  17. 《管理者财务知识一本通》读书笔记一
  18. 【软考系统架构设计师】复盘架构设计师真题知识点第二十五章---企业信息化战略
  19. C语言每日一练——第66天:委派任务问题
  20. 基于springboot的高校疫情打卡上报系统设计与实现 文档+项目源码及数据库文件+演示视频

热门文章

  1. 知识图谱最新论文清单(附论文解读)
  2. php new object delete,DeleteObject()函数
  3. docker基本操作小结
  4. 玩转Python脚本开发-01
  5. 解决Attribute url invalid for tag page according to TLD的问题
  6. render_template()
  7. 本质安全设备标准(IEC60079-11)的理解(一)
  8. Service层在分层中的作用
  9. 微信公众号网页授权,获取用户信息以及openid -- PHP后台
  10. 小程序CMS商业正版V3.1 一键生成小程序+安装说明