1.1 什么是UML
UML统一建模语言存在的意义在于统一设计建造标准,是设计语言的图纸。简而言之,任何工厂可通过设计图纸加工统一标准的标准件。
以一个UML图说明,表示类的框分为以下几层(从上到下)
- ·类名:Programmer
- ·属性清单
- ·方法清单
- ·性质清单
如果一个类有内部成员类,它的类图就会有五层。在类的类图中,除了类名层是不能省略的、必须显示的以外,其他几层都是可以在UML图中省略的。
第一层是类名。类名如果是正体字,表明类是具体的(Concrete,即可以实例化的类),变量名如果是斜体字,表明类是抽象的。显然在图中给出了一个具体的类。类名是不能省略,必须显示的。
第二层是属性层。一个属性可以是public、private、protected。一个属性的左面如果有一个加号(+),表示它是public;左边如果有个一个减号(-),表示是private;如果是井号(#),表示是protected。
第二层是属性层。一个属性可以是public、private或者protected。加号、减号、井号的含义和上面一样。
第三层是方法层,同样,加减井号的含义不变,在下面有下划线的代表是静态方法。(方法层里的属性必须实现set和get方法)。总而言之,上面的UML图所代表的程序如下:
package com.wuyi.staticMethodTest;
/**
* Created on 2017/6/20
*
* @author WuYi
*/
public class Programmer {
private double salary;
public long lunchHours;
protected float jobs;
private char unstable;
private String jobTitle;
public Programmer(){
}
public Programmer(String jobTitle){
this.jobTitle=jobTitle;
}
private void work(){
System.out.println("working");
}
private void updateSkills(){
//
}
private void applyForVisa(){
//
}
public void sellBugs(String customer){
//
}
public void chargeForFixes(String customers){
}
public void increaseSalary(double amount){
this.salary+=amount;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
}
1.2 UML类图的关系
UML类图的关系一般分为一般化关系、关联关系、聚合关系、合成关系、依赖关系
一般化关系
一般化关系表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般的关系是子类指向父类的。与继承或实现的方向相反。
一般化关系在Java语言中可以之间翻译为关键字extend和implements。
关联关系
关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头。单向关联有一个箭头,表示关联的方向,如下图所示。单向的关联更为普遍,通常不鼓励使用双向的关联。
在上面的Driver类中,就出现了一个类型为Car的实例变量,这个变量实现了这两个类之间的关联关系。每一个关联都有一个名字,在上面的例子中,关联的名字是Drivers。
在每一个关联的端点,还可以有一个基数,表明这一端的类可以有几个实例。比如下面:
常见的基数有如下表所示的这些:
基数 | 含义 |
0..1 | 零个或者一个实例 |
0..*或者* | 对实例的数目没有限制 |
1 | 只有一个实例 |
1..* | 至少一个实例 |
聚合关系
聚合关系是关联关系中的一种,是强的关联关系。聚合是整体和个体之间的关系,如汽车类与引擎类、轮胎类,以及其他的零件类之间的关系便是整体和个体的关系。一个汽车对象是由一个引擎对象、四个轮胎对象组成的。
如下图:
合成关系
合成关系是关联关系中的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系是不能共享的。
在上面的类图中,显示了美猴王以及他的四肢和他的金箍棒之间的关系。可以看出,MonkeyKing与GoldRingedStaff之间是聚合的关系。而MonkeyKing与Limb之间的关系要比前者更强,是合成关系,因为美猴王的四肢完全是由美猴王自己负责,并且不能共享。
依赖关系
依赖关系总是单向。依赖关系表示一个类依赖于另一个类的定义。一个人(Person)可以买车(Car)和房子(House),Person类依赖于Car类和House类。如下图所示
上图中,Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联关系不同的是,Person类中没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。
另外,时序图、状态图较为简单,在Java设计模式中也很重要,但在此不再记录笔记