【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. UML概述
2.1 UML的分类与功能
2.2 UML的语法与各图关系
3. 四种图的概述
3.1 状态图
3.2 活动图(Activity Diagram)
3.3 构件图(Component Diagram)
3.4 部署图(Deployment Diagram)
4. 状态图
4.1 状态图概要
4.2 状态图中的事物及解释
4.3 状态的可选活动表
4.4 实例
(1)网上银行登录系统
5. 活动图
5.1 活动图概要
5.2 活动图和状态图的关系
5.3 活动图事物编辑
5.4 活动图关系
5.5 实例
编辑
6. 构件图
6.1 构件图概要
6.2 构件图中的事物及解释
6.3 构件图中的关系及解释
6.4 实例
实例1
实例2
7. 部署图
7.1 部署图概要
7.2 部署图中的事物及解释编辑
7.3 部署图中的关系及解释
7.4 实例
实例1
实例2
7.5 部署图与构件图的关系
8. 总结
1. 前言
2. UML概述
所谓UML(Unified Modeling Language,统一建模语言),一种用来对软件密集系统进行可视化建模的语言。
这样的概念大概解释了UML是什么,不过还不够直观。
我们可以换个问题,UML做到了什么,让人们愿意为之喝彩?
答案就是,它统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。它是一种通用的建模语言,可以为许多面向对象建模方法的用户广泛使用。
如此一来,UML的本质也就呼之欲出了。UML的本质就是为了交流。
一句话:一个UML就能完成整个软件开发中的交流需要
2.1 UML的分类与功能
UML2.0一共有12种图形(UML1.5定义了9种,2.0增加了3种)。
分别是:用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图9种,包图、组合结构图、交互概览图3种。
“UML无用论”在很多年前就被提了出来,更是引发了业内不少争议。有用户将它捧上天,甚至“封神”,也有人斥之为垃圾,甚至称其“反人类”。
那么问题来了,UML 真的无用吗?或者用题主的话来说,UML 还有用吗?
我想先说自己的判断:UML 依然有用。
之所以这么判断,主要基于以下三点事实:
第一,图比代码更清晰
在复杂需求中,UML图是非常必要的。
用例图描述系统的外部交互、序列图描述系统的内部交互、状态图描述系统的动态特性、部署图描述系统的物理节点、类图与对象图描述依赖关系......
所有的图都是协助团队策划稿能源更高效地厘清问题,掌握知识,高效解决问题的。
试问下,在敏捷开发中,如果没有流程图、序列图、状态图进行辅助,你如何在代码过程中保证业务流程、系统前后端、多个系统切换开发做到敏捷高效?
在敏捷开发时,面对稍复杂点的需求,如果要求团队提前用UML图厘清问题,后续填坑可以少很多。
第二,“假敏捷开发”太多
正如@萝魏紫 所言,中国假敏捷太多了,以敏捷为借口少写甚至不写文档,以至于大量项目在本不应出问题的沟通层面出现大量问题,没有统一的标准,沟通不出问题才怪。
UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。
不过,我们也必须注意到,UML不是万能的,但是在系统研发中的沟通作用,效果还是比较好的。
第三,UML 在业界依然在被应用
UML的实际应用例子,大家在这个问答中可以找到不少:
比如,@Milo Yip 表示,“腾讯没有统一、从上而下的软件工程方法论,毕竟业务差异很大。但在各种文档及简报中也经常以 UML 图来呈现一些信息,算是一种辅助沟通的方法。”另外,“我在面试时会让候选人做一些简单设计,用 UML 最好,不会的也可用他熟悉的编程语言表示。”
@fantiny 也举了自己前公司产品ExchangeUSE的例子,据介绍,当时UML在前期需求分析和架构设计阶段起到一定的作用,包括需求分析与共通化整理,系统模块化分析工具,架构设计的交流工具,实现合理性的分析工具。
2.2 UML的语法与各图关系
各图关系:
UML语法描述:
3. 四种图的概述
这一部分先对 状态图、活动图、构件图和部署图 做一个简单的概述。
3.1 状态图
状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成。
状态图描述对象:一个类对象
状态图组成:一个类对象的各种状态、状态转化动作
3.2 活动图(Activity Diagram)
- 活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动
- 活动图描述了一组顺序的或并发的活动
状态图和活动图:
1、状态图针对每一个类
2、活动图针对整合算法系统
3.3 构件图(Component Diagram)
构件图为系统的构件建模型—构件即构造应用的软件单元—还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响。
构件图(Component Diagram) 是 UML(统一建模语言)中用于描述系统物理构件及其相互关系的图。它展示了系统中各个“构件”(如可执行程序、库、模块等)之间的关系,以及它们如何通过接口进行交互。构件图通常用于描述系统的静态结构,尤其是关注系统的物理实现层次。
构件图的主要元素:
构件(Component):表示系统中的一个物理模块或部件,它是一个可执行的或可部署的单位。构件可以是程序文件、库文件、Web 服务、数据库、或者任何其他具有独立功能的部分。
- 符号:构件通常用一个矩形表示,矩形的右上角有一个小的折角。
接口(Interface):构件之间的交互通常通过接口完成。接口定义了构件提供的服务或其所需的服务。
- 符号:接口通常是一个小圆圈或带有名字的“半圆”。
依赖关系(Dependency):构件图中,构件之间可能有依赖关系,这表示一个构件依赖于另一个构件的功能或服务。
- 符号:依赖关系通常用带箭头的虚线表示,箭头指向被依赖的构件。
端口(Port):端口是构件和外界进行交互的地方,通常用来定义通过接口暴露的功能。
- 符号:端口通常表示为构件矩形的一部分,形状如小小的矩形或圆圈。
3.4 部署图(Deployment Diagram)
部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配。
4. 状态图
4.1 状态图概要
- 说明对象在它的生命期中响应事件所经历的状态序列,以及它们对那些事件的响应。
- 揭示Actor、类、子系统和组件的复杂特性。 为实时系统建模。
- 对象的状态是指在这个对象的生命期中的一个条件或状况,在此期间对象将满足某些条件、执行某些活动,或等待某些事件。
- 转移是由一种状态到另一种状态的迁移。这种转移由被建模实体内部或外部事件触发。
- 对一个类来说,转移通常是调用了一个可以引起状态发生重要变化的操作的结果。
4.2 状态图中的事物及解释
4.3 状态的可选活动表
4.4 实例
(1)网上银行登录系统
5. 活动图
5.1 活动图概要
- 描述系统的动态行为。
- 包含活动状态(ActionState),活动状态是指业务用例的一个执行步骤或一个操作,不是普通对象的状态。
- 活动图适合描述在没有外部事件触发的情况下的系统内部的逻辑执行过程;否则,状态图更容易描述。
- 类似于传统意义上的流程图。
- 活动图主要用于:
+ 业务建模时,用于详述业务用例,描述一项业务的执行过程;
+ 设计时,描述操作的流程。
5.2 活动图和状态图的关系
- 活动图和状态图都体现状态在活动中变化。
- 状态图是一个类对象在活动中状态发生变化。
- 活动图是整个系统在活动中状态发生变化。
5.3 活动图事物
5.4 活动图关系

