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

什么是高耦合低内聚,低耦合高内聚
耦合:不就是耦合系数高与低吗,就是关联性强不强
内聚:内聚是指是不是具有很强的功能性,一个模块或方法是不是只干一件事,越强的内聚或者高内聚模块应当恰好只做一件事。
用面向对象举例:
一个对象中有很多方法,每个方法都有依耐性那就是耦合性很高即高耦合,反之则是低耦合。

在软件设计工程学中是这样定义,可能更为精确:
高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
另一理解

官方解释:

高内聚:“相关度”比较高的尽可能集中不分散

低耦合:两个相关的模块尽可能把依赖度降低,不要让两个系统产生“强依赖”

他俩的关系:正常来讲高内聚会导致高耦合,低内聚会导致低耦合。

1.一个类里写很多方法为啥不是高内聚?

首先要懂,高内聚指的是“”相关度“”比较高的尽可能集中,是相关度高的。有的人看见一个类里面写了很多很多方法就觉得是高内聚了,错了兄弟,人家的说的是相关度,你一个类里写了吃饭的方法+如厕的方法+学习的方法+运动的方法+……..吃饭运动如厕学习有啥相关的?吃饭能≈如厕?运动能≈学习?还是如厕能≈运动?所以这几个方法之间的“相关度”很低,相关度低也就是内聚低。

2.为啥高耦合一般高内聚,低耦合一般低内聚?

一个类里只写一个学习方法,这是高内聚(学习相关度100%=学习)低耦合(没有其他的类)。但是!但是!你只学习不吃饭?不上厕所?不睡觉?

情况一:学习完,你需要吃饭上厕所睡觉了,所以借助其他方法,睡觉方法,吃饭方法,睡觉方法。这就导致了一个类中N多方法,这就是低内聚(虽然有很多方法但方法间没啥关系)低耦合(就一个类所以跟其他类没关联,所以低耦合)这就出现了2低

情况二:我只在本类学习,吃饭上厕所找其他类干。那就是高内聚(因为一个类一个方法相关度的浓度100%所以高内聚)高耦合(我吃饭必须找有吃饭函数的类,没那个类我不能吃饭活不了,我特别特别依赖别的类,依赖强度100%)这就出现了2低

3.那为咋样才能最好呢?

高内聚低耦合是最好的。但是需要很长的经验和思考,新手一上来很难做到高内聚低耦合的,要么2高,要么2低。

 

Visits: 15

内聚方法模块相关度耦合