UML行为图-状态图

概述

创建 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.mzph.cn/web/22054.shtml

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

相关文章

2024最全软件测试面试八股文(答案+文档+视频讲解)

Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…

Python-3.12.0文档解读-内置函数zip()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 基本用法 示例 特性 高级用法 注意事项 版本更新 示例代码 记忆策略…

UI的学习(一)

UI的学习(一) 文章目录 UI的学习(一)UIlabelUIButtonUIButton的两种形式UIButton的事件触发 UIView多个视图之间的关系 UIWindowUIViewController一个视图推出另一个视图 定时器和视图移动UISwitchUISlider和UIProgressSlid步进器与分栏控制器UITextFieldUIScrollView有关实现它…

个人笔记-随意记录

常见问题? 1.linux重启服务 端口被占用如何解决? 查看某个端口被占用的进程 netstat -tulnp | grep :23454 强制杀死进程 kill -9 1776 重启服务即可

解决Chat打开时Unable to load conversation 的问题

在开梯子的情况下打开chat依然很卡,这里选择edge的浏览器无痕模式(新建InPrivate窗口),在无痕窗口下打开chat就可以了。

python ---requests

python包管理工具 pip 若发现报错,则可以通过 -i 命令指定软件源 requests库安装 通过 pip ,如上 或通过 pycharm 搜索 requests ,并安装即可 下载成功的证明 requests库使用 模拟 http 重要参数如下 如何模拟发包 支持模拟各种 http meth…

SpringMVC:消息转换器

1. HttpMessageConvertor 简介 HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为:HTTP消息转换器。该接口下提供了很多实现类,不同的实现类有不同的转换方式。 转换器 如上图所示:HttpMessageConverter接口的可以将请求协议转…

基于ESP32-S3芯片的通用型无线模组方案,启明云端乐鑫一级代理商

随着物联网技术的飞速发展,智能设备正以前所未有的速度进入到我们的日常生活中,AIoT(人工智能物联网)已成为智能家居、智能设备、智能安防等领域的核心技术。 作为乐鑫一级代理商,基于ESP32-S3芯片,启明云…

科技云报道:走出“实验室”,GenAI迎来关键拐点

科技云报道原创。 对传统产业来说,GenAI是一场“哥白尼式的革命”,它改变了传统的业务模式,开启了人类与AI合作的新纪元。基于AI助手和大语言模型,企业能够实现智能运营的目标。 如果说,2022年是AI大模型元年&#x…

【全开源】Java AI绘画MJ绘画源码小程序APP公众号源码AI绘图

🎨 探索AI绘画的奥秘 一、引言:AI绘画的魅力 🌈 在这个数字化飞速发展的时代,AI绘画已经不再是遥不可及的梦想。通过源码小程序,我们可以轻松探索AI绘画的奥秘,感受科技与艺术的完美结合。今天&#xff0…

电脑误删除文件如何恢复?几种常用的数据恢复方法分享!

处理电脑文件时误删是大部分电脑用户可能都会面临的一个问题。如果是比较重要的文件,很多用户就会开始心慌,不知道如何是好。那么,电脑怎么恢复删除的文件呢? 其实方法很简单,下面小编就给大家分享几种常用的数据恢复方…

react-学习基础偏

1.新建文件夹 2.vscode引入这个文件夹 3.打开vscode终端 执行命令 npx create-react-app react-basic 创建基本项目(react-basic项目文件夹名) 4.进入到这个文件夹 可用的一些命令 这就算启动成功 5. 这是项目的核心包 渲染流程

java自学阶段二:JavaWeb开发06(mybatis学习)

目录: 学习目标mybatis的基础用法(新增、删除、修改、查询) 一:学习目标: 1)了解mybatis的基础概念; 2)学会mybatis的基础用法; 二、mybatis的基础概念: M…

手把手教你改进YOLOv8小目标检测(多尺度特征融合iAFF)

1,YOLOv8改进策略指南 YOLOv8是目标检测领域中一个重要的模型,它在YOLO系列的基础上进行了进一步的改进和优化。 根据搜索结果,YOLOv8的一些改进策略包括: 注意力机制的增加:通过引入注意力机制,可以提高模型对目标特征的捕捉能力,从而提升检测性能2369。 卷积和Block的…

Unity Obi Rope失效

文章目录 前言一、WebGL端Obi Rope失效二、Obi Rope 固定不牢三、使用Obi后卡顿总结 前言 Obi 是一款基于粒子的高级物理引擎,可模拟各种可变形材料的行为。 使用 Obi Rope,你可以在几秒内创建绳索和杆子,同时完全控制它们的形状和行为&…

scipy.io.loadmat加载.mat文件,出现KeyError: ‘xxx‘

源代码: input_image loadmat(rC:\Users\admin\Downloads\Indian_Pines\SVM/aa.mat)[aa] #影像图 错误显示: 解决方法: 因为loadmat函数读取出来的高光谱数据是dict格式的所以需要定位才能进行后续操作,定位通常是通过列名&a…

运筹说 第116期 | 算法介绍之排队论

在这个快节奏的时代,无论是线上购物、线下服务,还是工业生产,我们都不可避免地与“排队”打交道。今天小编将带你一起探索利用Python和MATLAB这两种编程工具,来求解排队论中的常见模型和排队优化问题。我们将从排队论的基础模型开…

U盘杀毒是否会导致文件丢失?误删文件如何恢复?

在数字化时代,U盘作为便携的数据存储设备,广泛应用于我们的日常生活与工作中。然而,随着网络环境的复杂化,U盘也时常成为病毒传播的媒介。因此,对U盘进行杀毒成为保护数据安全的重要步骤。但许多用户担心,给…

centos安装vscode的教程

centos安装vscode的教程 步骤一:打开vscode官网找到历史版本 历史版本链接 步骤二:找到文件下载的位置 在命令行中输入(稍等片刻即可打开): /usr/share/code/bin/code关闭vscode后,可在应用程序----编程…

10Linux 进程管理学习笔记

Linux 进程管理 目录 文章目录 Linux 进程管理一.进程1.显示当前进程状态(ps)进程树(pstree)1.1实时显示进程信息(top)顶部概览信息:CPU 状态:内存状态:进程信息表头:进程列表:1.2(htop) 2.终止进程(kill)2.1通过名称…