UML行为图-状态图

news2025/1/23 22:40:36

概述

创建 UML 状态图的目的是研究类、角色、子系统或组件的实时行为。状态图不仅可用于描述用户接口、设备控制器和其他具有反馈的子系统,还可用于描述在生命期中跨越多个不同性质阶段的被动对象的行为,在每一阶段该对象都有自己特殊的行为。

一、状态图的基本模型

状态图是系统分析的一种常用工具,它通过建立类对象的生存周期模型来描述对象随时间变化的动态行为。状态图是展示状态与状态转换的图。通常一个状态机依附于一个类,并且描述一个类的实例。状态图包含了一个类的对象在其生命周期间所有状态的序列及对象对接收到的事件所产生的反应。

状态图主要用于表现从一个状态到另一个状态的控制流,它由表示状态的节点和表示状态之间转换的带箭头的直线组成。若干个状态由一条或多条转换箭头连接,状态的转换由事件触发。模型元素的行为可以由状态图中的一条通路表示,沿着此通路状态机随之执行一系列动作。一个简单的状态图如图 5-1 所示。

在这里插入图片描述

二、状态的表示法

状态由一个带圆角的矩形表示,状态图的图标可以分为2部分:名称和内部动作。

在这里插入图片描述
其中:

  • 名称表示状态的名字,通常用字符串表示,一个状态的名称在状态图所在的上下文中应该是唯一的。
  • 内部动作用于表示进入或者走出此状态应该执行的动作,它们将响应对象所接收到的事件但是不改变对象的状态。状态共包括如下4种动作类型。
    • entry动作:表示进入该状态时执行的动作,采用“entry/动作名称”格式,如图5-2所
      示。
    • exit 动作:表示退出该状态时执行的动作,采用“exit/动作名称”格式,如图5-3 所示do动作:表示该状态下执行某一动作,采用“exit/动作名称”格式,如图5-4所示。
      在这里插入图片描述
    • on动作:表示该状态发生某事件时所执行的动作,采用“on事件名称(事件参数)执行条件]/动作名称”格式,如图5-5 所示。

在这里插入图片描述

一个状态可以包含多个内部动作,这种内部状态又称为内部转换,即有一个源状态但没有目标状态,它转换后的状态仍是它本身。内部转换用于对不改变状态的插入动作建立模型,例如建立帮助信息。如图5-6所示,其中包含了3个内部动作。

在这里插入图片描述

三、转换的表示法

转换表示当一个特定事件发生或某些条件得到满足时,一个源状态下的对象在完成一定的动作后将发生状态转变,转向另一个称为目标状态的状态。

一个转换一般包括5部分的信息:源状态、目标状态、触发事件、监护条件和动作。

  • 触发事件是能引起状态转换的事件。触发事件可以是信号、调用和时间段等。
  • 监护条件是触发转换必须满足的条件,它是一个布尔表达式。当事件被触发时,监护条件被赋值。如果布尔表达式为真,那么转换被触发;否则不会引起转换。监护条件只能在触发事件发生时被赋值一次。从一个状态引出的多个转换可以有同样的触发器事件,但是每个转换必须具有不同的监护条件。
  • 动作是一组可执行语句或计算处理的过程。动作可以包括发送消息给另一个对象、操作调用、设置返回值、创建和销毁对象等。动作是原子的,不可中断的。整个系统可以在同一时间执行多个动作。动作在它的控制线程中是原子性的,一旦开始执行就必须执行到底并且不能与同时处于活动状态的动作发生交互作用。

转换用带箭头的直线表示,分别连接源状态和目标状态。当源状态接收到一个事件,并且监护条件得到满足时,则执行相应的动作,同时从源状态转换到目标状态。如果转换上没有标注触发转换的事件,则表示此转换为自动进行。

转换如图 5-7所示,箭头中的说明格式包含了各种不同的描述信息。

