![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
UML类图关系图解
https://www.cnblogs.com/TvvT-kevin/p/9357339.html
一、类结构
在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。
其中,
- 一般类的类名用正常字体粗体表示,如上图;抽象类名用斜体字粗体,如
User
;接口则需在上方加上<<interface>>
。 - 属性和方法都需要标注可见性符号,
+
代表public
,#
代表protected
,-
代表private
。 - 另外,还可以用冒号
:
表明属性的类型和方法的返回类型,如+$name:string
、+getName():string
。当然,类型说明并非必须。
二、类关系
类与类之间的关系主要有六种:继承、实现、组合、聚合、关联和依赖,这六种关系的箭头表示如下
1.关联关系(Association)
关联关系:属于结构关系,对象与对象之间的关系
1.1单向关联
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNjIzMDQyNzM3Nw%3D%3D.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 class Man 2 { 3 public Car car; 4 } 5 class Car 6 { 7 8 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1.2双向关联
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNjIzMTMzMTk3.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
class Studen { public Grade grade; } class Grade { public Student student; }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1.3自关联
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNjIzMTQwMTc2Mw%3D%3D.jpg?w=700&webp=1)
1 class ClassA 2 { 3 public ClassA classA; 4 }
1.1.4多重关联:
1..1 : 表示另一个类的一个对象只与该类的一个对象有关系
0..*:表示另一个类的一个对象与该类的零个或多个对象有关系
0..*:表示另一个类的一个对象与该类的零个或多个对象有关系
1..*:表示另一个类的一个对象与该类的一个或多个对象有关系
0..1:表示另一个类的一个对象没有或者只有一个对象有关系
m..n:表示另一个类的一个对象与该类最少有m个最多有n个对象有关系
这里值得注意的是:有*的关联性关系就有数组
2.依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
依赖关系是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
所以我们一般用到的3种方式
(1)将一个对象作为类的参数,比如通过构造函数传参 public Car (A a){};
(2)将一个对象作为参数传入类的方法,比如 :public void A(Car car);
(3)在一个类里面调用静态对象的方法,比如 Car.Move();
下面我们使用第一种方式
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNzAwMjg1NTI0MA%3D%3D.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 class Driver 2 { 3 public Driver(Car car) 4 { 5 car.Move(); 6 } 7 } 8 9 class Car 10 { 11 12 public void Move(){ 13 } 14 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
3.聚合关系(Aggregation)
聚合关系:表示整体与部分关系,部分是整体的一部分,也可以脱离整理独立存在。也就是说car被回收,gasoline不会跟car一起被回收。
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 class Car 2 { 3 public Gasoline gasoline; 4 //构造注入 5 public Car(Gasoline gasoline) 6 { 7 this.gasoline = gasoline; 8 } 9 10 //属性注入 11 public Gasoline Gasoline 12 { 13 get { return gasoline; } 14 set { gasoline = value; } 15 } 16 } 17 18 class Gasoline 19 { 20 21 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
这里注意的是:通过构造函数注入;通过属性注入;
4.组合关系
组合关系:也是整体和部分的关系,但是组合关系中整体控制部分的生命周期,也就是说你在使用car对象的时候,在它的构造函数里面创建wheel,在回收car的时候wheel同时被回收
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNjIzMzcyMDgzNA%3D%3D.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 class Car 2 { 3 public Wheel wheel; 4 5 public Car() 6 { 7 //实例化 8 wheel = new Wheel(); 9 } 10 } 11 12 class Wheel 13 { 14 15 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
5.泛化关系(Generalization)
泛化关系:俗称继承关系,子类继承父类。
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNzAwNDUxNzYwOQ%3D%3D.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 public class Subclass : Base 2 { 3 } 4 5 public class Base 6 { 7 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
6.实现关系(Realization)
实现关系:这个是属于接口之间继承的关系
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuLm5ldC8yMDE4MDUwNzAxMDAzMDY5.jpg?w=700&webp=1)
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)
1 class Subclass : IBase 2 { 3 public void Move() 4 { 5 } 6 7 } 8 9 interface IBase 10 { 11 void Move(); 12 13 }
![[转帖]UML类图关系图解 [转帖]UML类图关系图解](https://image.shishitao.com:8440/aHR0cHM6Ly9jb21tb24uY25ibG9ncy5jb20vaW1hZ2VzL2NvcHljb2RlLmdpZg%3D%3D.gif?w=700&webp=1)