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