在这里插入图片描述
转换通常分为外部转换、内部转换、完成转换和复合转换4种。

  • 外部转换是一种改变对象状态的转换,它是最常见的一种转换。外部转换用从源状态到目标状态的箭头表示。
  • 内部转换为状态内部的事件动作,它不离开该状态本身,在一定的条件下发生一定的动作,但发生后状态不发生转换。
  • 完成转换又称为自转换,之所以称为完成转换是因为没有标明触发器事件的转换是由状态中活动的完成引起的,是自然而然完成的转换。
  • 复合转换由简单转换组成,这些简单转换通过分支判定、分叉或接合组合在一起。多条件的分支判定又分为链式和非链式的分支。

四、初始状态的表示法

初始状态代表状态图的起始位置,起始状态在一个状态图中只允许有一个,用一个实心圆表示并在右侧显示初始状态名。

五、终止状态的表示法

终止状态是一个状态图的终止点,它用一个含有实心圆的空心圆表示,并在右侧显示初始状态名。

六、子状态的表示法

简单状态是没有子结构的状态。具有子状态(嵌套状态)的状态被称为复合状态。子状态可能被嵌套到任意级别。嵌套的状态图最多可能有一个初始状态和一个终止状态。通过显示某些状态只能在特定环境(包含状态)中存在,子状态可以化复杂的平面状态图。

如图 5-11所示的取款状态图中包含了3个子状态,每一个子状态的处理都可能导致退出该状态。

在这里插入图片描述

七、历史状态的表示法

除非另有指定,当转移进入复合状态时,嵌套状态机的操作将从初始状态开始重新执行(除非转移直接以子状态为目标)。历史状态使状态机可以重新进入在它退出复合状态之前的最后一个活动子状态。

如图 5-12所示,在验证账户失败后会让用户重新输入密码,输出密码后不需要重新进入取款状态,可以直接进入取款的历史状态继续验证账户,如图中的“H”所示。

在这里插入图片描述

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

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

相关文章

AI大模型时代必须关注的数据库 DuckDB1.0 正式发布

开源数据库DuckDB1.0 经过内部6年的打磨,积累了30万行代码,1.8万star,2024.06.03号正式发布了1.0版本(代号 Snow Duck)。 我们新一代程序员,没能见证MySQL 1.0、PostgreSQL 1.0、Windows 1.0、Linux 1.0、…

SpringBoot: 使用GraalVM编译native应用

曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。 这一篇文章的目标是用一个案例讲解如…

NLP基础——序列模型(动手学深度学习)

序列模型 定义 序列模型是自然语言处理(NLP)和机器学习领域中一类重要的模型,它们特别适合处理具有时间顺序或序列结构的数据,例如文本、语音信号或时间序列数据。 举个例子:一部电影的评分在不同时间段的评分可能是…

IO流----字节流

字节流 字节流:操作:文件字节输入输出流 :写入数据:读取数据:文件拷贝: 带缓冲区的字节输入输出流:拷贝文件:写入数据:读取数据: 深入 带缓冲区的字节输出流 &#xff1a…

OTTO、亚马逊、Temu卖家如何运用测评补单来提高购买率?

在跨境电商的广阔舞台上,测评补单无疑是一股不可或缺的强劲动力。商家们深知,通过补单这一手段,能够快速为产品注入活力,使销量迅猛攀升,评论如潮涌至,进而在激烈的竞争中脱颖而出,勇攀销量之巅…

论文AI率不达标?AI工具助你一臂之力

告诉大家一个非常残忍的答案,以后所有论文都会被查ai率的。 学术界不仅关注传统的抄袭问题,还增加了一项名为“AIGC检测”的指标。例如知网、维普等平台都能检测论文AI率。 用GPT写论文虽然重复率基本不用担心,但是AI率基本都较高&#xff…

异常概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”。这些异常有的是由于开发者将关键字敲错导致的&#xf…

探索魁北克:IT专业人士的移民新天地

在这个数字化飞速发展的时代,IT专业人士无疑是推动社会进步的关键力量。魁北克省,作为加拿大的科技与文化中心,正以其开放的姿态和优越的移民政策,吸引着全球IT精英的目光。今天,让我们一起探索魁北克省为IT专业人士量…

