UML图

310 阅读4分钟

1. 概念

UML(Unified modeling language)统一建模语言,是一种用于软件系统分析和设计的语言工具,用来帮助软件开发人员进行思考和记录思路的结果

2. 分类

  1. 用例图
  2. 静态结构图:类图、对象图、包图、组件图、部署图 (类图是描述类与类之间的关系的,是UML图中最核心的)
  3. 动态行为图:交互图(时序图与协作图)、状态图、活动图

3. 类图

  1. 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
  2. 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合

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 组合

如果我们认为MouseMonitor类和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一起删除。那么两者就是组合关系