泛化关系表明,一个类可以共享另外一个或多个类的结构和行为。为了实现泛化关系,我们引入了继承机制,一个子类可以继承一个或多个父类,子类会继承父类的属性、操作和关系,因此我们通常也将泛化称为继承。此外,子类还可以根据自己的需要添加额外的属性、操作或关系,还可以对父类已有的操作进行重新定义。其中,继承一个父类为单一继承,继承多个父类为多重继承。在实际的系统应用中,我们大多数采用单一继承,因为多重继承会存在一些隐患问题,并且主流的编程语言(Java、C#)都不支持多重继承。
泛化关系除了实现复用性,更深层次的目的是达到父类替代子类的可替换性,从而实现多态处理。另外,在分析出泛化关系后,可以通过描述类之间是否存在[is a 关系]或者[kind of 关系]的语义来验证。具体来说,就是“子类是父类”(猫是动物),或“子类是父类的一种”(猫是动物的一种)。
泛化关系是用一条带空心箭头的直线表示。如下图展示了学生管理系统的一种泛化关系,其中代表子类(毕业生类和新生类)都从父类(学生类)继承,它们继承了父类全部属性和操作。此外,子类也会继承父类中的关系,因此毕业生类和新生类于账户类也有聚合关系。
结语