用 DataGridView 控件显示数据

使用DataGridView,可以很方便显示数据。 1.为解决方案添加数据集XSD,用作为项目数据源。 2.拖DataGridView控件到WinForms上。 3.在DataGridView控件的任务处,选择数据源。 4.选好数据源后,VS自动添加DataSet、BindingSourse和T…

2024年5月第四周LLM重要论文总结

本文总结了2024年5月第四周发表的一些最重要的LLM论文。这些论文的主题包括模型优化和缩放到推理、基准测试和增强性能。 LLM发展与基准 1、Towards Modular LLMs by Building and Reusing a Library of LoRAs 基本大型语言模型(LLM)的参数越来越对,这就要求我们研…

nvm for wins下载地方

https://github.com/coreybutler/nvm-windows

使用springboot+vue实现阿里云oss上传

一、前言 我们后端开发中,时常需要用到文件上传的功能,无非是保存到服务器本地或者如阿里云、七牛云这种云存储的方案。本篇介绍一种使用后台springboot结合前端vue实现阿里云oss上传的功能。 二、前端实现过程 前端实现一个通用的上传组件UploadFile…

C# 声音强度图绘制

C# 声音强度图绘制 采集PCM音频数据 音频原来自麦克风 音频源来自录音文件 处理PCM音频数据 将PCM数据进行强度值换算 private void UpdateVoice(double[] audio){// 计算RMS值double rms Math.Sqrt(audio.Select(x > x * x).Average());// 将RMS值转换为分贝值&#x…

【Js】深入浅出的js for循环 for loop以及闭坑指南

在JavaScript中使用forEach循环来删除数组中的特定元素可能会导致一些问题,因为forEach不允许你在迭代过程中修改数组的长度。 这会导致意外的行为,例如跳过元素或错误地索引。因此,建议使用其他方法来安全地删除数组中的元素。 存在的问题 1…

大数据基础问题:在Hive中如何实现全增量统一的UDTF、内置函数、聚合、Join等计算引擎常见算子?

仁者见仁智者见智,每个程序员的方法都不一样,老的程序员和新的程序员之间的思维差距很大,新入公司的和老员工的代码差距也很大。 在Apache Hive中,实现全增量统一的用户定义表生成函数(UDTF)、内置函数、聚…

数据结构:模拟栈

数据结构&#xff1a;模拟栈 题目描述参考代码 题目描述 输入样例 10 push 5 query push 6 pop query pop empty push 4 query empty输出样例 5 5 YES 4 NO参考代码 #include <iostream>using namespace std;const int N 1000010;int m, x; int q[N]; string op; int…

爬虫之反爬思路与解决手段

阅读时间建议&#xff1a;4分钟 本篇概念比较多&#xff0c;嗯。。 0x01 反爬思路与解决手段 1、服务器反爬虫的原因 因为爬虫的访问次数高&#xff0c;浪费资源&#xff0c;公司资源被批量抓走&#xff0c;丧失竞争力&#xff0c;同时也是法律的灰色地带。 2、服务器反什么…

Docker基础篇之Docker常规软件安装

文章目录 1. 总体步骤2. 安装tomcat3. 安装Mysql4. 安装Redis 1. 总体步骤 安装软件的总体步骤如下所示&#xff1a; 搜索镜像拉取镜像查看镜像启动镜像停止容器移除容器 2. 安装tomcat docker hub上查找tomcat镜像 或者使用一下命令查找&#xff1a; docker search tomca…

微信小游戏性能优化解决方案全新发布

小游戏凭借其简单易上手、玩法多样、互动性强的特点&#xff0c;迅速在市场中崭露头角。MMO、ARPG、卡牌等游戏类型也纷纷入局。玩家对启动时间长、发热、加载缓慢、闪退等问题也越来越敏感。 为了突破这些性能瓶颈&#xff0c;UWA全新发布了针对微信小游戏的性能优化解决方案…

240.搜索二维矩阵

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…