UML状态图详解

news2024/9/28 21:28:38

上篇文章,介绍了UML的基础知识,并详细介绍了UML中类图的知识点与画法。

本篇,来继续介绍UML中的另一种图——状态图。

1 UML状态图简介

状态图,显示一个状态机,属于UML活动图。

UML具有许多不同类型的图表,包括:

  • 静态图:用例图、类图、包图
  • 动态图:活动图、状态图、时序图、协作图

状态机用于对模型元素的动态行为进行建模,或是说对系统中受事件驱动的方面进行建模。

2 状态图基本要素

2.1 状态

状态是状态机的重要组成部分,描述了状态机所在对象动态行为的执行所产生的结果

2.1.1 初始/最终/选择状态

这三个都是伪状态(Pseudostate):

  • 初始状态:用一个实心圆形表
  • 最终状态:用一个圆圈内嵌实心圆点表示
  • 选择状态:用一个菱形表示,条件分支上方括号内的文字表示监护条件(guard conditions)

2.1.2 一般状态

UML中使用一个圆角矩形表示一个一般状态

状态的组成部分:

  • 名称:由一个字符串组成,用以识别不同状态。可匿名,一般放置在状态图符顶部
  • 入口/出口动作:表示进入/退出这个状态所执行的动作,动作可以是原子动作,也可是动作序列
  • 内部转换:内部转换不会引起状态变化的转换,此转换的触发不会导致状态的入口/出口动作被执行。语法:事件/动作表达式

2.1.3 复合状态

复合状态,或称组合状态,是指包含有子状态的状态。

如下图,“复合状态2”即为复合状态,内部的“状态2-1”、"状态2-2"为子状态。

也可用以下形式表示,将复合状态的内容单独画出。

注:图中的圆圈内一个H字母,表示历史状态,它也是一个伪状态,其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态,可直接进入这个子状态,而不是再次从组合状态的初态开始

2.2 转换

转换(Transition)是两个状态之间的关联。表示对象在第一个状态(Source State)中执行一定的动作,并在某个特定事情发生并且某个特定的条件满足时进入下一个状态(Target State)。

2.2.1 一般转换

一般情况下的状态转换是两个不同状态之间的转换,示意图如下:

转换的组成部分:

  • 源状态(Source State):源状态就是被转换影响的状态。某对象处于源状态,当它接收到触发事件或满足监护条件,就会激活一个转换
  • 目标状态(Target State):转换完成后,对象状态发生变化,这时对象所处的状态就是转换的目标状态
  • 触发事件(Trigger):引起转换的事件,这里所指的事件可以是信号、调用、时间段或状态的一个改变
  • 监护条件(Guard Condition):是一个方括号括起来的布尔表达式,它被放在触发事件的后面。监护条件可以引用对象的属性值和触发事件的参数
  • 结果(Effect):对象状态转移后的结果

2.2.2 自身转换

自身转换(Self-Transitions),是指状态可以有返回自身状态的转换。

2.2.3 本地转换与外部转换

对于复合状态之间的转换,需要注意本地转换(Local transition)与外部转换(External transition)的不同。

上图中,左边是本地转换,右边是外部转换。

  • 上面两个,源状态包含了目标状态,这种情况两种转换的区别在于:本地转换不会从源状态退出(不会执行退出动作),而外部转换会退出再重新进入源状态。
  • 下面两个,目标状态包含了源状态,这种情况两种转换的区别在于:本地转换不会再次进入目标状态(不会执行进入动作),而外部转换会退出再重新进入目标状态。

3 一个UML状态图实例

3.1 使用visio绘制UML状态图

新建一个visio文件,打开后会自动提示选择创建某种类型的图,这里选择"软件和数据库 ->UML状态机"

点击确定之后,会进入UML状态图的编辑界面,左侧可以看到用于UML状态图编辑的基本元素,将这些元素拖拽到右侧的编解面板中,可以看到这些元素的基本结构形式:

3.2 实例讲解

下面是一个UML状态图的实例:

