欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

一文读懂 UML 类图(六种关系:依赖、概括、实现、关联、聚合、组合)

最编程 2024-07-07 17:33:35
...


在这里插入图片描述

UML基本介绍

  1. UML(Unified Modeling Language),统一建模语言。是一种用于软件系统设计、建模和文档化的标准化语言(软件分析和设计);
  2. 常见的UML图包括:
    1. 用例图
    2. 静态结构图:类图,对象图,包图,组件图,部署图
    3. 动态行为图:时序图,协作图,状态图,活动图
  3. 常用建模工具:Rational Rose,processon

UML类图

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

类图简单举例:

public class Student {

    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

image.png

类图——依赖(dependence)

只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编译都通过不了

public class PersonServiceBean {

    // 类的成员属性
    private PersonDao personDao;

    // 方法接收的参数类型
    public void save(Person person) {
    }

    // 方法的返回类型
    public IDCard getIDCard(Integer personid) {
        return null;
    }

    // 方法中使用到
    public void modify() {
        Department department = new Department();
    }
}

image.png

类图——泛化(Generalization)

泛化关系就是继承关系。是依赖关系的特例

public abstract class DaoSupport {

    public void save(Object o){
        System.out.println("save");
    }
    public void delete(Object o){
        System.out.println("delete");
    }
}

class UserDao extends DaoSupport{
}

image.png
总结:

  • 泛化关系就是继承关系
  • 如果A类继承了B类,我们就说A和B存在泛化关系
类图——实现(implementation)

实现关系就是A类实现B类。是依赖关系的特例

public interface BaseService {
    void delete(Integer id);
}
public class UserService implements BaseService {
    @Override
    public void delete(Integer id) {
        System.out.println("delete......");
    }
}

image.png

类图——关联(Association)

关联关系就是类和类之间的联系,可以理解为拥有关系,一个类知道知道另一个类的属性和方法。是依赖关系的特例。在程序中被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量

  • 具有导航性:双向关系或单向关系
  • 具有多重性:如“1”表示有且仅有1个;“0…”表示0个或多个;“0,1”表示0个或者1个;“n…m”表示n到m个都可以;“m…*”表示至少m个
单向一对一关系
public class Person {
    private IDCard card;
}
class IDCard {}

image.png

双向一对一关系
public class Person {
	private IDCard card;
}
public class IDCard {
	private Person person;
}

image.png

类图——聚合(Aggregation)

聚合关系就是整体和部分的关系,整体和部分可以分开。是关联关系的特例,所以具有导航性和多重性。程序中聚合和关联关系是一致的,只能从语义级别来区分

public class Computer {
    private Mouse mouse;
    private Monitor monitor;

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
}
class Mouse {}
class Monitor {}

image.png

类图——组合(Composition)

组合关系也是整体与部分的关系,不过整体与部分不可分开。程序中组合和关联关系是一致的,只能从语义级别来区分
如果我们认为Mouse,Monitor和Computer是不可分离的,则升级为组合关系:

public class Computer {
    private Mouse mouse = new Mouse();
    private Monitor monitor = new Monitor();
}
class Mouse {}
class Monitor {}

image.png

参考资料

[1]尚硅谷图解Java设计模式
[2]UML六种关系:https://cloud.tencent.com/developer/article/1455858?areaId=106001
[3]分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖:https://cloud.tencent.com/developer/article/1012684

github笔记