5.5 实例
-
本活动图描述一个处理订单的用例执行过
(1)执行setup order
(2)根据order的类型是执行不同的分支:
- single order:执行assign seat、charge credit card
- subscription:同时执行assignseats、debit account或 award bonus
- single order与subscription两步可同时进行(3) 最后mail packet。
6. 构件图
6.1 构件图概要
- 构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。
- 构件图通过对构件间依赖关系的描述来估计对系统构件的修改给系统可能带来的影响。
6.2 构件图中的事物及解释

- 可替换的物理部分包括软件代码、脚本或命令行文件,也可以表示运行时的对象,文档,数据库等。
- 节点(node)是运行时的物理对象,代表一个计算机资源。具体请参见教程“部署图(deployment diagram)”部分。
6.3 构件图中的关系及解释

6.4 实例
实例1
- 图中的构件名称是Dictionary字典。
- 该构件向外提供两个接口,即两个服务Spell-check拼写检查、Synonyms同义词。

实例2
- 图中“Planner计划者”构件向外提供一个“update更新”接口服务。
- 同时,该构件要求外部接口提供一个“Reservations预定”服务。

7. 部署图
7.1 部署图概要
- 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。
- 如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。
- 部署图的两种表现形式:实例层部署图和描述层部署图(会在后面的实例中给出)。
7.2 部署图中的事物及解释
7.3 部署图中的关系及解释

