当前位置: 首页 > news >正文

【UML用户指南】-26-对高级行为建模-状态图

目录

1、概念

2、组成结构

3、一般用法

4、常用建模技术

4.1、对反应型对象建模


一个状态图显示了一个状态机。在为对象的生命期建模中

活动图展示的是跨过不同的对象从活动到活动的控制流

状态图展示的是单个对象内从状态到状态的控制流。

在UML中,用状态图对一个对象按事件排序的行为建模。

1、概念

状态图 (state diagram)显示了一个状态机,它强调从状态到状态的控制流。

状态机 (state machine)是一个行为,它说明对象在它的生命期中响应事件所经历的状态序列以及它对那些事件的响应。

状态(state)是对象的生命期中的一个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。

事件(event)是对一个有意义的发生的规约,这种发生在时间和空间上占有一定位置。在状态机的语境中,事件是一次激励的发生,激励能够触发状态转移。

转移(transition)是两个状态之间的关系,它指明当特定事件发生而且特定条件满足时,在第一个状态中的对象执行一定的动作并进入第二个状态。

活动 (activity)是状态机中正在进行的执行。

动作 (action)是一个可执行的原子计算,它引起模型状态改变或值的返回。

在图形上,状态图是顶点和弧的集合。
 

2、组成结构

状态图通常包括:

简单状态和组合状态;

转移、事件和动作。

与所有其他图一样,状态图也可以包括注解和约束。

状态图基本上是状态机中的元素的投影。这意味着状态图可以包括分支、分岔、汇合、动作状态、活动状态、对象、初始状态、终止状态和历史状态等。

事实上,状态图可以包括状态机的任何和所有特征。

3、一般用法

反应型(或事件驱动的)对象是这样一种对象,其行为通常是由对来自其语境外部的事件所做出的反应来最佳刻画的。反应型对象在接收到一个事件之前通常处于空闲状态;当它接收到一个事件时,它的反应常常依赖于以前的事件;在这个对象对事件做出反应后,它就又变成空闲状态,等待下一个事件。对于这种对象,将着眼于对象的稳定状态,触发从状态到状态转移的事件,以及当每个状态改变时所发生的动作。

4、常用建模技术

4.1、对反应型对象建模

交互是对共同工作的对象群体的行为建模,

状态图是对一个单独的对象在它的生命期中的行为建模。

活动图是对从活动到活动的控制流建模,状态图是对从事件到事件的控制流建模。

这个对象可能处于的稳定状态、

触发从状态到状态的转移的事件

以及当每个状态改变时发生的动作。

对反应型对象的行为建模还包括对对象的生命期建模,从对象的创建时刻开始,直到它被撤销时结束,强调在其中可能发现的这个对象的稳定状态。

        稳定状态表示一个条件,对象可以在该条件下存在一段可识别的时间。当一个事件发生时,这个对象可能从一个状态转移到另一个状态。这些事件也可能触发自身转移和内部的转移,其中转移的源和目标是同一个状态。在对事件或状态变化的反应中,对象可能要执行一个动作来做出响应。

上图显示了一个状态图,用于分析一个简单的与语境无关的语言,正如在向XML输入或输出消息的系统中可能发现的那样。在这种情况下,该机器被设计得能分析与语法相匹配的字符流:

message: '<' string '>' string ';'

其中,第一个串表示一个标记,第二个串表示该消息体。给定一个字符流,只有遵从这个语法的形式良好的消息才能被接受。

如图所示,这个状态机仅有3个稳定状态:Waiting、GettingToken和GettingBody。这个状态机被设计成有动作附加在转移上的米利机。

在这个状态机中仅有一种感兴趣的事件,即带有实际参数c(一个字符)对put的调用

在Waiting状态下,该机器丢弃任何不是开始标记的字符(通过监护条件来说明)。当接收到一个开始标记时,该对象的状态就改变为GettingToken。在这个状态中,机器保存任何不是结束标记的字符(通过监护条件来说明)。当接收到一个结束标记时,该对象的状态就改变为GettingBody。在这个状态中,机器保存任何不是一个消息体结束标记的字符(通过监护条件来说明)。当接收到一个消息结束标记时,该对象的状态就改变为Waiting,并返回一个值,表示该消息已被分析过(并且机器准备接收另一个消息)。
 

相关文章:

  • DC/AC电源模块:为智能家居设备提供恒定的电力供应
  • 深入探索Scala的类型推断机制
  • 【MySQL备份】Percona XtraBackup加密备份实战篇
  • 粤港联动,北斗高质量国际化发展的重要机遇
  • 中间包烘烤器控制
  • 力扣1124.表现良好的最长时间段
  • 边缘混合计算智慧矿山视频智能综合管理方案:矿山安全生产智能转型升级之路
  • 基于RK3588的GMSL、FPDLink 、VByone及MIPI等多种摄像模组,适用于车载、机器人工业图像识别领域
  • OK527N-C开发板-简单的性能测试
  • Python容器 之 字典--字典的常用操作方法
  • 昇思MindSpore学习笔记2--快速入门
  • 中小企业如何防止被查盗
  • 秋招Java后端开发冲刺——并发篇1(线程与进程、多线程)
  • 半年支出8700万美元,财库预算只够再撑2年,波卡之后想咋过?
  • Linux kernel 与 设备树
  • ----------
  • 网络传输文件的问题
  • 【React系列】如何构建React应用程序
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • android图片蒙层
  • angular2开源库收集
  • gf框架之分页模块(五) - 自定义分页
  • iOS 系统授权开发
  • java多线程
  • Redash本地开发环境搭建
  • 聊聊flink的TableFactory
  • 使用权重正则化较少模型过拟合
  • 世界上最简单的无等待算法(getAndIncrement)
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过几道题目学习二叉搜索树
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 问题之ssh中Host key verification failed的解决
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 国内开源镜像站点
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #vue3 实现前端下载excel文件模板功能
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1)SpringCloud 整合Python
  • (3)llvm ir转换过程
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)JPA - JQPL 实现增删改查
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .Net Core 中间件验签
  • .Net 代码性能 - (1)
  • .net流程开发平台的一些难点(1)
  • /etc/sudoer文件配置简析
  • [ C++ ] 继承
  • [1]-基于图搜索的路径规划基础
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [AI aider] 打造终端AI搭档:Aider让编程更智能更有趣!
  • [AIGC] Spring Interceptor 拦截器详解