【软件工程】一篇入门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. 前…...

AI智能导航站HTML5自适应源码帝国cms7.5模板
源码名称:AI导航站HTML5自适应源码帝国cms7.5模板 开发环境:帝国cms 7.5 安装环境:phpmysql var code "4d33ef8e-9e38-43b9-b37b-38f75944ecc9" 带软件采集,可以挂着自动采集发布,无需人工操作࿰…...
Redis 发布订阅模式详解:实现高效的消息通信
目录 引言 1. 什么是 Redis 发布订阅模式? 1.1 定义 1.2 核心概念 2. Redis 发布订阅的工作原理 2.1 基本流程 2.2 示例 2.3 频道与模式订阅 3. Redis 发布订阅的使用场景 3.1 实时消息通知 3.2 事件驱动架构 3.3 日志收集与分发 3.4 分布式锁与协调 4…...
ES的预置分词器
Elasticsearch(简称 ES)提供了多种预置的分词器(Analyzer),用于对文本进行分词处理。分词器通常由字符过滤器(Character Filters)、分词器(Tokenizer)和词元过滤器&#…...
MPPT与PWM充电原理及区别详解
MPPT(最大功率点跟踪)和PWM(脉宽调制)是太阳能充电控制器中常用的两种技术,它们在原理、效率和适用场景上有显著区别。以下是两者的详细对比: 1. 工作原理 PWM(脉宽调制) 核心机制…...
【AGI】通往AGI的复兴号:模型工具演进与技术路径优化
通往AGI的复兴号:模型工具演进与技术路径优化 一、核心模型与工具技术指标及场景分析1. 边缘计算标杆:GLM-PC(2024年11月)2. 长文本处理王者:DeepSeek R1(2025年1月)3. 轻量化开源代表ÿ…...
java2025年常见设计模式面试题
1. 请解释建造者模式(Builder Pattern)及其应用场景。 答案: 建造者模式用于创建一个复杂的对象,同时允许用户只通过指定复杂对象的类型和内容就能构建它们,隐藏了复杂的构建逻辑。 示例: public class C…...

探索CAMEL:揭开多智能体系统的神秘面纱
在人工智能领域,多智能体系统(Multi-Agent Systems, MAS)一直是一个充满活力和潜力的研究方向。随着大语言模型(LLM)的快速发展,智能体之间的协作与交互变得更加复杂和智能。今天,我们要介绍的是一个名为CAMEL(Communicative Agents for “Mind” Exploration of Large…...

el-pagination的使用说明
<el-paginationv-model:current-page"pageNo" //当前第几页v-model:page-size"pageSize" //每页显示多少条数据:page-sizes"[10, 20, 30]" //控制每页显示的条数:small"true" //控制分页器大小:disabled&quo…...
UniApp 运行的微信小程序如何进行深度优化
UniApp 运行的微信小程序如何进行深度优化 目录 引言性能优化 1. 减少包体积2. 优化页面加载速度3. 减少 setData 调用4. 使用分包加载 代码优化 1. 减少不必要的代码2. 使用条件编译3. 优化图片资源 用户体验优化 1. 优化交互体验2. 预加载数据3. 使用骨架屏 调试与监控 1. …...
Web Worker如何在本地使用
首先了解一下什么是Web Worker Web Worker 是一种在后台线程中运行 JavaScript 的机制,允许你在不阻塞主线程的情况下执行耗时的任务。这对于保持网页的响应性和流畅性非常重要,特别是在需要进行复杂计算或大量数据处理时。 主要特点 多线程࿱…...
[原创](Modern C++)现代C++的关键性概念: 改掉new习惯, 尽情地使用智能分配内存
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …...

C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用
文章目录 1. CopyFile原理函数原型返回值用法示例适用场景 2. CopyFileEx原理函数原型返回值用法示例适用场景 3. 核心区别4. 选择建议5. 常见问题6.区别 在Windows系统编程中,CopyFile和CopyFileEx是用于文件复制的两个API函数。它们的核心区别在于功能扩展性和控制…...

android studio开发文档
android基本样式 1.文本 2.设置文本大小 3.字体颜色 背景 资源文件 xml’引用资源文件 4.视图宽高 5.间距 6.对齐方式 常用布局 1.linearLayout线性布局 2.相对布局 RelativeLayout 3.网格布局GridLayout 4.scrollview滚动视图 Button 点击事件与长按事件 长按 按钮禁用与…...

计算机网络笔记(二)——1.2互联网概述
1.2.1网络的网络 起源于美国的互联网现已发展成为世界上最大的覆盖全球的计算机网络。 下面,我们先来看看关于网络、互连网、互联网(因特网)的一些基本概念。为了方便,后面我们所称呼的"网络"往往就是"计算机网络",而不是电信网或有…...
Ubuntu 24.04.2 允许 root 登录桌面、 ssh 远程、允许 Ubuntu 客户机与主机拖拽传递文件
允许 root 登录桌面 修改 /etc/pam.d/gdm-autologin , /etc/pam.d/gdm-password 加 # 以注释掉 auth required pam_succeed_if.so user ! root quiet_success 允许 root 通过 ssh 登录 修改 /etc/ssh/sshd_config ... #PermitRootLogin prohibit-password PermitRootLogin …...

day18-后端Web开发——Maven高级
目录 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介绍2.2.2 实现 2.3 继承与聚合对比…...

华为hcia——Datacom实验指南——三层交换和ARP的工作原理
什么是三层交换 三层交换是指连接在同一台三层交换机上,不同vlan用户,不同网段ip,通过vlanif接口进行数据交换。 什么是ARP协议 通过网络层的ip地址解析成数据链路层的mac地址。 说白了就是通过目标ip地址去问他对应的mac地址是多少。 A…...

重构谷粒商城09:人人开源框架的快速入门
谷粒商城09——人人开源框架的快速入门 前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶…...
用友 U8出入库查询SQL 连接UNION ALL
-- 销售出库单查询 SELECT 销售出库单 AS 单据类型, a.cCode AS 单号, a.dDate AS 日期, a.cMaker AS 制单人, a.cHandler AS 审核人, a.dVeriDate AS 审核日期, b.cInvCode AS 存货编码, b.iQuantity AS 数量, b.cBatch AS 批号, c.…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...