7.4 实例
实例1
- 实例层部署图描述各节点和它们之间的连接。
- 本图中的信息与上张描述层部署图中的内容是相互对应的。
- 图中的关系是各个节点之间存在的通信关系。

实例2
- 描述层部署图表示了系统中的各节点和每个节点包含的构件。
- 图中包括的各种关系如下:
- 通信链关系(不带箭头的直线)
- TicketServe票服务器与Kiosk信息厅之间存在一对多的通信关联;与SalesTerminal售票终端也存在一对多的通信关联;
- 依赖关系(带箭头的虚线)
- TicketSeller售票构件依赖CreditCardCharges信用卡付款构件和TicketDB票数据库构件提供的服务。
- 通信链关系(不带箭头的直线)

7.5 部署图与构件图的关系
部署图(Deployment Diagram) 和 构件图(Component Diagram) 都是 UML 中用于描述系统的静态结构,但它们关注的层次不同,功能上也有所区别。
-
构件图 主要关注系统的逻辑结构和软件层面,描述系统中的各个构件(如模块、库、服务等)及其相互关系,强调模块间的依赖、接口和交互。
-
部署图 主要关注系统的物理部署和硬件层面,展示节点(如服务器、工作站、设备等)之间的关系,并标明哪些构件部署到哪些节点上。
关系:
- 构件图 描述的是系统的软件组件及其内部结构,而 部署图 描述的是这些组件如何在物理硬件上部署和运行。
- 构件图 中的构件通常会在 部署图 中被映射到一个或多个节点上,显示它们的实际部署情况。
- 例如,构件图中的业务逻辑组件可能会被部署到一个服务器节点上,而数据库组件则可能被部署到另一台数据库服务器节点。
8. 总结
本文到这里就结束啦~~
目前已经完成:
【软件工程】一篇入门UML建模图(类图)_uml图教程-CSDN博客
【软件工程】一篇入门UML建模图(用例图、对象图、顺序图与协作图)-CSDN博客
本篇讲述:状态图、活动图、构件图、部署图
如果觉得对你有帮助,友友们可以点个赞,收个藏呀~

