我们如何来理解高内聚~低耦合呢——小布

160 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

蜘蛛侠.jpg

高内聚就是说相关度比较高的部分尽可能的集中,不要分散

低耦合就是说两个相关的模块尽可以能把依赖的部分降低到最小,不要让两个系统产生强依赖

举个最实际的例子:211和专科学校他们招生,211招的就是高尖子生,他们得共性就是学生里面的顶尖的一批,专科招的就是学生里面学习能力相对较弱的一批,如果把专科生放到211里面去,那不符合实际,毕竟专科生和211没有多大的关联,符合不了211。从这个招生得这种情况就可以理解为:高内聚(把能力内容相关的放在一起)。

所谓得低耦合就是每个模块之间的关联性将到可控范围的最低,举例:

有个购物车系统和商品是相关的,当加入购物车的时候,势必需要去执行商品相关的操作,这就是耦合,那所谓的低耦合,就是购物车降低对商品这块的联系。

高内聚,低耦合,他们是相关的,一旦内聚高了,耦合也必然会高,一旦耦合低了,那内聚也必然会降低。因为内聚一旦高了,功能也越来越单一化了,对外模块的需求也变得高了(例:情况一:你现在只学习,啥都不干,那你吃饭,住宿,卫生等等都是需要甲帮你操办,相对于你而言,你是专一化的学习,啥都不用考虑,但是你对甲的依赖就很高,这就是内聚高了,耦合也就高了。情况二:如果你现在不仅要学习,而且住宿,吃饭,卫生都要自己去解决,那相对于甲而言,他的出现与否和你没有多大的关联,他就真成了路人甲,但是对你而言你需要做的东西就多了,那你的能力也就不在是单一化了,就会有很多能力糅合在你身上,但是你和甲的关联就很少甚至是几乎没有,这就是所谓的:耦合低了,内聚也就低了)因此,高内聚,低耦合是相关的,我们能做到得就是找到最合适得一个 内聚和耦合的一个点。因此没有绝对的高内聚低耦合

耦合指的是模块之间的相对独立性(互相连接的紧密程度)的度量,耦合取决于各个模块之间的复杂程度、调用模块的方式以及通过接口的信息类型。

耦合的种类有:无直接耦合:指两个模块之间没有直接的关系,他们分别属于不同模块的控制和调用,他们之间不传递任何消息。   数据耦合:数据耦合:一个模块访问另一个模块时,彼此之间是通过简单变量(不是控制参数、公共数据结构和外部变量)来交换输入、输出信息的,这种耦合为数据耦合   标记耦合:指两个模块之间传递的是数据结构。   控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,称为控制耦合   外部耦合:模块间通过软件之外的环境连接,如I/O设备等时称为外部耦合。   公共耦合:指通过一个公共数据环境相互作用的那些模块之间的耦合。   内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。   其中无直接耦合耦合度最低,模块独立性最强;内容耦合的耦合度最高,模块独立性最差。

内聚是对一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块在理想状态下应该只做一件事。

image.png