在软件系统中,类不是孤立存在的,类与类之间存在相互关系。
以下是不同关系在UML中的符号表示:
第一种:关联关系
关联关系是一种结构化关系,用于表示一类对象与另一类对象之间有联系,eg:师傅和徒弟,花瓶和花等,在使用Java,C#和C++等编程语言实现关联时,通常将一个类地对象作为另一个类的属性。
在UML中,关联关系有如下几种类型:
(1)双向关联:默认情况下,关联是双向的。
特点:互为成员对象
eg:顾客和商品,顾客购买商品,商品总与某个客户与之相关联。
(2)单向关联
特点:关联方作为被关联方的成员变量
与双向关联的区别:双向关联可以有两个角色名,而单向关联只有一个角色名。
eg:顾客(被关联方)和地址(关联方),顾客拥有地址。
(3)自关联
特点:类的属性对象类型为该类本身
eg:一个节点的成员又是节点对象
(4)多重性关联:又称为”重数性关联关系“,表示一个类的对象与另一个类对象连接的个数。在UML中该关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。
表示方法 | 多重性说明 |
1..1 | 表示另一个类的一个对象只与一个该类对象有关系 |
0..* | 表示另一个类的一个对象与零个或多个该类对象有关系 |
1..* | 表示另一个类的一个对象与一个或多个该类对象有关系 |
0..1 | 表示另一个类的一个对象没有或只与一个该类对象有关系 |
m..n | 表示另一个类的一个对象与最少m,最多n个该类对象有关系(m<=n) |
特点:依赖不同情况
eg:一个窗口(Frame)可以拥有零个或多个按钮,但一个按钮只能属于一个窗口。
故:一个Frame类的对象可以与零个或多个Button类的的对象相关联,但一个Button类对象只能与一个Frame类的对象关联。
(5)聚合关系:表示一个整体(整体类)与部分(成员类)的关系。在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而单独存在。
特点:1. 成员类作为整体类的成员变量
2. 成员类作为整体类构造方法的参数
3. 成员类作为整体类设值方法Setter的参数
eg:电脑和鼠标。鼠标是电脑的组成部分,但鼠标可以独立存在。
(6)组合关系:也是类之间整体和部分的关系,但组合关系中,部分和整体具有统一的生存期,具有同生共死的关系。
特点:1. 成员类作为整体类的成员变量
2. 整体类对象的无参构造函数里会实例化一个成员类对象。
eg:人头和嘴巴,人头没了,那么嘴巴也就没了。
第二种:依赖关系
是一种使用关系,在需要表示一个事物使用另一个事物时使用。在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为方法的参数。
特点:1. 被依赖方作为依赖方成员方法的参数,并在该方法中利用被依赖对象调用被依赖类 的成员方法。
2. 被依赖方作为依赖方的成员变量
* 在UML中,依赖关系用带有箭头的虚线表示,由依赖方-------->指向被依赖方。
( eg: 驾驶员的driver()方法依赖车的move()方法 )
第三种:泛化关系
简单来说,就是一种继承关系。用于描述父类和子类的关系
特点:子类可以继承父类的属性和方法,子类也可以新增自己的方法
* 在UML中,泛化关系用带有空心三角形的实线表示,由子类指向父类。
(eg : 人是父类,教师和学生是子类)
第四种:接口与实现关系
显而易见,就是接口和类之间的一种实现关系。
* 在UML中,接口和实现关系用带有空心三角形的虚线表示,由实现类指向接口。