1. 概念
UML(Unified modeling language)统一建模语言,是一种用于软件系统分析和设计的语言工具,用来帮助软件开发人员进行思考和记录思路的结果
2. 分类
- 用例图
- 静态结构图:类图、对象图、包图、组件图、部署图 (类图是描述类与类之间的关系的,是UML图中最核心的)
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
3. 类图
- 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
- 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合
3.1 依赖关系
只要是类中用到了对方,那他们之间就存在依赖关系 举例:
public class PersonServiceBean {
private PersonDao personDao;//类
public void save(Person person){}
public IDCard getIDCard(Integer personid){}
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
这里PersonServiceBean类使用到了PersonDao、IDCard、Person、Department这四个类,所有对这四个类产生了依赖关系
用UML图表示为:
UML类图中的类的图例是一个三层的矩形,第一层书写的是类的全限定名或者类名;第二层是Field,也就是成员变量格式,格式如:
Attribute A: type = defaultValue;第三层是Method区域,也就是方法,格式如Operation A(params) : return依赖关系使用的是 ---> 样式的虚线箭头,A依赖(使用了)B,那么就是 A ---> B
3.2 泛化
泛化就是继承关系,如果A继承了B,那么就说A和B存在泛化关系,泛化是依赖的特例 举例:
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport,所以这两个类是泛化的关系
{
}
可以看到PersonServiceBean继承了Daosupport,所以这两个类是泛化的关系
泛化关系使用的UML图例是 ────▷ 样式的实线箭头,A继承了B,那么就是 A ───▷ B
3.3 实现
实现是针对接口的,就是A类实现了B接口,实现关系也是依赖关系的特例
public interface PersonService {
public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}
PersonServiceBean实现了PersonService接口
实现关系使用的UML图例是 ---▷ 样式的虚线箭头,A实现了B,那么就是 A ---▷ B
3.4 关联
关联关系其实就是类与类的联系,他是依赖关系的特例
关联关系具有导航性,有双向的或者单向的关系
类中如果有某个类的成员变量,就构成了关联关系
关系具有多重性:如“1”(表示有且仅有一个),“0...”(表示0个或者多个),“0,1”(表示0个或者一个),“n...m”(表示n到 m个都可以),“m...*”(表示至少m个)
UML图示:
3.5 聚合
聚合表示的是整体和部分的关系,整体和部分可以分开。聚合是关联的特例,所以具有关联关系的导航性和多重性 比如一台电脑包括键盘、鼠标、显示器等,而且各个部件脱离了电脑还是能够使用的,那么这叫做聚合 聚合关系的UML图例是 ────◇ 带有菱形的实线 举例:
public class Computer {
private Mouse mouse;
private Monitor monitor;
public Mouse getMouse() {
return mouse;
}
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public Monitor getMonitor() {
return monitor;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
}
可以看到Computer类具有Mouse类和Monitor类的对象
这里不可分离的体现的是mouse和monitor是没有默认赋值,通过getter和setter来赋值
B中含有A类对象,说明A聚合到B,所以是 A ────◇ B
3.6 组合
如果我们认为Mouse、Monitor类和Computer类是不可分离的,那么这三者就升级为组合关系
组合关系使用 ────◆ 带有实心菱形的实线
举例:
Person类具有iDCard变量和head变量,这里IDCard和Person是聚合关系,head变量和Person是组合关系,因为不可分割
public class Person {
private IDCard idCard; // 集合关系
private Head head = new Head(); // 组合关系
public IDCard getIdCard() {
return idCard;
}
public void setIdCard(IDCard idCard) {
this.idCard = idCard;
}
}
这里组合关系体现为:随着Person类对象的创建,Head对象也会随之被创建
UML表示为:
注意:这里并不是说在定义的时候有没有new是硬性区分聚合和组合的关系的标准,如果在程序中Person实体中定义了IDCard进行级联删除,即删除Person的时候连同IDCard一起删除。那么两者就是组合关系