UML类图详解

巧了我就是萌 提交于 2020-02-27 13:06:38

类的UML图示

在UML中,类使用包含类名属性方法且带有分隔线的矩形来表示,如定义一个Employee类,它包含属性name、age和email,以及方法modifyInfo(),在UML类图中该类如图1所示:
在这里插入图片描述
在UML类图中,类一般由三部分组成:

(1) 第一部分是类名

(2) 第二部分是类的属性(Attributes):即类的成员变量。一个类可以有任意多个属性,也可以没有属性

UML规定属性的表示方式为:

可见性 名称:类型 [ = 缺省值 ]

其中:

“可见性” 用符号+、-和#表示 :

public +
private -
protected #

(3) 第三部分是类的方法(Operations):

UML规定操作的表示方式为:

可见性 名称(参数列表) [ : 返回类型]

其中:

“可见性”的定义与属性的可见性定义相同。
方法的示意图参考图2
在这里插入图片描述

标题类与类之间的关系(1)

1. 关联关系

关联关系又可进一步分为单向关联、双向关联和自关联。

(1)单向关联
在这里插入图片描述
我们可以看到,在UML类图中单向关联用一个带箭头的直线表示。

上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。

应的Java代码片段如下:

public class Customer {
private Address address;
……
}

public class Address {
……
}

(2)双向关联
在这里插入图片描述
从上图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。

在UML类图中,双向关联用一个不带箭头的直线表示。上图中在Customer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。

对应的Java代码片段如下:

public class Customer {
private Product[] products;
……
}

public class Product {
private Customer customer;
……
}

(3)自关联
在这里插入图片描述
自关联在UML类图中用一个带有箭头且指向自身的直线表示。

上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。
对应的Java代码片段如下:

public class Node {
private Node subNode;
……
}

(4) 多重性关联

在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。

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

表1 多重性表示方式列表

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图5所示:
在这里插入图片描述
对应的Java代码片段如下:

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

public class Button {
……
}

(5)聚合关系

聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在

在这里插入图片描述
上图中的Car类与Engine类就是聚合关系(Car类中包含一个Engine类型的成员变量)。

由上图我们可以看到,UML中聚合关系用带空心菱形和箭头的直线表示。聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在。比如上图中汽车包含了发动机,而发动机脱离了汽车也能单独存在。

代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中,图6对应的Java代码片段如下:

public class Car {
	private Engine engine;

    //构造注入
	public Car(Engine engine) {
		this.engine = engine;
	}
    
    //设值注入
public void setEngine(Engine engine) {
    this.engine = engine;
}
……
}

public class Engine {
	……
} 

(6)组合关系

组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系,如图7所示:
在这里插入图片描述
在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类,图7对应的Java代码片段如下:

public class Head {
	private Mouth mouth;

	public Head() {
		mouth = new Mouth(); //实例化成员类
	}
……
}

public class Mouth {
	……
} 

类与类之间的关系(2)

2. 依赖关系

依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car,如图1所示:
在这里插入图片描述

依赖关系通常通过三种方式来实现,

  • 第一种也是最常用的一种方式是如图1所示的将一个类的对象作为另一个类中方法的参数
  • 第二种方式是在一个类的方法中将另一个类的对象作为其局部变量
  • 第三种方式是在一个类的方法中调用另一个类的静态方法

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

public class Driver {
	public void drive(Car car) {
		car.move();
	}
    ……
}

public class Car {
	public void move() {
		......
	}
    ……
}  

3.继承关系
继承关系对应的是extend关键字,在UML类图中用带空心三角形的直线表示,

如下图所示中,Student类与Teacher类继承了Person类。
在这里插入图片描述

4.接口实现关系

这种关系对应implement关键字,在UML类图中用带空心三角形的虚线表示。如下图中,Car类与Ship类都实现了Vehicle接口。
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!