类之间的关系

1、依赖关系(Dependency)

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

class A{
public B method(C c,D d){
E e = new E();
...
B b = new B();
...
return b;
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这个代码结构中,表示 A 类依赖了 B,C,D,E 类

在这里插入图片描述

2、关联关系(Association)

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

单项关联:

class Employee{
private int eid;//员工编号
private String name;//员工姓名
private Computer coumputer;//员工所使用的电脑
//....
}
class Computer{
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

双向关联:

class Husband{
private Wife wife;
}
class Wife{
private Husband husband;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。另外,依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的.

(3) 自关联

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象,如图4所示:

图4 自关联实例

图4对应的Java代码片段如下:

public class Node {
private Node subNode;
……
}

(4) 多重性关联

多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。

对象之间可以存在多种多重性关联关系,常见的多重性表示方式如表1所示:

表1 多重性表示方式列表

表示方式
多重性说明
1..1
表示另一个类的一个对象只与该类的一个对象有关系
0..*
表示另一个类的一个对象与该类的零个或多个对象有关系
1..*
表示另一个类的一个对象与该类的一个或多个对象有关系
0..1
表示另一个类的一个对象没有或只与该类的一个对象有关系
m..n
表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图5所示:

图5 多重性关联实例

图5对应的Java代码片段如下:

复制代码
public class Form {
private Button[] buttons; //定义一个集合对象
……
}

public class Button {
……
}
复制代码

3、聚合(Aggregation)

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

class Car{
private Engine engine;//引擎
private Tyre[] tyres;//轮胎
}
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

关联和聚集(聚合)的区别:
关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。

4、组合(Composite)

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

class Window{
private Menu menu;//菜单
private Slider slider;//滑动条
private Panel panel;//工作区
}
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

5、继承(Generalization,又称为泛化, is-a 的关系)类与类的继承关系,类与接口的实现关系。场景:父与子、动物与人、植物与树

在这里插入图片描述

类与类之间的关系说明

对象的关联 — 简单地说,是指一个对象中使用了另一个对象。

1、依赖关系(Dependency)

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

class A{
public B method(C c,D d){
E e = new E();
...
B b = new B();
...
return b;
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这个代码结构中,表示 A 类依赖了 B,C,D,E 类

在这里插入图片描述

2、关联关系(Association)

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

class Employee{
private int eid;//员工编号
private String name;//员工姓名
private Computer coumputer;//员工所使用的电脑
//....
}
class Computer{
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

class Husband{
private Wife wife;
}
class Wife{
private Husband husband;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
关联表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。另外,依赖表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的.

3、聚合(Aggregation)

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

class Car{
private Engine engine;//引擎
private Tyre[] tyres;//轮胎
}
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

关联和聚集(聚合)的区别:
关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。

4、组合(Composite)

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

class Window{
private Menu menu;//菜单
private Slider slider;//滑动条
private Panel panel;//工作区
}
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树
在这里插入图片描述

参考:

https://www.cnblogs.com/dyc940210/p/7382520.html

http://www.uml.org.cn/oobject/201211231.asp

https://blog.csdn.net/weixin_43141815/article/details/91791469

原文地址:https://www.cnblogs.com/LiaoMengyu/p/12507611.html