详细分析UML的10种图(全)

news2024/11/15 11:28:18

目录

  • 前言
  • 1. 基本知识
  • 2. 结构图
    • 2.1 类图
    • 2.2 对象图
    • 2.3 组件图
    • 2.4 部署图
    • 2.5 包图
  • 3. 行为图
    • 3.1 用例图
    • 3.2 活动图
    • 3.3 状态图
  • 4. 行为图
    • 4.1 顺序图
    • 4.2 协作图

前言

在软考高级中常见的一种题型,对此补充这方面的知识,并将其归入软考的专栏

1. 基本知识

UML(Unified Modeling Language,统一建模语言)图是一种用于描述软件系统结构和行为的图形化语言

  • 一种通用的、标准化的建模语言,被广泛应用于软件开发和系统设计领域
  • 一种用来描述软件系统结构、行为、交互和非功能属性的图形化表示方法
  • 提供了一套统一的符号和规则,帮助软件开发人员、设计师和其他利益相关者进行沟通、交流和理解

其中的作用如下:

  • 可视化和沟通: UML图提供了一种可视化的方式来呈现软件系统的各个方面,使得开发人员和利益相关者能够更容易地理解和交流系统设计和功能。
  • 设计和分析: UML图可用于系统设计和分析阶段,帮助开发人员捕获系统需求、定义系统架构、识别系统组件之间的关系,并进行模型验证和测试。
  • 文档: UML图可以作为软件系统的文档,记录系统的结构、行为和交互,并为后续的系统维护和升级提供参考。
  • 自动生成代码: 一些UML建模工具可以根据UML图自动生成部分或全部的代码,从而加速软件开发过程,减少人为错误

理解和区分UML中的结构图、行为图和交互图可以通过它们所关注的内容和展示的方式来进行

  1. 结构图
    关注系统的静态结构,即系统的组件、元素之间的静态关系和属性。它描述了系统中的类、对象、组件、包等元素,以及它们之间的关系,但不涉及元素之间的交互和行为
    主要用于展示系统的组织结构和静态特征。

常见的结构图类型:

  • 类图(Class Diagram):描述系统中的类、接口、关联、继承等
  • 对象图(Object Diagram):展示系统中具体对象的实例及其之间的关系
  • 组件图(Component Diagram):显示系统中的组件及其之间的依赖关系
  • 部署图(Deployment Diagram):描述系统的物理部署结构
  • 包图:描述系统中的各个包(或命名空间)之间的关系和依赖
  1. 行为图
    行为图描述系统中各个组件或对象之间的动态行为
    展示了系统的活动流程、状态转换以及对象之间的交互
    行为图用于捕获系统在执行过程中的行为和控制流。

常见的行为图类型:

  • 用例图(Use Case Diagram):展示系统的功能需求和用户与系统之间的交互
  • 活动图(Activity Diagram):描述系统中各个活动之间的流程和控制流
  • 状态图(Statechart Diagram):表示系统中对象的状态及状态之间的转换
  1. 交互图
    交互图描述了系统中不同对象之间的交互,以及消息传递的顺序和方式
    着重于显示对象之间的通信和协作,用于捕获系统中对象之间的动态交互。

常见的交互图类型:

  • 顺序图(Sequence Diagram):展示对象之间的消息交互顺序
  • 协作图(Collaboration Diagram):描述对象之间的协作关系

大致区分:

  • 结构图关注系统的静态结构,描述了系统的组织结构和静态特征。
  • 行为图描述系统中各个组件或对象之间的动态行为,捕获系统在执行过程中的行为和控制流。
  • 交互图描述了系统中不同对象之间的交互,着重于显示对象之间的通信和协作。

总的来说,结构图关注系统的组织结构和静态特征,行为图关注系统的动态行为,而交互图关注对象之间的交互和通信

在软件开发过程中,这三种图形式可以互相补充,全面展现系统的各个方面。

