UML2 面向对象分析与设计---读书笔记---泛化关系和多态

时间:2021-05-25 21:55:12

UML中泛化关系通过继承来实现

一个子类继承父类中的所有元素(父类中的私有成员在子类中不可访问或称为不可见),包括属性、方法和关系,注意关系很重要,子类会继承父类中的所有关系,在模式中经常能体现出来。注意C++中语法中子类是继承父类中除了构造函数和析构函数以外的所有成员,所以在派生类中要重新定义派生类的构造函数,并调用基类的构造函数为派生类中从基类继承下来的成员赋初值。


多态是建立在泛化关系(继承)的基础上,即不同的对象接受相同的消息时的反应不同,即对同一方法实现的细节不同。在C++中,要实现真正的动态多态,必须使用虚函数(基类中定义虚函数或纯虚函数,派生类对虚函数做重新定义,即同名覆盖),并且要使用指向基类的指针或引用,通过让指针指向不同类型的子类对象调用虚函数来达到真正的动态多态。通过子类对象名或指向子类的指针调用虚函数不属于动态多态(运行时的多态),是静态多态(编译时的多态)。C++中具有纯虚函数的类叫抽象类,抽象类不能定义实例,但可以定义指向抽象类的指针。

(有些书中把模版机制也成为多态,这种参数化多态不需要泛化关系支持)