入门计算机的粗略学习-Day8
继续UML图
上次讲了三种关联关系,这次讲下后三种
自关联
在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如,一个节点类(Node)的成员又是节点 Node类型的对象,如下图所示。
这种就是自己包含着自己的类,可以理解为节点中包含着子节点。
聚合关系
聚合(Aggregation)关系表示整体与部分的关联关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如,汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此汽车和发动机是聚合关系,如图所示
组合关系
组合(Composition)关系也表示类之间整体和部分的关联关系,但是在组合关系中,整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有“同生共死”的关系。在UML中,组合关系用带实心菱形的直线表示。例如,人的头部(Head)与嘴(Mouth),嘴是头部的组成部分,如果头部不 存在,那么嘴也就不存在了,因此头部和嘴是组合关系,如图所示。
在用代码实现组合关系时,通常在整体类的构造方法中直接实例化 成员类。成员对象域整体对象有同样的生命周期,也就是要“共生死”,这也是组合和聚合的主要区别。
类的泛化关系
泛化(Generalization)关系也称为继承关系,用于描述父类与子类之间的关系。父类称为基类或超类,子类称为派生类。在UML中,泛化关系用带空心三角形的直线来表示。在代码实现时,我们使用面向对象的继承机制来实现泛化关系,例如,在Java语言中使用extends关键 字。
举例说明,Student类和Teacher类都是Person类的子类,Student类和Teacher类继承了Person类的属性和方法,Person类的属性包含姓名 (name)和年龄(age),每一个Student和Teacher也都具有这两个属性。另外,Student类增加了属性学号(studentNo),Teacher类增加了属性教师编号(teacherNo),如图所示。
在这里插入图片描述