软件设计师 · 模块设计 · 设计原则

高内聚低耦合是什么意思?

高内聚低耦合不是一句漂亮口号。老师讲软件设计时,会先把观察对象分开:内聚看模块内部,耦合看模块之间。一个模块内部职责越集中,越像高内聚;模块之间知道得越少、依赖越少、接口越清楚,越像低耦合。

软件设计师专题 软考题库编辑部 持续更新

内聚看模块内部,耦合看模块之间

内聚回答的是:这个模块内部的功能是不是围绕同一个职责。比如一个订单计算模块只负责价格、优惠、税费和金额计算,职责比较集中;如果它又发短信、又写日志、又操作库存,就开始变杂了。

耦合回答的是:模块之间互相依赖得有多深。一个模块调用另一个模块的清晰接口,通常耦合较低;如果一个模块直接修改另一个模块的内部数据,或者依赖对方很多实现细节,改动就很容易扩散。

概念观察对象题干信号
内聚模块内部职责集中、功能相关
耦合模块之间依赖关系、接口、改动影响
高内聚内部围绕单一目标容易理解、测试和维护
低耦合外部依赖少修改一个模块不容易牵连一片

为什么考试总说高内聚低耦合

软件系统真正麻烦的地方,不是第一次写出来,而是后面要改。高内聚让你知道某个需求应该改哪个模块,低耦合让这个修改不至于牵连太多地方。考试把它放在模块设计里考,本质是在考可维护性和模块独立性。

有些选项会把“集中控制”“强依赖”“共享全局变量”包装得很像统一管理,但这些做法往往会提高耦合。题干如果强调可维护、可复用、易测试、减少修改扩散,优先往高内聚低耦合看。

老师式判断

模块内部功能围绕同一职责:内聚较高。

模块之间只通过清晰接口协作:耦合较低。

一个模块改动导致很多模块跟着改:耦合偏高。

不要把高内聚理解成功能越多越好

高内聚不是把相关系统都塞进一个大模块。职责集中才是关键。一个模块做很多互不相关的事,即使代码都放在一起,也不是高内聚,只是体积大。

低耦合也不是模块之间完全不联系。软件系统需要协作,关键是通过稳定接口协作,而不是互相依赖内部细节。真实设计里,接口、抽象、信息隐藏、分层,都是降低耦合的常见办法。

说法是否合理原因
一个模块只围绕订单金额计算较合理职责集中
所有业务都写进一个万能模块不合理职责混杂,内聚低
模块通过接口调用较合理依赖边界清晰
模块直接访问别人的内部数据不合理耦合过高

和单一职责、信息隐藏一起记

高内聚低耦合经常和单一职责原则、信息隐藏、接口隔离放在一起考。单一职责偏模块内部边界,信息隐藏偏不暴露内部实现,接口设计偏让模块之间用稳定契约协作。它们的共同目标,都是让系统更容易改、更容易测、更不容易一改就坏。

复习这类题时,不要只背名词。看到题干描述“模块内部职责清楚,模块之间依赖少,修改影响范围小”,就要能自然对应到高内聚低耦合。