内聚看模块内部,耦合看模块之间
内聚回答的是:这个模块内部的功能是不是围绕同一个职责。比如一个订单计算模块只负责价格、优惠、税费和金额计算,职责比较集中;如果它又发短信、又写日志、又操作库存,就开始变杂了。
耦合回答的是:模块之间互相依赖得有多深。一个模块调用另一个模块的清晰接口,通常耦合较低;如果一个模块直接修改另一个模块的内部数据,或者依赖对方很多实现细节,改动就很容易扩散。
| 概念 | 观察对象 | 题干信号 |
|---|---|---|
| 内聚 | 模块内部 | 职责集中、功能相关 |
| 耦合 | 模块之间 | 依赖关系、接口、改动影响 |
| 高内聚 | 内部围绕单一目标 | 容易理解、测试和维护 |
| 低耦合 | 外部依赖少 | 修改一个模块不容易牵连一片 |
为什么考试总说高内聚低耦合
软件系统真正麻烦的地方,不是第一次写出来,而是后面要改。高内聚让你知道某个需求应该改哪个模块,低耦合让这个修改不至于牵连太多地方。考试把它放在模块设计里考,本质是在考可维护性和模块独立性。
有些选项会把“集中控制”“强依赖”“共享全局变量”包装得很像统一管理,但这些做法往往会提高耦合。题干如果强调可维护、可复用、易测试、减少修改扩散,优先往高内聚低耦合看。
老师式判断
模块内部功能围绕同一职责:内聚较高。
模块之间只通过清晰接口协作:耦合较低。
一个模块改动导致很多模块跟着改:耦合偏高。
不要把高内聚理解成功能越多越好
高内聚不是把相关系统都塞进一个大模块。职责集中才是关键。一个模块做很多互不相关的事,即使代码都放在一起,也不是高内聚,只是体积大。
低耦合也不是模块之间完全不联系。软件系统需要协作,关键是通过稳定接口协作,而不是互相依赖内部细节。真实设计里,接口、抽象、信息隐藏、分层,都是降低耦合的常见办法。
| 说法 | 是否合理 | 原因 |
|---|---|---|
| 一个模块只围绕订单金额计算 | 较合理 | 职责集中 |
| 所有业务都写进一个万能模块 | 不合理 | 职责混杂,内聚低 |
| 模块通过接口调用 | 较合理 | 依赖边界清晰 |
| 模块直接访问别人的内部数据 | 不合理 | 耦合过高 |
和单一职责、信息隐藏一起记
高内聚低耦合经常和单一职责原则、信息隐藏、接口隔离放在一起考。单一职责偏模块内部边界,信息隐藏偏不暴露内部实现,接口设计偏让模块之间用稳定契约协作。它们的共同目标,都是让系统更容易改、更容易测、更不容易一改就坏。
复习这类题时,不要只背名词。看到题干描述“模块内部职责清楚,模块之间依赖少,修改影响范围小”,就要能自然对应到高内聚低耦合。