相关文章:
【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...
应急响应--流量分析
(一)Cobalt Strike流量特征分析 1.HTTP特征 源码特征: 在流量中,通过http协议的url路径,在checksum8解密算法计算后,32位的后门得到的结果是92,64位的后门得到的结果是93,该特征符…...
name ‘bare_metal_version‘ is not mamba_ssm安装
目录 解决方法: 测试ok: mamba_ssm安装报错,windows 安装时, pip install mamba_ssm name bare_metal_version is not defined mamba代码地址: https://github.com/state-spaces/mamba/tree/main 解决方法&…...
自然语言处理:高斯混合模型
介绍 大家好,博主又来给大家分享知识了,今天给大家分享的内容是自然语言处理中的高斯混合模型。 在自然语言处理这个充满挑战与机遇的领域,我们常常面临海量且复杂的文本数据。如何从这些数据中挖掘出有价值的信息,对文本进行有…...
【C++指南】一文总结C++类和对象【中】
🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C类和对象的语法知识。注意:在本章节中,小编会以Date类举例 👍 如果觉得…...
再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向
三年前我们通过 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的内部实现,而时隔三年之后,如今Riverpod 的主流模式已经是注解,那今天就让我们来聊聊 riverpod 的注解有什么特殊之处。 前言 在此之前,我们需要先回忆…...
Go语言集成DeepSeek API和GoFly框架文本编辑器实现流式输出和对话(GoFly快速开发框架)
说明 本文是GoFly快速开发框架集成Go语言调用 DeepSeek API 插件,实现流式输出和对话功能。为了方便实现更多业务功能我们在Go服务端调用AI即DeepSeek接口,处理好业务后再用Gin框架实现流失流式输出到前端,前端使用fetch请求接收到流式的mar…...
docker不停机部署
背景 最近做大疆项目时,后台更新部署时,机场和无人机就会掉线。设备自动重连注册时间比较长,应用长时间不可用。所以需要灰色发布服务。docker-compose的swarm模式可解决此问题。 服务构建脚本Dockerfile # 使用官方Java基础镜像ÿ…...
ZLG嵌入式笔记 | ZLG核心板散热设计指引
在嵌入式系统设计中,散热是影响处理器性能与稳定性的关键问题。本文聚焦于高端嵌入式处理器的散热设计,探讨核心板的热设计与系统级热设计方法,以及导热材料和布局的建议,为解决高温问题提供参考。 用高端嵌入式处理器设计系统&am…...
[Java]使用java进行JDBC编程
首先要从中央仓库下载api(类似驱动程序),为了链接java和mysql 下载jar包,需要注意的是jar包的版本要和mysql保持一致 下面是新建文件夹lib,把jar包放进去,并添加为库 sql固定的情况下运行 import com.mysql.cj.jdbc.MysqlDataSo…...
MySQL进阶-关联查询优化
采用左外连接 下面开始 EXPLAIN 分析 EXPLAIN SELECT SQL_NO_CACHE * FROM type LEFT JOIN book ON type.card book.card; 结论:type 有All ,代表着全表扫描,效率较差 添加索引优化 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】࿰…...
Ubuntu22.04修改root用户并安装cuda
由于本人工作原因,经常会遇到需要给ubuntu打显卡驱动的问题,虽然说不难吧,但是耐不住机器多,重复多次也就烦了,于是抽出了一点时间,并且在deepseek的帮助之下,写了一个自动安装驱动的脚本&#…...
fiddler+雷电模拟器(安卓9)+https配置
一、fiddler配置 1、开启https代理 2、根证书安装:导出证书系统安装 二、模拟器设置 1、设置网络桥接模式 【点击安装】提示安装成功后保存即可 2、开启root(开启adb远程调试) 3、开启磁盘写入 4、设置WLAN代理 5、证书安装:物…...
STM32-SPI通信协议
目录 一:什么是通信协议? 二:电路结构 1.硬件电路 2:移位 3:时序图 4.交换字节 三:W25Q64简介 硬件电路:编辑 存储器地址划分 Dlash操作注意事项 状态寄存器 SPI指令集 四&am…...
【CentOS】搭建Radius服务器
目录 背景简介:Radius是什么?Radius服务器验证原理搭建Radius服务器环境信息yum在线安装配置FreeRADIUS相关文件clients.conf文件users文件重启服务 验证 参考链接 背景 在项目中需要用到Radius服务器作为数据库代理用户的外部验证服务器,做…...
Vue中自定义指令:ClickOutside(点击当前模块外的位置)
应用场景 假设我们有一个下拉框组件,当下拉框展开的时候,点击下拉框之外的元素可以自动关闭下拉框。 一 ClickOutside代码示例 在vue3中使用ClickOutside // 导入自定义指令 import { ClickOutside as vClickOutside } from element-plus;// 绑定指令…...
如何在rust中解析 windows 的 lnk文件(快捷方式)
一、从标题二开始看😁 这些天在使用rust写一个pc端应用程序,需要解析lnk文件获取lnk的图标以及原程序地址,之前并没有过pc端应用程序开发的经验, 所以在广大的互联网上游荡了两天。额🥺 今天找到了这个库 lnk_parse很…...
2019年蓝桥杯第十届CC++大学B组真题及代码
目录 1A:组队(填空5分_手算) 2B:年号字符(填空5分_进制) 3C:数列求值(填空10分_枚举) 4D:数的分解(填空10分) 5E:迷宫…...
奇安信 2025 年护网蓝队初选笔试题(附答案解析)
🔥 爆款 CSDN 题库 | 超全护网蓝队笔试真题 | 含详细答案解析 🔥 熬夜为大家整理了 奇安信 2025 年护网蓝队初选笔试题,(关注我我会持续更新)涵盖 SQL 注入、Web 安全、渗透测试、二进制安全 等核心知识点,…...
jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)
jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版(需要对 Linux 操作有一定基础)二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址: https://www.oracle.com/java/technologies/downloads/#java2…...
第6章 定时器计数器
目录 6.1 定时计数器的结构框图 6.2 定时器的控制字 6.2.1 TMOD:工作方式控制寄存器 6.2.2 定时/计数器控制寄存器TCON 6.3 定时/计数器的4种工作方式 6.3.1 方式0、方式1(13位、16位定时计数方式) 6.3.2 方式2(常数自动重装入) 6.3.3 方…...
回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测
回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测回归效果基本介绍GWO-BP-Adaboost:基于灰狼算法优化BP神经网络结合Adaboost思想…...
蓝桥杯真题0团建dfs+哈希表/邻接表
dfs邻接表储存或者哈希表的运用,考察我们对数据的存储 本题核心就是在求从根节点开始的两棵树相同的最长序列,首先确定用dfs进行深搜,对于节点的形式可以用邻接表,邻接矩阵,哈希表来进行存储数据。下面看代码 邻接表 …...
系统架构的评估的系统的质量属性
体系结构苹果可以针对一个体系结构,也可以针对一组体系结构。 体系结构评估过程中,评估人员所关注的是系统的质量属性,所有评估方法所普遍关注的质量属性有以下几个:性能、可靠性(容错,健壮性)…...
论文阅读:基于超图高阶表示的WSI生存预测
Generating Hypergraph-Based High-Order Representations of Whole-Slide Histopathological Images for Survival Prediction 文章目录 论文介绍快速阅读摘要1 引言2 相关工作2.1 生存分析2.2 超图学习的准备工作 3 方法3.1 patch采样和低级特征提取3.2 多超图学习3.2.1 多超…...
NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板
📌 关系抽取(Relation Extraction, RE)任务训练示例 本示例展示如何训练一个关系抽取模型,以识别两个实体之间的关系。 1️⃣ 任务描述 目标:从文本中提取两个实体之间的语义关系,例如 “人物 - 组织”、“药物 - 疾病”、“公司 - 创始人” 等。输入:句子 + 标注的实…...
27. Harmonyos Next仿uv-ui 组件NumberBox 步进器组件禁用状态
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 文章目录 1. 组件介绍2. 效果展示3. 禁用状态设置3.1 整体禁用3.2 输入框禁用3.3 长按禁用 4. 完整示例代码5. 知识点讲解5.1 禁用状态属性5.2 禁用…...
docker无法pull镜像问题解决for win10
docker无法pull镜像问题解决for win10 问题原因分析解决方法 问题 在win10系统上安装好doker-desktop后ping registry-1.docker.io不同,并且也无法登陆hub.docker.com, 使用docker pull xx也无法正常下载 原因分析 hub.docker.com在2024年5月之后,国内…...
批量将 Excel 转换 PDF/Word/CSV以及图片等其它格式
Excel 格式转换是我们工作过程当中非常常见的一个需求,我们通常需要将 Excel 转换为其他各种各样的格式。比如将 Excel 转换为 PDF、比如说将 Excel 转换为 Word、再比如说将 Excel文档转换为图片等等。 这些操作对我们来讲都不难,因为我们通过 Office 都…...
Node.js调用DeepSeek Api 实现本地智能聊天的简单应用
在人工智能快速发展的今天,如何快速构建一个智能对话应用成为了开发者们普遍关注的话题。本文将为大家介绍一个基于Node.js的命令行聊天应用,它通过调用硅基流动(SiliconFlow)的API接口,实现了与DeepSeek模型的智能对话…...

