background image

(31)在类的构造函数中实现语义约束时,把约束测试放在构造函数领域所

允许的尽量深的包含层次中。

 (32)约束所依赖的语义信息如果经常改变,那么最好放在一个集中式的第

3 方对象中。

 (33)约束所依赖的语义信息如果很少改变,那么最好分布在约束所涉及的

各个类中。

 (34)类必须知道它包含什么,但是不能知道谁包含它。

 (35)共享字面范围(也就是被同一个类所包含)的对象相互之间不应当有使

用关系。

 (36)继承只应被用来为特化层次结构建模。

 (37)派生类必须知道基类,基类不应该知道关于它们的派生类的任何信息。

 (38)基类中的所有数据都应当是私有的,不要使用保护数据。类的设计者

永远都不应该把类的使用者不需要的东西放在公有接口中。

 (39)在理论上,继承层次体系应当深一点,越深越好。

 (40)在实践中,继承层次体系的深度不应当超出一个普通人的短期记忆能

力。一个广为接受的深度值是

6。

 (41)所有的抽象类都应当是基类。

 (42)所有的基类都应当是抽象类。

 (43)把数据、行为和/或接口的共性尽可能地放到继承层次体系的高端。

 (44)如果两个或更多个类共享公共数据(但没有公共行为),那么应当把公

共数据放在一个类中,每个共享这个数据的类都包含这个类。

 (45)如果两个或更多个类有共同的数据和行为(就是方法),那么这些类的

每一个都应当从一个表示了这些数据和方法的公共基类继承。

 (46)如果两个或更多个类共享公共接口(指的是消息,而不是方法),那么

只有他们需要被多态地使用时,他们才应当从一个公共基类继承。

 (47)对对象类型的显示的分情况分析一般是错误的。在大多数这样的情况

下,设计者应当使用多态。