类图的六种关系

依赖关系

【依赖关系】:一种使用的关系,即一个类的实现需要另一个类协助,所以要尽量不使用双向的互相依赖

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

【示例1】动物依赖氧气和水。调用新陈代谢方法需要氧气类与水类的实例作为参数

image-20240226165120842

【示例2】某人要过河,需要借用一条船,此时人与船之间的关系就是依赖

【示例3】人使用计算机

关联关系

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

【示例】老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

聚合关系

【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体

【示例】车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

组合关系

【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

【示例】鸟和翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的

image-20240226202448874

泛化/继承关系

【继承关系】:表示类与类、接口与接口之间的继承关系,指定了子类如何特化父类的所有特征和行为。

【代码体现】:父类与子类

【箭头指向】:带三角箭头的实线,箭头指向父类  

【示例】鸟类继承抽象类动物

image-20240226202706370

在Java中使用 extends 关键字,C++ 用 “:”

实现关系

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现

【代码体现】:接口与实现类

【箭头指向】:带三角箭头的虚线,箭头指向接口

【示例】大雁实现类飞翔接口

image-20240226203004905

在Java中此类关系通过关键字implements,C++ 用 “:”