软考中级软件设计师——UML(统一建模语言)篇
UML的词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。
一、事物
UML 事物是模型中的基本元素,分为 结构事物、行为事物、分组事物、注释事物。
1. 结构事物
-
类(Class):具有相同属性和方法的对象的抽象(如
Student
类)。 -
接口(Interface):定义一组操作的契约(如
Payment
接口)。 -
协作(Collaboration):一组对象及其交互,共同实现特定功能(如
订单处理
协作,包含订单、支付、库存等对象的交互)。 -
用例(Use Case):系统功能的描述(如
用户登录
用例)。 -
构件(Component):可重用的软件模块(如
.dll
文件)。 -
制品(Artifact):物理文件或文档(如源代码文件
User.java
、配置文件config.xml
)。 -
节点(Node):物理设备或运行时资源(如
服务器
)。 -
主动类(Active Class):拥有独立线程的类(如
多线程控制器
)。
2. 行为事物
-
交互(Interaction):对象间的消息传递(如方法调用)。
-
状态机(State Machine):对象状态的变化(如订单状态从
待支付
到已支付
)。 -
活动(Activity):流程中的步骤(如业务流程中的
审核
步骤)。
3. 分组事物
-
包(Package):对模型元素的分组(如将
用户管理模块
放入一个包)。
4. 注释事物
-
注释(Note):对模型的解释性说明(如附加的文字描述)。
二、 关系
UML 关系描述事物之间的关联方式。
关系类型 | 描述及示例 | 表示符号 |
---|---|---|
关联(Association) | 对象间的结构关系,它描述了一组链,链是对象之间的连接。 | 实线,可带箭头(导航方向) |
依赖(Dependency) | 依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。 | 虚线箭头(指向被依赖方) |
泛化(Generalization) | 泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。 | 空心三角箭头(指向父类) |
实现(Realization) | 实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。在两种情况下会使用实现关系:一种是在接口和实现它们的类或构件之间:另一种是在用例和实现它们的协作之间。 | 空心三角箭头 + 虚线(指向接口) |
聚合(Aggregation) | 弱“整体-部分”关系(如 汽车 与 轮胎 ) | 空心菱形 + 实线(菱形在整体端) |
组合(Composition) | 强“整体-部分”关系(如 公司 与 部门 ) | 实心菱形 + 实线(菱形在整体端) |
注意:
聚合:部分和整体的生命周期不一致,整体消失了,部分仍然存在部分可以脱离整体存在。
组合:部分和整体的生命周期一致,整体消失了,部分也消失了,部分不可以脱离整体而存在。
三、UML 的图
UML 定义了 13 种图,分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时图。序列图、通信图、交互概览图和计时图均被称为交互图。
1. 类图(Class Diagram)
类图(Class Diagram)展现了一组对象、接口、协作和它们之间的关系。 类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图。
核心元素:
-
类:矩形框,分三栏(类名、属性、方法)。
-
关系:关联(实线)、依赖(虚线箭头)、泛化(空心三角箭头)、实现(虚线空心三角箭头)、聚合(空心菱形)、组合(实心菱形)。
当对系统的静态设计视图建模时,通常以下述3种方式之一使用类图:
- 对系统的词汇建模。
- 对简单的协作建模。
- 对逻辑数据库模式建模。
2. 用例图(Use Case Diagram)
用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。
核心元素:
-
参与者:小人图标(如
用户
、管理员
)。 -
用例:椭圆框(如
登录
、支付
)。 -
关系:包含(
<<include>>
)、扩展(<<extend>>
)、泛化。
注意:
- 一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例。
- 关联是参与者和用例之间的关系。
- 包含是用例和用例之间的关系。
- 扩展是用例和用例之间的关系。
- 泛化是参与者和参与者之间的关系也是用例和用例之间的关系。
当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图:
(1)对系统的语境建模。
(2)对系统的需求建模。
3. 序列图(Sequence Diagram)
序列图是场景(Scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
把参加交互的对象放在图的上方,沿水平方向排列。通常把发起交互的对象放在左边,下级对象依次放在右边。然后,把这些象发送和接收的消息沿垂直方向按时间顺序从上到下放置。
核心元素:
-
生命线(Lifeline):垂直虚线表示对象存活时间。
-
消息(Message):箭头表示同步消息(实线箭头)、异步消息(虚线箭头)、返回消息(虚线返回箭头)。
-
激活条(Activation Bar):矩形条表示对象执行操作的时间段。
序列图有两个不同于通信图的特征:
- 序列图有对象生命线。
- 序列图有控制焦点。
4. 活动图(Activity Diagram)
活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。
核心元素:
-
活动节点:圆角矩形表示具体操作
-
决策节点:菱形
-
分叉/汇合节点:粗线表示并行流程的开始与结束。
-
泳道(Swimlane):纵向分区,区分不同角色或模块的责任。
活动图一般包括活动状态和动作状态、转换和对象。
活动图可以表示分支、合并、分岔和汇合。
当对一个系统的动态方面建模时,通常有两种使用活动图的方式:
- 对工作流建模
- 对操作建模。
5. 状态图(State Machine Diagram)
状态图展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。
状态是指对象的生命周期中某个条件或者状态,在此期间对象将满足某些条件、执行某些活动或等待某些事件,是对象执行了一系列活动的结果。
嵌套在另外一个状态中的状态称为子状态,含有子状态的状态称为组合状态。
转换是两个状态之间的一种关系,表示对象将在源状态中执行一定的动作,并在某个特定事件发生而且某个特定的警界(监护)条件满足时进入目标状态。
动作是一个可执行的原子操作,是不可中断的,其执行时间是可忽略不计的。
在状态转换图中定义的状态主要有:初态(即初始状态)终态(即最终状态)和中间状态初态用一个黑圆点表示,终态用黑圆点外加一个圆表示,状态图中的状态用一个圆角四边形表示(可以用两条水平横线把它分成上、中、下3个部分。上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名称和值,这部分是可选的;下面部分是活动表这部分也是可选的),状态之间为状态转换,用一条带箭头的线表示。带箭头的线上的事件发生时,状态转换开始(有时也称之为转换“点火”或转换被“触发”)。一张状态图中只能有一个初态,而终态可以没有,也可以有多个。
状态中的活动表的语法格式如下:事件名(参数表)/动作表达式
三种标准事件:entry,exit,do
entry:入口动作,进入状态,立即执行
exit:出口动作,退出状态,立即执行
do:内部活动,占有有限时间,并可以中断的工作
事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。
- 转换包括两个状态。
- 事件触发转换(迁移)。
- 活动(动作)可以在状态内执行,也可以在状态转换(迁移)时执行。
时间(time)事件
时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件。例如到达某一时间或经过了某一时间段。用关键字When 或After表示。
6. 构件图(Component Diagram)
构件图展现了一组构件之间的组织和依赖。
核心元素:
-
构件:矩形框左侧加两个小矩形(如
用户服务组件
)。 -
接口:空心圆(提供接口)、半圆(需求接口)。
-
依赖关系:虚线箭头指向被依赖构件。
7. 部署图(Deployment Diagram)
部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。
核心元素:
-
节点(Node):立方体表示物理设备(如
Web服务器
、数据库服务器
)。 -
构件实例:节点内部标注部署的构件(如
UserService
部署在应用服务器
)。 -
通信路径:实线表示节点间的连接(如 TCP/IP 协议)。
部署图展现了系统的软件和硬件之间的关系在实施阶段使用。
8.对象图(Object Diagram)
对象图(Object Diagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链。
在对系统的静态设计视图或静态进程视图建模时,主要是使用对象图对对象结构进行建模。对象结构建模涉及在给定时刻抓取系统中对象的快照。对象图表示了交互图表示的动态场景的一个静态画面,可以使用对象图可视化、详述、构造和文档化系统中存在的实例以及它们之间的相互关系。
9.通信图(Communication Diagram)
通信图强调收发消息的对象的结构组织,在早期的版本中也被称作协作图。通信图强调参加交互的对象的组织。产生一张通信图,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和收的消息来修饰这些链。
通信图有两个不同于序列图的特性:
- 通信图有路径,需要显式地表示以下几种链的路径:local(局部)、parameter(参数)、global(全局)以及self(自身),但不必表示 association(关联)。
- 通信图有顺序号。
通信图展现了对象之间的小溪流及其顺序。
10.UML总和
- 静态建模:类图、对象图、用例图
- 动态建模:序列图(顺序图,时序图)、通信图(协作图)、状态图、活动图
- 物理建模:构件图(组件图)、部图
- 交互图:序列图(顺序图,时序图)、:通信图(协作图)
相关文章:

软考中级软件设计师——UML(统一建模语言)篇
UML的词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。 一、事物 UML 事物是模型中的基本元素,分为 结构事物、行为事物、分组事物、注释事物。 1. 结构事物 类(Class&#x…...

TSN网络与DIOS融合:破解煤矿井下电力系统越级跳闸难题
一、引言 1.1 研究背景与意义 在现代煤矿生产中,井下电力系统作为整个煤矿生产的动力核心,其重要性不言而喻。煤矿井下的各类机械设备,如采煤机、刮板输送机、通风机、排水泵等,都依赖稳定的电力供应才能正常运行。电力系统的稳定…...
python 实现文件批量重命名
以下是使用Python实现文件批量重命名的示例代码。该代码可以将指定目录下的文件按照一定规则进行重命名,这里以将文件重命名为带有编号的文件名为例: import osdef batch_rename(directory):if not os.path.isdir(directory):print(...

SierraNet协议分析使用指导[RDMA]| 如何设置 NVMe QP 端口以进行正确解码
在解码RoCEv2数据包(包括TCP RDMA和RoCE RDMA)时,若捕获的跟踪数据无法正确解码,通常需要执行特定的解码步骤。对于RoCE RDMA跟踪数据的处理,分析器主要采用两种方式获取必要信息以实现数据包解码: 首先&am…...
Nodejs核心机制
文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…...
Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题
各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…...
【Bluedroid】HID DEVICE 连接的源码分析
本文分析Android Bluetooth协议栈中HID device设备连接流程的完整实现,从应用层接口到协议栈底层的交互细节。通过关键函数(如connect()、BTA_HdConnect()、HID_DevConnect()等)的代码解析,重点关注btif、bta、HID协议栈三层的协同机制,揭示BTA_HD_CONN_STATE_EVT事件传递…...
【AI大模型】SpringBoot整合Spring AI 核心组件使用详解
目录 一、前言 二、Spring AI介绍 2.1 Spring AI介绍 2.2 Spring AI主要特点 2.3 Spring AI核心组件 2.4 Spring AI应用场景 2.5 Spring AI优势 2.5.1 与 Spring 生态无缝集成 2.5.2 模块化设计 2.5.3 简化 AI 集成 2.5.4 支持云原生和分布式计算 2.5.5 安全性保障…...
Redis的操作以及Spring Cache框架
Redis是一种开源的内存数据结构存储,用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。在Spring应用中,可以使用Spring Cache框架结合Redis来实现高效的缓存机制。本文将详细介绍Redis的基本操作以及…...
C#输出参数:使用、要求与新特性
在C#编程中,输出参数是一种强大的工具,用于从方法体内把数据传出到调用代码。它的行为与引用参数类似,但也有自己的特点。今天我们就来详细了解一下C#中的输出参数。 输出参数的基本要求 修饰符的使用 输出参数必须在声明和调用中都使用修…...

信号处理基础
一、目的 掌握信号处理的基本思想,理解采样信号的频谱特性,加强信号采样与重建的有关基本概念的理解,深入理解线性时不变系统输出与输入的关系,了解数字信号采样率转换前后信号频谱的特征。 二、内容与设计思想 1、给定序列,绘…...

小刚说C语言刷题—1058 - 求出100至999范围内的所有水仙花数
1.题目描述 2.参考代码(C语言版) #include <stdio.h> int main(void) { int i; int bai,shi,ge; for( i100;i<999;i) { baii/100; shii/10%10; gei%10; if((bai*bai*bai)(shi*shi*shi)(ge*ge*ge)i) printf("%d\n",i); } return 0; } 今天内容到此结束&…...
cat、more和less的区别
在 Linux 系统中,cat、more 和 less 都是用于查看文件内容的命令,但它们在功能和使用场景上有显著区别。以下是它们的详细对比: 1. cat 命令 功能: - 直接输出整个文件:一次性将文件内容全部显示在终端上ÿ…...

深入解析Docker:核心架构与最佳实践
文章目录 前言一、Docker 解决了什么问题?二、Docker 底层核心架构2.1 Docker 引擎的分层架构2.2 镜像的奥秘:联合文件系统(UnionFS)2.3 容器隔离的核心技术2.3.1 命名空间2.3.2 控制组(Cgroups)2.3.3 内核…...
HVV面试题汇总合集
应急响应的命令 Linux ps -aux 查看进程 netstat -antlp 查看端口 top查看 cpu使用情况 Windows tasklist 查看进程 netstat -an 查看端口struts2原理特征 原理: 045:默认的content-type解析器会把用户传来的数据直接当成代码执行,造成rce 特征:ognl表达式&…...
什么是深度神经网络
深度神经网络(DNN)详细介绍 1. 定义与核心原理 深度神经网络(Deep Neural Network, DNN)是一种具有多个隐藏层的人工神经网络模型,其核心在于通过层次化的非线性变换逐步提取输入数据的高层次抽象特征。与浅层神经网络相比,DNN的隐藏层数量通常超过三层,例如VGGNet、R…...
Node.js 24.0 正式发布:性能跃升与开发体验全面升级
Node.js v24.0.0 震撼发布!V8 13.6、npm 11、权限模型稳定化等重磅更新 2025年5月6日 —— Node.js 社区迎来重大里程碑!Node.js v24.0.0 正式发布,带来一系列激动人心的新特性、性能优化和 API 改进。本次更新涵盖 V8 JavaScript 引擎升级至…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...
Python Cookbook-7.10 在 MySQL 数据库中储存 BLOB
任务 想把一个二进制的大对象(BLOB)存入MySQL数据库 解决方案 MySQLdb 模块并不支持完整的占位符,不过可以使用模块的escape_string 函数来解决: import MySQLdb,cPickle #连接到数据库,用你的本机来测试数据库,并获得游标 connection = MySQLdb.connect(db = "tes…...

Edge浏览器PDF字体显示错误
Edge浏览器PDF字体显示错误 软件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 专业增强版2021问题描述 在Word中使用多级列表自动编号, 并使用Word软件自带的导出为PDF文件功能, 在Word中显示正常的数字, 在Edge中查看PDF将会出现渲染错误的现象,…...
计算机网络与多线程同步机制详解
一、IP地址与子网划分 在互联网世界中,IP地址就像是每个设备的"门牌号",它使得数据包能够准确送达目的地。IP地址的划分与管理就像城市的规划,通过合理的子网划分,能够高效地管理网络资源。 子网掩码的工作原理 子网…...

Python训练营打卡——DAY22(2025.5.11)
复习日 学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号——来自灾难的机器学习 数据来源: kaggle泰坦里克号人员生还预测 挑战 泰坦尼克号沉没是历史上最臭名昭著的海难之一。 1912年4月15日,在被普…...

实战项目4(05)
目录 任务场景一 【sw1配置】 任务场景二 【sw1配置】 【sw2配置】 任务场景一 按照下图完成网络拓扑搭建和配置 任务要求: 1、在交换机SW1的E0/0/1端口进行设置,实现允许最多两个电脑可以正常进行通信。 2、在交换机SW1的E0/0/2端口进行设置&…...
快速上手Pytorch Lighting框架 | 深度学习入门
快速上手Pytorch Lighting框架 | 深度学习入门 前言参考官方文档 介绍快速上手基本流程常用接口LightningModule\_\_init\_\_ & setup()\*\_step()configure_callbacks()configure_optimizers()load_from_checkpoint Trainer常用参数 可选接口LoggersTensorBoard Logger Ca…...

C++学习之STL学习
在经过前面的简单的C入门语法的学习后,我们开始接触C最重要的组成部分之一:STL 目录 STL的介绍 什么是STL STL的历史 UTF-8编码原理(了解) UTF-8编码原理 核心编码规则 规则解析 编码步骤示例 1. 确定码点范围 2. 转换为…...

3. 仓颉 CEF 库封装
文章目录 1. capi 使用说明2. Cangjie CEF2. 1实现目标 3. 实现示例 1. capi 使用说明 根据上一节 https://blog.csdn.net/qq_51355375/article/details/147880718?spm1011.2415.3001.5331 所述, cefcapi 是libcef 共享库导出一个 C API, 而以源代码形式分发的 li…...

LabVIEW多通道并行数据存储系统
在工业自动化监测、航空航天测试、生物医学信号采集等领域,常常需要对多个传感器通道的数据进行同步采集,并根据后续分析需求以不同采样率保存特定通道组合。传统单线程数据存储方案难以满足实时性和资源利用效率的要求,因此设计一个高效的多…...

谷歌在即将举行的I/O大会之前,意外泄露了其全新设计语言“Material 3 Expressive”的细节
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

十三、基于大模型的在线搜索平台——整合function calling流程
基于大模型的在线搜索平台——整合function calling流程 一、function calling调用总结 上篇文章已经实现了信息抓取能力,并封装成了函数。现在最后一步将能力转换为大模型可以调用的能力,实现搜索功能就可以了。这篇主要实现大模型的function calling能…...

力扣70题解
记录 2025.5.8 题目: 思路: 1.初始化:p 和 q 初始化为 0,表示到达第 0 级和第 1 级前的方法数。r 初始化为 1,表示到达第 1 级台阶有 1 种方法。 2.循环迭代:从第 1 级到第 n 级台阶进行迭代: p 更新为前…...