这是一个全自动洗衣机的UML状态图,主要包括“设置”、“工作中”、“暂停”这3个状态。

  • 开机时,会先进入“设置”状态,可以设置洗衣模式以及水量等,触发启动后,会进入“工作中”状态。

  • “工作中”是一个复合状态,内部包括“加水”、“清洗”、“排水”、“甩干”这4个子状态。进入该状态后,从“加水”子状态开始执行,然后会执行“清洗”、"排水"子状态,排水完成后,根据清洗次数是否足够,跳转到“加水”或“甩干”子状态。

  • 在“工作中”状态时,无论处于哪个子状态,只有按了暂停键,都会进入“暂停”状态,再按继续,则会进入“工作中”继续执行,注意继续时指向的是历史状态(圆圈内一个H字母),表示继续指向刚才暂停时的子状态。

4 总结

本篇介绍了UML状态图的基础知识,并通过visio绘制一个全自动洗衣机的UML状态图实例,来介绍UML状态图的画法与所表达的含义。

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

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

相关文章

<代码分享> 分支定界算法的 Python 代码框架

本文以求解整数规划模型为例,提供分支定界算法的 Python 代码框架,期待完善、指正和交流。 文件结构 具体代码 problem.py 定义问题的格式: from typing import Listclass Problem(object):"""problem"""de…

OneAPI 编译cp2k 9.1和cp2k 2023.1

环境信息: Rocky Linux 8.6 Linux server 4.18.0-425.19.2.el8_7.x86_64 gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC) OneAPI 2023 Intel(R) oneAPI DPC/C Compiler 2023.0.0 (2023.0.0.20221201) ifort version 2021.8.0 一、编译cp2k 9.1 这里用的…

linux系统下常用软件的安装与操作实现

本文来介绍下如何在 Linux 上安装 Windows 上常用的软件,桌面更多的用的是 Ubuntu ,下面就以 Ubuntu 为例。 目录 一、安装环境 二、安装步骤 三、总结 一、安装环境 本文使用的安装环境,如下所示: linuxylinuxy:~$ cat /proc…

【Python】【进阶篇】25、Django for标签详解

目录 25、Django for标签详解1. for标签的使用2. for标签嵌套使用3. forloop变量详解 25、Django for标签详解 通过上一节的《Django if标签详解》的讲解,我相信大家对于模板标签已经不再陌生,在本节我们再给大家隆重介绍一位最熟悉的陌生人&#xff0c…

如何熟练的使用trtexec

目录 如何熟练的使用trtexec前言1. 参数解释1.1 Model Options1.2 Build Options1.3 Inference Options1.4 Reporting Options1.5 System Options1.6 完整的参数 如何熟练的使用trtexec 前言 杜老师推出的 trtexec 工具的使用课程,链接。记录下个人学习笔记&#x…

禁止Windows更新自动安装驱动程序

禁止Windows更新自动安装驱动程序 问题解决方案方案1:修改系统设置方案2:修改组策略方案3:修改注册表方案4:回退驱动 问题 Windows更新时,会自动更新驱动程序,甚至有时会将驱动程序反向更新,替…

使用 webdriver API 编写自动化脚本的基本语法

文章目录 1. 打开和关闭浏览器1)打开浏览器并访问 URL2)关闭浏览器窗口 2. 元素的定位1)以 id 定位元素2)以 name 定位元素3)以 tag name 定位元素4)以 class name 定位元素5)以 xpath 定位元素…

第九章 控制单元的功能课后习题

指令周期有四个阶段:取值 间址 执行 中断 ,控制单元为了完成不同指令会发出不同的操作命令,这些操作信号控制着计算机所有部件有次序的完成不同的操作,以达到执行程序的目的。 控制单元的外特性 9.2控制单元的功能是什么?其输入…

【Java+GS】GeoServer——使用Java发布图层(SHP文件和DB数据库),附自用工具类

文章目录 SHP文件发布逻辑 1、获取到geoserver的manager对象2、调用createWorkArea方法,参入manager,创建空间空间 workArea3、调用createShpDataPool方法,创建数据存储4、发布样式Style.5、发布图层 调用业务层库发布shp文件图层业务逻辑如下…

【致敬未来的攻城狮计划】— 连续打卡第二十五天:RA2E1的 DTC传输模式

