- 类的接口
- 类所具有的公共子程序所构成的集合
- 应该展现一致的抽象层次,在设计类的时候应该把类看做一种用来实现抽象数据类型 (ADT) 的机制。每一个类应该实现一个ADT,并且仅实现这个ADT,如果发现某个类实现了不止一个ADT,或者不能确定实现了何种ADT,就应该把这个类重新阻止为一个或者多个更加明确地ADT。
- 做出正确的抽象
- 提供成对的服务, 比如打开菜单 -> 关闭菜单
- 把不相关的信息转移到其他类中 两个类的数据不要混用
- 尽可能让接口可编程,而不是表达语义。 可编程的部分由接口中的数据类型和其他属性组成,编译器能检查其类型错误,而’语义’是由’本接口将被怎样使用’,无法通过编辑器来实施,应通过注释说明,容易被造成误用;
- 谨防在修改时破坏接口的抽象
- 同时考虑抽象性与内聚性,相辅相成
- 类的封装
- 防止类的抽象被打破
- 尽可能的限制类的成员和可访问性
- 不要公开暴露成员数据
- 避免把私用的实现细节放到类的接口中
- 让阅读代码比编写代码更方便
- 警惕从语义上破坏封装
- 留意过于紧密的耦合关系
- 类的设计和实现
- 主力军: 包含关系
- 万不得已时使用private来实现’有一个’的关系: 少使用,会破坏封装关系
- 警惕超过约7个数据成员的类,如果超过,考虑要不要拆成更小的类
- 继承: 一个类是另一个类的一种特化
- 目的: 定义能为两个或更多个派生类提供共有元素的基类。共有元素可以是子程序接口、内部实现、数据成员或数据类型等。继承能把这些共有的元素集中在一个基类中,避免在多处出现重复的代码和数据。
- 用public继承来实现
- 派生类必须能够通过基类的接口而被使用,且使用者无需了解两者之间的差异
- 确保只继承需要继承的部分
- 把共有的接口、数据及操作放到继承树中尽可能高的位置
- 类和对象的区别?
- 避免让继承过深
- 尽量使用多态,避免大量类型检查
- 何时使用继承,何时使用包含?
- 多个类共享数据而非行为,用包含
- 共享行为而非数据,用继承
- 既共享数据也共享行为,应该让它们从一个共同的基类继承而来,并在基类里定义共有的数据和子程序
- 主力军: 包含关系
- 创建类的原因
- 为现实世界中的对象建模
- 为抽象的对象建模
- 降低复杂度
- 隔离复杂度
- 隐藏实现细节
- 限制变动的影响范围
- 隐藏全局数据
- 让参数传递更顺畅
- 建立中心控制点
- 让代码易于重用