(46)如果两个或更多个类共享公共接口(指的是消息,而不是方法),那么只有他们需要被多态地使用时,他们才应当从一个公共基类继承。 (47)对对象类型的显示的分情况分析一般是错误的。在大多数这样的情况下,设计者应当使用多态。 (48)对属性值的显示的分情况分析常常是错误的。类应当解耦合成一个继承层次结构,每个属性值都被变换成一个派生类。 (49)不要通过继承关系来为类的动态语义建模。试图用静态语义关系来为动态语义建模会导致在运行时切换类型。 (50)不要把类的对象变成派生类。对任何只有一个实例的派生类都要多加小心。 (51)如果你觉得需要在运行时刻创建新的类,那么退后一步以认清你要创建的是对象。现在,把这些对象概括成一个类。 (52)在派生类中用空方法(也就是什么也不做的方法)来覆写基类中的方法应当是非法的。 (53)不要把可选包含同对继承的需要相混淆。把可选包含建模成继承会带来泛滥成灾的类。 (54)在创建继承层次时,试着创建可复用的框架,而不是可复用的组件。 (55)如果你在设计中使用了多重继承,先假设你犯了错误。如果没犯错误,你需要设法证明。 (56)只要在面向对象设计中用到了继承,问自己两个问题:(1)派生类是否是它继承的那个东西的一个特殊类型?(2)基类是不是派生类的一部分? (57)如果你在一个面向对象设计中发现了多重继承关系,确保没有哪个基类实际上是另一个基类的派生类。 (58)在面向对象设计中如果你需要在包含关系和关联关系间作出选择,请选择包含关系。 (59)不要把全局数据或全局函数用于类的对象的薄记工作。应当使用类变量或类方法。 (60)面向对象设计者不应当让物理设计准则来破坏他们的逻辑设计。但是,在对逻辑设计作出决策的过程中我们经常用到物理设计准则。 (61)不要绕开公共接口去修改对象的状态。 |