3.4.5 层次结构

2013-10-07 15:33:50 · 作者: · 浏览: 63

3.4.5  层次结构

正如类A可以是B的超类一样,B也可以是C的超类。面向对象层次结构可以模拟类似的多层关系。一个具有多种动物的动物园模拟程序,可能会将每种动物作为Animal类的子类,如图3-8所示。

 
图  3-8
当编写每个子类的代码时,您可能会发现许多代码是相似的。当出现这种情况时,应该考虑给它们一个共同的超类。Lion和Panther的移动方式以及食物相同,说明可以使用一个BigCat类。还可以进一步将Animal类细分以包括WaterAnimals和Marsupials。图3-9显示了利用了这种共性的更加系统化的设计。
 
图  3-9

生物学家看到这个体系可能会失望-- 海豚和企鹅并不属于同一科。然而,这强调了一个要点-- 在代码中,需要平衡现实关系以及共享功能关系。即使现实中两种事物紧密联系,在代码中可能没有任何关系,因为它们没有共享功能。您可以简单地把动物区分为哺乳动物以及鱼类,但是这种做法会使得超类没有任何共同因素。

另一个要点是可以用其他方法创建这个层次结构。前面的设计基本上是根据动物的移动方式创建的。如果根据动物的食物或者身高创建,这个层次结构可能会有很大的不同。总之,关键在于如何使用类,需求决定对象层次结构的设计。

优秀的面向对象层次结构能够做到以下几点:

使得类之间存在有意义的功能关系。

将共同的功能放到超类,从而支持代码重用

避免子类过多地重写超类的功能,除非超类是一个抽象类。