2. 结构图

2.1 类图

类图是UML中最常用的结构图之一,它提供了一个视觉化的方式来描述系统中的类及其之间的关系。

涉及到 UML 类图中的不同关系时,每种关系都有其特定的含义和用途。下面是对每种关系的补充和完善:

  1. 泛化(Generalization),也就是继承:泛化关系表示类之间的继承关系,其中一个类是另一个类的子类
    子类继承了父类的属性和方法,并可以添加新的属性和方法
    (泛化关系用空心三角形箭头连接父类和子类,箭头指向子类)

  2. 实现(Realization):实现关系表示类实现了接口,即类承诺实现接口中定义的所有方法
    (实现关系用带空心三角形的虚线连接类和接口,箭头指向实现的接口)

  3. 依赖(Dependency):表示一个类使用另一个类的服务,但不拥有对其的控制权。依赖关系通常是暂时性的,一个类的变化可能会影响到另一个类
    (依赖关系用虚线箭头连接两个类,箭头指向被依赖的类)

  4. 关联(Association):关联关系表示类之间的连接或关联,一个类知道另一个类的存在,但没有强制的拥有关系
    (关联关系通常表示为直线,两端连接有实心箭头,箭头指向被引用的类)

  5. 聚合(Aggregation):聚合关系表示整体与部分之间的关系,其中整体对象包含部分对象,但部分对象不是整体对象的一部分
    (聚合关系用带空心菱形的直线连接整体和部分,菱形指向整体)

  6. 组合(Composition):组合关系也表示整体与部分之间的关系,但是部分对象是整体对象的一部分,没有了整体对象,部分对象也就不存在了
    (组合关系用带实心菱形的直线连接整体和部分,菱形指向整体)

在这里插入图片描述

详细的补充推荐阅读:UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)

