()继承只应被用来为特化层次结构建模
()派生类必须知道基类基类不应该知道关于它们的派生类的任何信息
()基类中的所有数据都应当是私有的不要使用保护数据
类的设计者永远都不应该把类的使用者不需要的东西放在公有接口中
()在理论上继承层次体系应当深一点越深越好
()在实践中继承层次体系的深度不应当超出一个普通人的短期记忆能力一个广为接受的深度值是
()所有的抽象类都应当是基类
()所有的基类都应当是抽象类
()把数据行为和/或接口的共性尽可能地放到继承层次体系的高端
()如果两个或更多个类共享公共数据(但没有公共行为)那么应当把公共数据放在一个类中每个共享这个数据的类都包含这个类
()如果两个或更多个类有共同的数据和行为(就是方法)那么这些类的每一个都应当从一个表示了这些数据和方法的公共基类继承
()如果两个或更多个类共享公共接口(指的是消息而不是方法)那么只有他们需要被多态地使用时他们才应当从一个公共基类继承
()对对象类型的显示的分情况分析一般是错误的在大多数这样的情况下设计者应当使用多态
()对属性值的显示的分情况分析常常是错误的类应当解耦合成一个继承层次结构每个属性值都被变换成一个派生类
()不要通过继承关系来为类的动态语义建模试图用静态语义关系来为动态语义建模会导致在运行时切换类型
()不要把类的对象变成派生类对任何只有一个实例的派生类都要多加小心
()如果你觉得需要在运行时刻创建新的类那么退后一步以认清你要创建的是对象现在把这些对象概括成一个类
()在派生类中用空方法(也就是什么也不做的方法)来覆写基类中的方法应当是非法的
()不要把可选包含同对继承的需要相混淆把可选包含建模成继承会带来泛滥成灾的类
()在创建继承层次时试着创建可复用的框架而不是可复用的组件
()如果你在设计中使用了多重继承先假设你犯了错误如果没犯错误你需要设法证明
()只要在面向对象设计中用到了继承问自己两个问题()派生类是否是它继承的那个东西的一个特殊类型?()基类是不是派生类的一部分?
()如果你在一个面向对象设计中发现了多重继承关系确保没有哪个基类实际上是另一个基类的派生类
()在面向对象设计中如果你需要在包含关系和关联关系间作出选择请选择包含关系
()不要把全局数据或全局函数用于类的对象的薄记工作应当使用类变量或类方法
()面向对象设计者不应当让物理设计准则来破坏他们的逻辑设计但是在对逻辑设计作出决策的过程中我们经常用到物理设计准则
()不要绕开公共接口去修改对象的状态
[] []