UML类图
在UML类图中,常见的有以下几种关系: 继承(泛化)、实现、关联、依赖、聚合、组合
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
依赖
依赖属于一种泛化的概念,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A
比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖
使用场景:在类中用到了对方、作为类的成员属性(聚合)、方法的返回值、方法的参数类型、方法中使用
带箭头的虚线,指向被使用者
继承(泛化)
继承是依赖关系的特例,其指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;
在Java中此类关系通过关键字extends明确标识。在UML类图中,用一种实线三角号表示继承关系,三角号指向父类
实现
指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识
在UML类图中,用虚线三角表示实现关系,三角号表示接口
聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,举例:
class Engine{
}
class Car{
Engine engine;//汽车和引擎可分离
public Engine getEngine() {
return engine;
}
public void setEngine (Engine engine) {
this.engine = engine;
}
}
聚合通过空心菱形箭头的直线表示,UML类图表示为带空心菱形的实心线,菱形指向整体
组合
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的
//部门
class Department{
}
//公司
class Corporation{
Department department = new Department ();//不可分离的
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
UML类图如下,UML类图表示为带空心菱形的实心线,菱形指向整体
关联
关联关系是一种拥有的关系,属于依赖关系的特例。它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
双向关联举例: