UML类图几种关系的总结
各种关系的强弱顺序:
泛化= 实现> 组合> 聚合> 关联> 依赖
1.依赖关系
【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。
【代码表现】:局部变量、方法的参数或者对静态方法的调用
依赖关系是上述6种关系中耦合最小的一种关系。使用虚线加箭头表示,如下图所示:
代码:
[java] view plain copy
- public class Person {
- public void Call(){
- Phone phone = new Phone();
- }
- }
[java] view plain copy
- public class Phone {
- }
解释:Person 和 Phone之间是没有关系的,但是由于偶尔的需要,Person需要使用Phone,在Person类中的具体方法中需要实例化Phone,这时Person就依赖于Phone.持有Phone类的是Person类的一个方法,而不是Person类,这点是最重要的。
2.关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。在Java中,关联使用实例变量来实现。在关联关系中可以使用附加的基数来说明类之间对应的个数。
基数 | 含义 |
0..1 | 零个或者一个实例 |
0..n或者n | 没有限制,任意 |
1 | 有且只能一个实例 |
1..n | 至少有一个实例 |
常见的基数
例:以权限中的用户组、用户角色为例,一个用户角色可以属于一个或者多个用户组,一个用户组则可以包含多个用户角色。如果用户组采用下面的方法来获得用户角色的权限…
Java代码
- public class UserGroup{
- private UserRole uRole ;
- ......
- }
- public class UserRole{
- }
则表现在图中为:(注意箭头的画法)
3.聚合关系
【聚合关系】:是整体与部分的关系.如人群和人是整体和部分的关系.
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
聚合关系通过一个空心的菱形加箭头表示,如下图所示:
代码:
[java] view plain copy
- public class PersonGroup {
- public Person person;
- //将person作为构造方法的参数传进去
- public PersonGroup(Person person) {
- // TODO Auto-generated constructor stub
- this.person = person;
- }
- }
[java] view plain copy
- public class Person {
- public Person() {
- // TODO Auto-generated constructor stub
- }
- }
解释:Person类是PersonGroup构造方法的参数,因此可以Person类可以完全脱离PersonGroup类而存在,不会因为PersonGroup实例的消亡而消亡,就像现实生活中,人不会因为脱离人群就挂了...
4.组合(Composition)
【组合关系】:是整体与部分的关系.,没有公司就不存在部门 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
【代码体现】:成员变量
例:人和他的脚就是一个好的例子。
代码:
[java] view plain copy
- public class Person {
- public Foot foot;
- public Person() {
- // TODO Auto-generated constructor stub
- //在构造方法中实例化
- foot = new Foot();
- }
- }
[java] view plain copy
- public class Foot {
- public Foot() {
- // TODO Auto-generated constructor stub
- }
- }
解释:
Foot类是在Person类的构造方法中才被具体实例化,一旦Person实例生成,则Foot实例也生成,当Person实例消亡,其Foot实例也消亡,就像现实生活中,生成一个人,并定会伴随着脚的生成,但是如果那个人挂了,它的脚自然而然也就...(怎么听着怪怪-.-)
组合关系通过一个实心的菱形加箭头表示,如下图所示:
5.实现关系
是一种类与接口的关系,表示类是接口所有特征和行为的实现.,如下图所示:
带三角箭头的虚线,箭头指向接口
6.泛化关系
泛化关系通常包含类与类之间的继承关系关系,如下图所示:
继承: