代码大全2阅读笔记11~2
可以工作的类
ADT(抽象数据类型)
是指一些数据以及对这些数据操作的集合,这些操作既向程序的其他部分描述了这些数据是怎样的,也允许程序的其他部分修改这些数据。
抽象数据类型让你可以像在现实世界一样操作实体,而不必在低层的实现上摆弄实体。
ADT益处
- 隐藏实现细节
- 改动不会影响整个程序
- 让接口提供更多的信息
- 更容易提高性能
- 让程序正确性显而易见
- 程序具有自我说明性
- 无须在程序内到处传递数据
- 可以像在现实世界那样操作实体
使用ADT的建议
- 把常见的低层数据类型创建为ADT并使用这些ADT
- 把向文件这样的当作ADT
- 不要让ADT依赖于存储介质(对外提供接口,而我们不需要知道它底层到底用什么存储的)
关于类的建议
- 类的接口应该展现一致的抽象层次,实现且仅实现一个ADT
- 一定要知道类所实现的抽象到底是什么
- 考虑提供成对的操作,即相反的操作
- 不相关的信息移到其他类中
- 尽可能让接口可编程,而不是表达语义
- 修改时不要破坏接口的抽象
- 不要添加和接口抽象不一致的公有成员
- 同时考虑抽象性和内聚性:关于类的接口表现出的抽象通常更有助于深入理解类的设计
良好的封装
- 尽可能限制类和成员的可访问性
- 不要公开暴露私有成员
- 避免把私有的实现细节放入类的接口中
- 不要对类的使用者作出任何假设
- 不要因为一个接口仅使用公用子程序,就把它归入公开接口
- 让阅读代码比编写代码更简单
- 避免从语义上破坏封装行
- 避免过度耦合
Is-a和Has-a
Is-a关系考虑继承,Has-a考虑组合
创建类的原因
- 为现实世界的对象建模
- 为抽象的对象建模
- 降低复杂度
- 隔离复杂度
- 隐藏实现细节
- 限制变动的影响范围
- 隐藏全局数据
- 让参数传递更顺畅
- 建立中心控制点
- 让代码更易于重用
- 为程序族做计划
- 相关操作包装到一起
- 实现某种特定的重构
应该避免的类
- 避免创建万能类
- 消除无关紧要的类
- 避免用动词命名的类