文章内容
一、UML介绍
UML(Unified Modeling Language)是一种统一建模语言,是用来对软件密集系统进行可视化建模的一种语言。
UML图有很多种,主要包含以下几类:
二、UML类图表示
1、类的UML类图表示
UML类图中用矩形框表示一个具体类,矩形框分为三层:
- 第一层:类名
- 第二层:成员变量
- 第三层:成员方法
成员变量以及成员方法名 前 的访问修饰符用对应符号来表示,成员变量以及成员方法名 后 紧跟着”:”后面再跟着成员变量的类型或者方法的返回类型,举个例子。下面是一个具体类的定义:
class Student {
public String pubVar;
protected String proVar;
private String priVar;
String defaultVar;
public String pubFun() {
return "pubFun";
}
protected String proFun() {
return "proFun";
}
private String priFun() {
return "priFun";
}
String defaultFun() {
return "defaultFun";
}
}
下面是该类对应的UML类图:
2、抽象类的UML类图表示
抽象类在UML类图中同样用矩形框表示,不同的是抽象类的类名以及抽象方法的名字都用斜体字表示,其它和具体类没有任何差别。下面是一个抽象类的定义:
abstract class Person{
public String pubVar;
protected String proVar;
private String priVar;
String defaultVar;
public String pubFun(){
return "pubFun";
}
protected String proFun(){
return "proFun";
}
private String priFun()
{
return "priFun";
}
String defaultFun(){
return "defaultFun";
}
//抽象方法
public abstract void abstractFun();
}
其对应的UML类图如下:
3、接口的UML类图表示
接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端会用 <> 标注这是一个接口,下面是接口的名字,第二层是方法。另外需要注意的是接口的方法前面没有访问修饰符 默认就是public 访问权限。下面是一个接口的定义:
interface Shoes {
void abstractFun();
}
其对应的UML类图如下:
4、包的UML类图表示
类和接口一般都出现在包中,UML类图中包的表示形式如图:
package graph;
其对应的UML类图如下:
三、类图的几种关系表示
1、继承关系
继承关系也称为泛化关系,是指对象与对象之间的继承关系。
在UML类图中,继承关系是用 空心 三角和 实线 组成的箭头表示,从 子类指向父类 。下面的例子中,Son类继承了Parent类。
class Parent {
}
class Son extends Parent {
}
用UML类图表示如下:
2、实现关系
实现关系是指接口及其实现类之间的关系。
在UML类图中,实现关系用 空心三角 和 虚线 组成的箭头来表示,从 实现类指向接口。下面的例子中,Dog类实现了了Animal类。
interface Animal {
}
class Dog implements Animal {
}
用UML类图表示如下:
3、聚合关系
聚合关系是一种特殊的关联关系,表示的是整体和部分的关系,整体与部分具有各自的生命周期,即使整体没有了,部分还能存在,典型的例子就是,公司部门与员工的关系,一个部门撤消了,员工还能存在。
在UML图中,聚合关系用空心菱形加实线箭头表示, 空心菱形 在整体一方, 箭头 指向部分一方。如下所示:
class Department {
private Employee employee;
}
class Employee {
}
其对应的UML类图如下:
4、组合关系
和聚合关系类似, 组合关系表示的也是整体与部分的关系,但 不同于聚合关系 的是:组合关系中, 整体与部分不可以分开 ,一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。
组合关系和聚合关系不关概念很像,它们的UML类图表示也很像, 在UML图中,组合关系用 实心菱形 加实线箭头表示,实心菱形在整体一方,箭头指向部分一方。举个例子,比如人的头(Head)和嘴巴(Mouth),嘴巴是头的组成部分之一,一旦头没了,嘴巴也没了,因此头和嘴巴是组合关系,对应的java代码如下:
class Mouth{
}
class Head {
private Mouth mouth;
}
其UML类图表示如下:
在Java代码形式上, 聚合和组合 关系中的 部分对象是整体对象 的一个 成员变量 ,仅从类代码本身是区分不了聚合和组合的。如果一定要区分,那么需要结合业务角度上来看,如果作为整体的对象必须要部分对象的参与,才能完成自己的职责,那么二者之间就是组合关系,否则就是聚合关系。
5、依赖关系
依赖(Dependency) 关系是一种弱关联关系。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。如:工人(Worker)要去拧螺丝,要依赖螺丝刀(Screwdriver)来帮助你完成拧螺丝的工作。
依赖关系在Java中的具体代码表现形式为B为A的构造器或方法中的局部变量、方法或构造器的参数、方法的返回值,或者A调用B的静态方法。在UML类图中,依赖关系用一个 带虚线的箭头 表示,由 使用方指向被使用方 ,可以看下面的例子。代码如下:
class Screwdriver {
}
class Worker {
//Screwdriver对象作为Worker类方法的参数,构成依赖关系
public void screw(Screwdriver screwdriver) {
}
}
对应的UML类图表示如下:
6、关联关系
关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。
在UML类图中,用实线连接有关联关系的对象所对应的类。 通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名),关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。
1)单向关联
一个只包含另一个的关系为单向关联,也就是一厢情愿。
class Button {
}
class View {
private Button btn;
}
对应的UML类图表示如下:
2)双向关联
也就是类与类之间相互包含彼此相辅相成而存在,就好比夫妻关系一样,好朋友的关系一样,你是我的好朋友,我也是你的好朋友等等。
class Wife {
public void make_baby(...);
private Husband self_husband;
}
class Husband {
public void work(...);
private Wifeself_wife;
}
对应的UML类图表示如下:
3)自关联
在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联 。这种关系表现为递归关系,如目录结构等等。
class Tree {
public Tree left;
public Tree right;
private int data;
}
对应的UML类图表示如下:
4)多重性关联
多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。
class People {
public void work();
}
class Factory {
protected List<People> workers;
}
对应的UML类图表示如下: