首页 > 其他分享 >最简单理解高内聚低耦合

最简单理解高内聚低耦合

时间:2023-05-28 23:56:42浏览次数:48  
标签:职责 子类 元素 理解 模块 内聚 耦合

低耦合

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

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

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

耦合带来的问题

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

低耦合如何做

元素A不能过度依赖元素B

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

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

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

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

为什么要高内聚

  • 可读性
  • 复用性
  • 可维护性和易变更性

简单的理解高内聚低耦合

耦合和内聚的的评判标准是强度,耦合越弱越好,内聚越强越好

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

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

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

标签:职责,子类,元素,理解,模块,内聚,耦合
From: https://www.cnblogs.com/niehao/p/17439201.html

相关文章

  • 什么是高内聚、低耦合
    什么是高内聚、低耦合?起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独......
  • 对volatile的理解
    volatile保证了线程之间的可见性。即某个线程修改了一个共享变量,这个变量立刻对所有线程可见。volatile保证了指令重排序:用volatile修饰的共享变量在读、写时会加入一个内存屏障,保证了指令重排序。volatile可以保证可见性、有序性,但是不能保证原子性。......
  • JVM 例子,理解
     一个线程一个栈,栈为线程私有。图中只有一个main线程。某方法返回时,它对应的栈帧也会释放掉。方法区进行类加载,类的字节码中有代码code所有对象都在堆进行分配 main线程的时间片(内核分配的)用完了, 上下文切换,cpu执行t1,要把main线程的栈帧都保存下来......
  • 深入理解 Java 虚拟机 —— Java 内存模型与线程
    处理器的效率和一致性(与java内存访问可类比)计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处......
  • 用redis项目练习笔记,跟着黑马敲,并有自己的理解在里面
    点评中,优惠卷牵扯到的秒杀问题。超卖现象如果多线程同时执行会因为高并发,先查询再插入之间会有空档时间,发生超卖问题。可以使用悲观锁或者乐观锁解决,出于对性能的考虑,用到了乐观锁。乐观锁的实现,用到了数据库where语句多加一个条件。每次判断跟上次相同,(这样会造成大量的失......
  • AHBRAM项目理解
    1.采样协议的理解  灰色的部分可以当做延迟或者亚稳态理解协议中的波形图中有的长有的短,这个暂态可能是由于组合电路的延迟,也有可能是时序电路的延迟。发送激励之前要满足协议,所以要实现AHB协议,lvc_ahb_types和lvc_ahb_transaction在master_driver中实现AHB协议 AHB协......
  • 通过案列理解变量类型的应用场景
    packagecom.StaticDemo;publicclassTest1{publicstaticvoidmain(String[]args){//通过案列理解变量类型的应用场景Useru1=newUser();Useru2=newUser();Useru3=newUser();Useru4=newUser();S......
  • 深入理解浏览器的缓存机制
    一、前言缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在......
  • 并发编程深入理解JMM&并发三大特性
    1并发编程三大特性可见性原子性有序性2JMM概念 java虚拟机规范中定义了java内存模型,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现java程序在各种平台下都能达到一致的并发效果。 jmm规范规定了java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何及何......
  • 物业收费管理解决方案
    物业收费管理解决方案极致收费管理模块对物业服务公司向客户收取各种费用的活动进行管理,所有收费项目、收费标准、损耗分摊、违约金计算等都可采用用户自定义的方式,满足物业服务公司灵活多变的收费管理。应收费用的类型包括常规费用、抄表费用、临时费用;缴费方式包括现金缴款、......