强弱顺序
在描述关系的强弱顺序时,通常认为:组合>聚合>关联>依赖
(组合和聚合都是关联关系的一种特例)

  1. 泛化和实现关系是最强的,因为它们表示类之间的明确的继承和承诺关系(继承和实现
  2. 组合关系比聚合关系更强,因为部分对象是整体对象的一部分,整体对象的生命周期影响了部分对象
  3. 关联关系则比聚合和组合关系更弱,因为它只表示类之间的连接或关联,没有了一个类,并不影响另一个类的存在(通过实例变量体现
  4. 依赖关系是最弱的,因为它表示的是一个类对另一个类的临时性使用,一个类的变化可能会影响到另一个类,但不会对其生命周期产生影响(作为方法使用

2.2 对象图

对象图是 UML 中的一种结构图,用于展示系统中对象的实例及其之间的关系

提供了对类图的实例化表示,更具体地描述了系统中对象的状态和属性,以及对象之间的关联

  1. 组件(Component):组件图的核心元素,用于表示系统中的可复用的、可替换的软件单元
    通常具有清晰的接口和明确的功能,可以被其他组件使用

  2. 接口(Interface):定义了组件对外提供的服务或功能
    描述了组件的操作、方法或消息,其他组件可以通过接口与该组件进行交互

  3. 依赖关系(Dependency):表示一个组件依赖于另一个组件的服务或功能
    如果一个组件使用了另一个组件的服务、接口或功能,则存在依赖关系。依赖关系在组件图中通常用带箭头的虚线表示,箭头指向被依赖的组件。

  4. 依赖注入(Dependency Injection):一种特殊的依赖关系,用于描述一个组件向另一个组件提供其依赖的实例或对象。依赖注入通常表示为箭头从提供依赖的组件指向接受依赖的组件

示例对象图:这个示例展示了对象图中对象的实例化和关联关系
(在对象图中,实例化了两个对象:Person1 和 Car1,并将它们连接到 PersonCar 类)

+--------------+             +--------------+
|   Person     |             |   Car        |
+--------------+             +--------------+
| - name: John |             | - brand: BMW |
| - age: 30    |             | - color: red |
+--------------+             +--------------+
      |                             |
      | drives                      |
      v                             v
+-------------------------------------------+
|              PersonCar                   |
+-------------------------------------------+
| - owner: {Person1}                      |
| - car: {Car1}                           |
+-------------------------------------------+

2.3 组件图

在UML中,组件图是一种结构图,用于描述系统中的组件及其之间的依赖关系。组件通常是可以被复用、替换或独立部署的软件单元,它们可以是库、模块、服务、框架等

  1. 节点(Node):表示系统的物理组件,如服务器、计算机、设备等,用于承载和运行系统的软件组件

  2. 组件(Component):表示系统的软件组件,如应用程序、库、模块等,需要部署到节点上才能运行

  3. 连接线(Connector):表示节点之间或节点与组件之间的连接关系,描述了系统中不同组件之间的通信或依赖关系。可以表示网络连接、通信协议、数据传输方式等

  4. 部署目标(Deployment Target):表示系统被部署到的具体环境或平台,如操作系统、虚拟化环境、云平台等

示例组件图:

  • 两个组件:UserManager 和 DatabaseManager,分别表示用户管理和数据库管理功能
  • 两个接口:AuthenticationAPI 和 DatabaseAPI,定义了两个组件对外提供的服务
  • UserManager 组件依赖于 AuthenticationAPI 接口,而 DatabaseManager 组件依赖于 DatabaseAPI 接口
+-------------------+             +-------------------+
|   UserManager    |             |   DatabaseManager |
+-------------------+             +-------------------+
| + login(username,|             | + connect()       |
|     password)    |             | + executeQuery()  |
+-------------------+             +-------------------+
        |                              |       ^
        | depends on                   |       |
        v                              v       |
+------------------------+   +------------------------+
|   AuthenticationAPI   |   |     DatabaseAPI        |
+------------------------+   +------------------------+

2.4 部署图

描述系统的物理部署结构,即软件系统的部署环境和组件之间的关系

展示了软件系统如何被部署到硬件或软件环境中,包括物理节点、处理器、设备等

示例部署图:
(两个节点:Web Server 和 Database Server,分别表示Web服务器和数据库服务器。每个节点都运行了相应的软件组件,如Apache、PHP、MySQL等。这些节点都部署在虚拟机或物理服务器上,分别由Virtual Machine和Physical Server节点表示。连接线表示了节点之间的部署关系和依赖关系)

+-----------------+       +------------------+
|    Web Server   |       |   Database Server|
+-----------------+       +------------------+
| - Apache        |       | - MySQL          |
| - PHP           |       | - MongoDB        |
| - HTML/CSS/JS   |       +------------------+
+-----------------+                 ^
        |                           |
        | runs on                   |
        v                           |
+------------------------+   +-----------------------+
|      Virtual Machine   |   |       Physical Server|
+------------------------+   +-----------------------+
| - VMware               |   | - CPU: Intel Xeon    |
| - Ubuntu Server        |   | - RAM: 32GB          |
+------------------------+   | - Storage: 1TB SSD   |
                              +-----------------------+

2.5 包图

包图(Package Diagram)是 UML 中的一种结构图,用于组织和管理系统的模块化设计。它展示了系统中的各个包(或命名空间)之间的层次结构、依赖关系和组织关系

示例包图:

  • 三个包:MainPackage、SubPackage 和 UtilityPackage,分别表示主包、子包和工具包,每个包中包含了一些类、接口或子包
  • MainPackage 依赖于 SubPackage,因为 MainClass 类使用了 SubClass 类和 SubInterface 接口
  • SubPackage 和 UtilityPackage 之间没有依赖关系
+--------------------+       +------------------+
|     MainPackage    |       |   SubPackage     |
+--------------------+       +------------------+
| - MainClass        |       | - SubClass       |
| - HelperClass      |       | - SubInterface   |
+--------------------+       +------------------+
        |                          ^
        | depends on               |
        v                          |
+-----------------------------------------+
|             UtilityPackage              |
+-----------------------------------------+
| - UtilityClass                         |
| - UtilityInterface                     |
+-----------------------------------------+

3. 行为图

3.1 用例图

用例图(Use Case Diagram)是UML中的一种行为图,用于描述系统的功能需求和用户与系统之间的交互。它展示了系统的功能模块(用例)以及用户与系统之间的各种使用场景和交互方式

  1. 用例(Use Case):用例图的核心元素,表示系统的一个功能或一个用户需求
    用例描述了系统与用户之间的交互场景和功能流程
    通常以椭圆形状表示,用例名称描述了功能的名称或用户需求

  2. 参与者(Actor):与系统交互的外部实体,可以是用户、外部系统、设备等
    参与者可以执行用例,参与到系统的功能中
    通常以图标或人的图像表示,位于用例图的边缘

  3. 包含关系(Inclusion):表示一个用例包含了另一个用例,即一个用例的功能包含了另一个用例的功能
    通常表示为虚线箭头,从包含用例指向被包含用例

  4. 扩展关系(Extension):表示一个用例可以扩展另一个用例的功能,即一个用例的功能可以在另一个用例的基础上进行扩展
    通常表示为虚线箭头,从扩展用例指向被扩展的用例

  5. 泛化关系(Generalization):表示一个用例是另一个用例的特殊情况,即一个用例继承了另一个用例的功能
    通常表示为带空心三角形的直线,从子用例指向父用例

在这里插入图片描述

或者如下图:(辅助理解,这两张图都来源网络)

在这里插入图片描述

3.2 活动图

活动图(Activity Diagram)是UML中的一种行为图,用于描述系统中的业务流程、工作流程或操作流程。它展示了系统中各个活动之间的流程、顺序和条件,以及活动的执行顺序和并发关系

  1. 活动(Activity):活动图的核心元素,表示系统中的一个操作、任务或业务流程
    通常用矩形框表示,框内包含活动的名称,每个活动代表系统中的一个任务或操作

  2. 起始节点(Initial Node):通常用空心圆圈表示,位于活动图的顶部

  3. 结束节点(Final Node):通常用实心圆圈表示,位于活动图的底部

  4. 控制流(Control Flow):表示活动之间的顺序关系,描述了活动之间的执行顺序和流程控制
    通常表示为带箭头的直线,箭头指示了活动的执行方向

  5. 分支和合并(Branch and Merge):用菱形表示,合并用带有多个流出箭头的菱形表示

在这里插入图片描述

3.3 状态图

状态图(State Diagram)是UML中的一种行为图,用于描述对象在其生命周期中的各种状态以及状态之间的转换。它展示了对象在不同条件下的行为和状态变化,以及触发状态转换的事件

示例状态图中,从Start状态开始,对象可以发生不同的事件

  • 发生Event1事件时,对象从Start状态转换到Processing状态
  • 发生Event2事件时,对象从Processing状态转换到Error状态
  • 发生Event3事件,对象将从Error状态转换到Finished状态
  • 发生Event4事件,对象将从任何状态(包括Processing、Error、Finished)转换到Cancel状态
+-----------------+     [Event1]     +-----------------+
|    Start        | --------------->|    Processing   |
+-----------------+                 +-----------------+
|                |                   |                 |
|                | [Event2]          |                 |
|                ------------------->|     Error       |
|                |                   +-----------------+
|                |                   |                |
|                | [Event3]          |                |
|                ------------------->|    Finished    |
+-----------------+                 +-----------------+
                  |                   |                |
                  | [Event4]          |                |
                  ------------------->|     Cancel     |
                                      +-----------------+

结合上面看此图,方便理解:(图源:一步一步学习UML(4)-活动图和状态机图)

在这里插入图片描述

4. 行为图

4.1 顺序图

顺序图(Sequence Diagram)是UML中的一种行为图,用于描述对象之间的交互顺序和消息传递。它展示了对象之间的消息交流顺序,包括消息的发送、接收以及时间顺序

  1. 对象(Object):表示系统中的实体或参与者,可以是类的实例、模块、组件或用户等
    对象通常用矩形框表示,框内包含对象的名称

  2. 生命周期线(Lifeline):表示对象在顺序图中的生存期或活动期间
    通常用垂直虚线表示,沿着对象的一侧延伸,表示对象的生命周期

  3. 消息(Message):表示对象之间的交互或通信,描述了消息的发送者、接收者以及传递的内容
    常用带箭头的直线表示,箭头指示了消息的方向,消息内容位于消息线上方

  4. 自循环消息(Self-Message):表示对象向自身发送的消息,用于描述对象的自身行为或状态变化
    通常从对象的生命周期线上弯曲出一条弧线,再返回到生命周期线上

  5. 等待消息(Message with Time Constraint):表示对象在接收消息后等待一段时间后才能继续执行的情况,用于描述消息的延迟或等待时间
    等待消息通常在消息箭头上方标注时间约束

  6. 同步消息(Synchronous Message):同步消息通常在消息箭头上方标注同步符号(如实心箭头)

  7. 异步消息(Asynchronous Message):通常在消息箭头上方标注异步符号(如空心箭头)

  8. 返回消息(Return Message):通常用虚线箭头表示,箭头指向发送者

图源:UML之顺序图
在这里插入图片描述

4.2 协作图

协作图(Collaboration Diagram),也称为通信图(Communication Diagram),是 UML 中的一种行为图,用于描述对象之间的交互和消息传递。它展示了对象之间的通信结构和消息流动,以及对象之间的关系和协作方式

协作图与顺序图中的对象的概念是一样,只不过在协作图中,无法表示对象的创建和撤销,所以对于对象在图中的位置没有限制

图源:15. 面向对象——UML协作图(Collaboration Diagram)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网最最最详细DataEase源码Docker方式部署教程

1.源码获取 有条件的小伙伴可以使用GitHub方式获取,要是没有条件的小伙伴可以去码云上面获取也是一样的,或者可以联系博主,博主手把手教学~ GitHub地址 Gitee地址 2.配置源码信息 1.配置单机版的配置文件中的数据库信息 2.下载前端的依赖包…

顺序表经典算法及其相关思考

27. 移除元素 - 力扣(LeetCode) 思路一 利用顺序表中的SLDestroy函数的思想,遇到等于val值的就挪动 思路二 双指针法:不停的将和val不相等的数字往前放。此时的des更像一个空数组,里面存放的都是和val不相等、能够存…

java面试JVM虚拟机篇

1 JVM组成 1.1 JVM由那些部分组成,运行流程是什么? 难易程度:☆☆☆ 出现频率:☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写&a…

常见消息中间件

ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新一次。 它的单机吞…

Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】

文章目录 📕教程说明📕Building Block📕Quick Action📕OVRCameraRigInteraction 此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区,博主目前在内…

redis在go语言中的使用

redis在go语言中的使用 以下说明以读者有redis基础的前提下进行 未学习redis的可以到b站1小时浅学redis了解大概,学会如何使用 【GeekHour】一小时Redis教程_哔哩哔哩_bilibili 以下开发环境以windows为测试环境,旨在练习redis在go语言中的使用 red…

Java 面向对象进阶 14 抽象类和抽象方法(黑马)

抽象类不能实例化(创建对象): 抽象类中不一定有抽象方法: 有抽象方法的类一定是抽象类: 可以有构造方法:(作用:在创建子类对象时,给属性进行赋值的) Perso…

Springboot展示本地图片

1. 创建本地图片目录 在resources下创建目录static/image 2. 修改配置文件 在application.yml中新增 spring:mvc:static-path-pattern: /** 3. 编写拦截器类,继承自HandlerInterceptor 重写preHandle方法 public boolean preHandle(HttpServletRequest request…

Uniapp真机调试没有检测到设备,请插入设备或启动模拟器后刷新再试

最近用HbuilderX开发遇到了一个问题,之前插上手机就能调试,但最近再写app的时候,插上手机,也打开了开发者模式,但就是检测不到设备。 后来发现是要打开MIDI模式。vivo手机路径为:系统管理与升级->开发者…

RK3568平台开发系列讲解(Linux系统篇)编写I2C客户端驱动程序

🚀返回专栏总目录 文章目录 一、定义和注册I2C驱动程序二、在设备树中实例化I2C设备——新方法三、总结沉淀、分享、成长,让自己和他人都能有所收获!😄 配置I2C设备基本上分为两个步骤。 定义并注册I2C驱动程序定义并注册I2C设备在DT中,I2C设备属于非存储器映射设备系列…

HQYJ 2024-2-21 作业

复习课上内容(已完成)结构体字节对齐,64位没做完的做完,32位重新都做一遍,课上指定2字节对齐的做一遍,自己验证(已完成)两种验证大小端对齐的代码写一遍复习指针内容(已完…

人脸美型SDK解决方案,包括瘦脸、大眼、瘦鼻等功能

为了满足市场不断升级的美颜需求,美摄科技凭借其在人脸识别与图像处理领域的深厚积累,推出了一款高效且易集成的人脸美型SDK解决方案。该方案旨在通过先进的算法和丰富的调节功能,帮助企业客户快速实现用户脸部形状的精准美化,进而…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可以打开多个…

微信小程序开发学习笔记——3.2page内的onload及data差值表达式

>>跟着b站up主“咸虾米_”学习微信小程序开发中,把学习记录存到这方便后续查找。 课程连接:https://www.bilibili.com/video/BV19G4y1K74d?p16&vd_source9b149469177ab5fdc47515e14cf3cf74 一、注册页面 https://developers.weixin.qq.com…

C#之WPF学习之路(2)

目录 控件的父类 DispatcherObject类 DependencyObject类 DependencyObject 类的关键成员和方法 Visual类 Visual 类的主要成员和方法 UIElement类 UIElement 类的主要成员和功能 FrameworkElement类 FrameworkElement 类的主要成员和功能 控件的父类 在 WPF (Windo…

idea 打不开项目 白屏

使用IDEA打开项目, 不知名原因崩溃了, 直接出现缩略图白屏。 解决过程: 尝试过重启IDEA,重启过电脑,重新引入相同项目(使用不同路径,存在缓存记录,依然打不开)&#xff…

亿道丨三防平板pad丨三防平板是指哪三防丨三防工业级平板电脑

三防工业级平板电脑成为许多行业中的重要工具。本文将介绍三防工业级平板电脑的特点以及其在各个领域中的广泛应用。 三防工业级平板电脑的特点 三防工业级平板电脑是指具备防水、防尘和防震功能的平板电脑。这些特点使得它们能够在恶劣环境中工作,如沙尘飞扬的工地…

easyexcel写入long类型数据精度丢失

1. 前言 在使用easyExcel导出Excel中 发现 long类型的数据格式精度丢失了 问题如下 尾数都成了00000 精度发生了丢失 2. 解决 将long类型的字段转成String 写入到Excel中增加解析器 LongStringConverter 例如 /*** 文件导出** param outputStream outputStream* param cla…

【Rust敲门砖】 Windows环境下配置及安装环境

一、安装C环境 rust底层是依赖C环境的连接器,所以需要先安装C/C编译环境, 有两种选择:安装微软的msvc或者安装mingw/cygwin。 如果使用msvc的Visual Studio,只需要安装好C/C编译环境,然后一路默认就行了,缺点是体积比较大,下载安…

外包干了3个月,技术退步明显

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…