UML 类图

类图基本说明

image-20211010154836215

基本的类图有如上图所示。在 UML 类图中,不同的符号代表不同的意思:

  • - private
  • + public
  • # protected
  • ~ package / default

类图对应代码:

public class Computer {

private String brand;
private String color;
private String type;
private int price;

public void start() {
}

public void stop() {
}
}

泛化关系 (Generalization)

泛化用于体现 继承 (extends) 关系,使用实线加三角表示,三角指向父类,在 UML 类图中,抽象类将类名置为斜体表示。

image-20211010162959232

类图对应代码:

public abstract class Computer {
}

public class ThinkBook15 extends Computer {
}

public class Dell7559 extends Computer {
}

实现关系 (Realization)

实现顾名思义,用于体现 实现 (implements) 关系,使用虚线加三角表示,三角指向接口。

image-20211010163502667

类图对应代码:

public interface Computer {
}

public class ThinkBook15 implements Computer {
}

public class Dell7559 implements Computer {
}

依赖关系 (Dependency)

依赖是一个类中使用到了另外一个类,可以是成员变量、方法参数、返回值等,如 Person 类中使用到了 Computer 类。

image-20211010174657011

类图对应代码:

public interface Computer {
}

public class Person {
// 成员变量依赖
private Computer computer;
// 参数中依赖
public void useComputer(Computer computer) {
}
// 返回值依赖
public Computer getComputer() {
}
}

关联关系 (Association)

  • 关联是两个类之间相互引用的关系,是依赖关系的特例,表现为成员变量。

  • 关联具有导向性:单向关联和双向关联。

  • 关联具有多重性:可以是一对一、0 对一、一对多等等。

如下图所示,单向一对一的关联。

image-20211010175627487

类图对应代码:

public class Computer {
}

public class Person {
private Computer computer;
}

主要体现在 Computer 类作为 Person 类方法参数出现,

如果两个类之间相互关联,可以使用双箭头,或者一条直线直接表示。图中的数字表示一个对象持有其他对象的数量,示例如下:

  • 数字:精确的数量
  • * / 0..*:0 到多个
  • 0..1:0 或者 1 个
  • 1..*:1 到多个

聚合关系 (Aggregation)

  • 聚合表示部分和整体的关系,是关联关系的特例。
  • 部分离开整体可以单独存在,如:计算机和显示器是整体和部分的关系,显示器离开计算机仍然可以存在。
  • 也存在导向性和多重性。

如下图所示,计算机与显示器、键盘是聚合关系,后者离开计算机还能够单独存在。

image-20211010181030143

类图对应代码:

public class Display {
}

public class Keyboard {
}

public class Computer {
private Display display;
private Keyboard keyboard;
}

组合关系 (Composition)

与聚合关系相反,部门和整体是不可分离的。例如计算机中的处理器和内存,计算机不在了,那么处理器和内存也就不能使用了,有了计算机,就应该有处理器和内存。

image-20211010182456743

类图对应代码:

public class CPU {
}

public class MEM {
}

public class Computer {
private CPU cpu = new CPU();
private MEM mem = new MEM();
}

同样的,组合关系也具备多重性,例如计算机至少有一个处理器,可以有一个或多个内存。