UML:类图、类的关系

1、UML

Unified Modeling Language(统一建模语言)

是一门编程语言,一种方法论。

  1. 概念:用于说明、可视化、构建和编写一个在开发阶段、面向对象、软件密集系统的制品的方法论。
  2. 作用
    1. 面向对象图的方式,建立软件系统的模型(也可用于其它领域)。
    2. 用于软件系统分析和设计,帮助开发者记录思路。
  3. 相关工具
    1. UML 建模工具:如 Rational Rose
    2. IDE 插件:如 UMLSupport
    3. web 绘图

1.1、模型

含义 图类型
功能模型 从用户角度展示系统的功能 用例图
对象模型 采用对象、属性、操作、关联等概念展示系统的结构和基础 类图、对象图、包图、组件图、部署图
动态模型 展现系统的内部行为 交互图(时序图、协作图)、状态图、活动图

1.2、图的种类

  1. 功能模型——用例图:从用户角度描述系统功能。
  2. 对象模型:
    1. 类图:描述系统中类的静态结构。
    2. 对象图:描述系统中的多个对象在某一时刻的状态。
    3. 包图:对构成系统的模型元素进行分组整理。
    4. 组件图:描述系统的静态实现视图。
    5. 部署图:定义系统中软硬件的物理体系结构。
  3. 动态模型:
    1. 交互概览图:用活动图来表示多个交互之间的控制关系的图。
    2. 组合结构图:表示类或者构建内部结构。
    3. 时序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互。
    4. 协作图:描述对象之间的协助关系。
    5. 状态图:描述状态到状态控制流,常用于动态特性建模。
    6. 活动图:描述业务实现用例的工作流程。

2、类的关系

2.1、依赖

依赖Dependency

最基本的类的关系,所有其它关系都是依赖的不同体现。

  1. 场景一个类中使用到另一个类
    1. 类的成员属性,即聚合 / 组合
    2. 方法的局部变量、方法返回值类型、方法参数类型。
  2. UML 图
    • 虚线
    • 单向普通箭头

示例

public class Person{
    // 成员属性:IdCard
    private IdCard idCard;
    // 方法返回类型:Hobby
    public Hobby[] listHobbys(){...}
    // 方法接收的参数类型:Tool
    public void work(Tool tool){...}
    // 方法中使用到:Book
    public void study(){
        Book book = new Book();
        ...
    }   
}

image-20211201145348010

2.2、泛化

泛化Generalization

是特殊的依赖关系。

  1. 场景:即类的继承
  2. UML 图
    • 实线
    • 单向空心三角箭头

示例

public class Song{}
// 继承
public class PopularSong extends Song(){}

image-20211201145356797

2.3、实现

实现Implementation

是特殊的依赖关系

  1. 场景:即实现接口
  2. UML 图
    • 虚线
    • 单向空心三角箭头

示例

public interface UserService(){...}
// 实现
public class UserServiceImpl implements UserService(){...}

image-20211201145408073

2.4、关联

关联Association

是特殊的依赖关系

  1. 场景:某个类作为另一个类的成员变量,拥有以下性质。
    1. 导航性
      • 单向关联
      • 双向关联
    2. 多重性:不同数字符号的含义如下。
      • n:有 n 个
      • n, m:n 或 m 个
      • n ... m:n 到 m 个
      • n... :至少 n 个
  2. UML 图
    • 实线
    • 单向普通箭头/ 双向无箭头
    • 数字
    • 备注信息

示例

// 单向一对一关系
public class Person{
    private IdCard idCard;
}
public class IdCard{
    private Person person;
}

// 双向多对一关系
public class Student{
	private Dorm dorm;
}
public class Dorm{
    private Student[] studentList;
}

image-20211201145418346

2.4.1、聚合

聚合Aggregation

是特殊的关联关系

  1. 场景:整体和部分在逻辑上可分离动态注入变量依赖。
  2. UML 图
    • 实线
    • 单向空心菱形箭头

示例

public class Person{
    // 人与鞋子,可以分离
    private Shoe shoe;
    // 动态注入变量依赖:setter注入
    public void setShoe(Shoe shoe){
        this.shoe = shoe;
    }
}

public class Shoe{...}

image-20211201145428693

2.4.2、组合

组合Composition

特殊的关联关系

  1. 场景:整体和部分在逻辑上不可分离静态初始化变量依赖。
  2. UML 图
    • 实线
    • 单向实心菱形箭头

示例

public class Person{
    // 人与大脑,不可分离
    // 静态初始化变量依赖
    private Brain brain = new Brain();
}

image-20211201145438519

3、小结

3.1、理解

  1. 依赖:最基本的类的关系,所有其它关系都是依赖的不同体现。

  2. 泛化实现:对应类的继承和实现概念。

  3. 关联:类作为另一个类的成员变量。

    • 聚合:整体和部分可分离,动态注入变量依赖。

    • 组合:整体和部分不可分离,静态初始化变量依赖。

      image-20211201003825208

3.2、对比

关键词 连线 箭头
依赖 使用到 虚线 单向普通
泛化 继承 实线 单向空心三角
实现 实现 虚线 单向空心三角
关联 成员变量 实线
(数字、备注信息)
单向普通
or 双向无箭头
聚合 可分离,动态注入 实线 单向空心菱形
组合 不可分离,静态初始化 实线 单向空心菱形

3.3、类图

image-20211201145523108

posted @ 2021-11-30 17:49  Jaywee  阅读(170)  评论(0编辑  收藏  举报

👇