系列文章目录 由于一些特殊原因: 系列文章链接:(其他系列文章,请点击链接,可以跳转到其他系列文章) 24.RA2E1的 DMAC——数据传输 文章目录 系列文章目录 前言 一、DTC是什么? 二、DTC内部寄存…

Springboot——集成Elastic Job实现任务调度

目录 1.任务调度 2.Elastic Job 3.springboot集成Elastic Job 1.任务调度 什么是任务调度? 任务调度就是指系统为了自动地完成特定任务,在指定的时刻去执行任务的过程,其目的是为了让系统自动且精确地完成任务从而解放人力资源。 如&am…

WX小程序 - 1

视图层:WXML,WXSS 逻辑层:JS 响应数据绑定,事件绑定 勾选这个其实就是解决跨域问题(仅限本地开发阶段)。 上线需要去合法域名添加。 app.json 文件创建和删除,保持一致,否则报错…

二叉树的层序遍历思想模板

分为两种&#xff1a; 1.第一种是直接将遍历的数据保存到列表里&#xff1b; 2.第二种是将每一层的数据以列表形式保存在列表&#xff1b;&#xff08;今天要讲述的内容&#xff09; 代码如下&#xff0c;思想在后 class Solution {public List<List<Integer>> …

全新 – Amazon EC2 R6a 实例由第三代 AMD EPYC 处理器提供支持,适用于内存密集型工作负载

我们在 Amazon re:Invent 2021 上推出了通用型 Amazon EC2 M6a 实例&#xff0c;并于今年 2 月推出了计算密集型 C6a 实例。这些实例由运行频率高达 3.6 GHz 的第三代 AMD EPYC 处理器提供支持&#xff0c;与上一代实例相比&#xff0c;性价比提高多达 35%。 如今&#xff0c;…

不断联的从Google Drive下载超大文件

不断联的从Google Drive下载超大文件 最近在研究OWOD代码&#xff0c;需要从google drive 下载超大文件&#xff0c;普通方式下载&#xff0c;首先得有个上外网的工具&#xff0c;其次下载过程中总是会断开&#xff0c;所以看了一些博客&#xff0c;总结如下&#xff1a; 安…

基于TINY4412的Andorid开发-------简单的LED灯控制【转】

基于TINY4412的Andorid开发-------简单的LED灯控制 阅读目录(Content) 一、编写驱动程序二、编写代码测试驱动程序三、编写HAL代码四、编写Framework代码五、编写JNI代码六、编写App 参考资料&#xff1a; 《Andriod系统源代码情景分析》 《嵌入式Linux系统开发完全手册_基…

实时语义分割PIDNet算法TensorRT转换

[PIDNet](GitHub - XuJiacong/PIDNet: This is the official repository for our recent work: PIDNet) 是22年新开源的实时语义分割算法&#xff0c;和DDRNet一样具有不错的性能 网络结构如下&#xff1a; 网络分为三个分支&#xff0c;如上图&#xff0c;整体结构和DDRNet比…

shell 脚本中的函数

目录 一. shell 函数作用&#xff1a;二. shell 函数的定义格式&#xff1a;三.函数返回值&#xff1a;四.函数传参&#xff1a;扩展&#xff1a; 六. 函数变量的作用范围:七 . 递归7.1阶乘 八. 函数库 一. shell 函数作用&#xff1a; 使用函数可以避免代码的重复 使用函数可以…

OJ刷题 第十五篇(递推较多,奥赛篇)

31005 - 昆虫繁殖&#xff08;难度非常大&#xff0c;信息奥赛题&#xff09; 时间限制 : 1 秒 内存限制 : 128 MB 科学家在热带森林中发现了一种特殊的昆虫&#xff0c;这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵&#xff0c;每对卵要过两个月长成成虫。假设每个成虫…

从零开始 Spring Boot 27:IoC

从零开始 Spring Boot 27&#xff1a;IoC 自从开始学习和从事Spring Boot开发以来&#xff0c;一个一直让我很迷惑的问题是IoC和Bean到底是什么东西。这个问题一直到我翻阅完Spring开发文档Core Technologies (spring.io)后才真正得到解惑。 虽然中文互联网上关于IoC的文章很多…