OOP 第11章:Class Design
第11章 Class Design
11.1 类的设计要求
- 要易于理解,易于维护,易于重用
- 要做些什么
- 我们需要多少种类?
- 何时定义成一个类?
- 类中有什么接口和数据?
- 我们需要构造继承来促进接口和代码重用吗?
- 哪个函数应该是virtual的,以支持运行时的动态绑定?
- 考量内容
- Responsibility-driven design:职责驱动的设计
- Coupling:耦合
- Cohesion:内聚
- Refactoring:重构
11.2 代码质量
11.2.1 Coupling 耦合
Coupling耦合:指的是一个程序中,不同单元之间的联系
- 如果两个类紧密地依赖于彼此的许多细节,我们就说它们是紧密耦合tightly coupled的
- 我们的目标是:尽可能松耦合Loose coupling
- 直观表述:如果X改变了,在Y中我们需要修改多少代码
Loose coupling松耦合:
- 理解类X,我们不需要理解类Y
- 改变类X,我们不需要改变类Y
- 因此会提高可维护性maintainability
实现松耦合的方法:
- 回调函数call-back:通过接口实现调用
- 消息机制message mech
11.2.2 Cohesion 内聚
Cohesion内聚:指的是一个单元,需要负责的任务的数量和多样性
- 如果每个单元负责一项逻辑任务,我们就说它具有高内聚
- 内聚适用于类和方法
- 我们的目标是高内聚hign cohension
hign cohension高内聚的优点:
- 更容易理解类或方法的作用
- 更容易使用描述性的名字
- 更容易重用类或方法
方法的内聚性:
- 一个方法应该负责且仅负责一个定义良好的任务
类的内聚性:
- 类应该表示一个定义良好的单一实体
11.2.3 Code duplication 代码重复
- 是糟糕设计的标志
- 使得维护困难
- 可能导致维修过程中出现错误
11.2.4 Responsibility-driven design 职责驱动的设计
- 问题:我们应该在哪里添加一个新方法(哪个类)
- 每个类都应该负责操作自己的数据
- 拥有数据的类应该负责处理数据
- RDD可以实现低耦合
11.2.5 Localizing change 局部化修改
- 减少耦合和责任驱动设计的一个目标是将更改本地化
- 当需要更改时,受影响的类越少越好
11.2.6 Thinking ahead 提前思考
- 在设计类时,我们试图思考将来可能会做出哪些更改
- 我们的目标是让这些更改变得容易
11.2.7 Refactoring 重构
Refactoring重构:
- 维护类时,通常会添加代码
- 类和方法变得越来越长
- 应该不时地重构类和方法,以保持内聚和低耦合
Refactoring and testing重构和测试:
- 在重构代码时,要将重构与其他更改分开
- 首先只进行重构,不改变功能
- 在重构之前和之后进行测试,以确保没有任何问题
11.3 设计的问题
通性问题:
- 一个类需要多长
- 一个方法需要多长
设计的准则
- 如果一个方法执行多个逻辑任务,那么它就太长了
- 如果一个类表示多个逻辑实体,那么它就太复杂了
- 注意:这些是指导原则—它们仍然给设计师留下了很大的空间。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 华风夏韵!