UML-状态机图(状态图)

UML-状态机图(状态图)

  • 一、状态机图简介
    • 1、状态
    • (1)简单状态
    • (2)并发状态
    • 2、转移
      • (1)判定决策点
      • (2)同步(分叉与汇合)
    • 3、事件
    • 4、动作
    • 5、活动
  • 二、总结


一、状态机图简介

  • 状态机图描述了一个对象在其生命周期内所经历的各种状态,以及引起对象状态变化的原因。
  • 状态机用于对一个模型元素建立行为模型,该模型元素通常是一个类/对象,也可以是一个 Use Case ,甚至是整个系统。
    在这里插入图片描述

1、状态

  • 初始状态:使用一个实心圆表示。
  • 一般状态:使用圆角矩形表示,在标识符内部编辑名称及该状态下的动作。
  • 终止状态:类似于初始状态外加一个圆圈。
    在这里插入图片描述
  • 组合状态的子状态分为两种,顺序子状态和并发子状态。

(1)简单状态

  • 如果一个组合状态的子状态对应的对象在其生命周期内的任何时刻都只能处于一个子状态,也就是说状态机图中多个子状态是互斥的,不能同时存在,这种子状态被称为顺序状态。

(2)并发状态

  • 并发状态用来描述一起进行的状态变化流,并发状态强调时间发生时刻的一致。
  • 由并发状态构成的组合状态被分成不同区域,每个区域包含不同的状态机,各区域内的状态机分别运行。如果并发子状态中有一个子状态比其他并发子状态先到达它的终止状态,那么结束的子状态的控制流将在它的终止状态等待,直到所有的子状态都终止。此时,所有子状态的控制流汇合成以恶控制流,转移到下一个状态。
    在这里插入图片描述

2、转移

  • 转移是两个状态之间的关系,指示处于第一状态的对象将执行某些动作并且当指定事件发生并且满足指定条件时进入第二状态。
    在这里插入图片描述
  • 转移的五个要素(非必须):
    • 源状态 (Source State):受转换影响的状态;如果对象处于源状态,则当对象接收到转换的触发事件并且满足监护条件(如果有)时,可以触发传出转换。
    • 目标状态 (Target State):转移完成后对象处于的状态。
    • 触发事件:一种可以触发源状态以满足监护条件的激励。
    • 监护条件:是原状态向目标状态转移的条件,原状态结束时进行监护条件的判断,只有当监护条件满足时,才能转移到指定的目标状态。
    • 动作:转换激活时的操作。
  • 触发事件和监护条件遵循的规则:
    • 转移时,监护条件在事件发生时计算一次。若转移被重新触发,则监护条件将会被重新计算。
    • 如果监护条件和触发事件放在一起使用,当且仅当触发事件发生且监护条件布尔表达式成立时,状态转移才发生 。
    • 如果只有监护条件,则只要监护条件为真,状态就发生转移。
  • 转移的类型:
    • 自转移:
      • 自转移打断当前状态下的所有活动,使对象退出当前状态,最后又返回该状态。
      • 自转移中,状态转移的源状态和目标状态是同一个状态。
    • 内部转移:
      • 内部转移描述执行响应事件的内部动作或活动,转移只有源状态没有目标状态,内部转移激发的结果并不是改变状态本身。
    • 自动转移:
      • 自动转移又称为完全转移,是当前状态自然结束并引发的转移
    • 复合转移:
      • 复合转移由简单转移组成,这些简单转移通过判定、分叉或汇合组合在一起。

(1)判定决策点

  • 判定决策点是状态转移中的分支,系统的状态在转移时被不同的条件影响,能够在不同的条件下转移到不同的状态,这个条件即为判定决策点。
  • 判定的标识符是一个菱形,控制流通常从菱形的一个顶点进入,从其他顶点输出。
    在这里插入图片描述

(2)同步(分叉与汇合)

  • 同步和判定决策点都能够将状态分流,不同的是,判定决策点是不同条件下的不同状态转移;而同步是可同时进行的状态转移。
  • 使用同步条显示并发的转移,即同时发生的转移,同步条为实心矩形,同步分为两种形式:控制流的分叉和汇合。
    在这里插入图片描述

3、事件

  • 事件是能够引发系统对象状态改变的行为。事件和转移是相伴出现的,事件可以看作是对转移的修饰,描述系统元素状态改变的原因。事件可以有属性和参数,参数放在事件名称后面的括号()内。
  • 事件是一个触发器,有时事件又被称为事件触发器。它触发了状态之间的转移和状态内部转移,接收事件的对象必须了解如何对触发器进行响应。
    在这里插入图片描述

4、动作

  • 动作是不可分隔的行为,是行为最小的单元。动作可以是类对象的操作和属性,一个状态中允许有多个动作。
  • 由于状态图时系统状态间的转移,因此,动作只能表现在状态内部,包括动作类型和名称。
  • 动作的五种基本类型:
    • entry:入口动作,进入状态是发生的动作。
    • exit:出口动作,当前状态结束时发生的动作。
    • do:内部动作,模型元素处于某个状态时执行的动作。
    • include:引用子状态机状态。
    • event:用来指定特定事件触发时发生的动作。
  • 内部动作是模型元素在状态持续过程中执行的动作,执行与该状态相关的行为。内部动作不会改变元素当前状态,在入口动作执行后、出口动作执行前执行。
  • 当内部动作执行完毕时,如果没有完成转移就触发它,否则状态将等待一个显式触发的转移。
  • 如果内部动作正在执行时有一个转移被触发,此时内部动作将被终止,然后执行状态的出口动作。

5、活动

  • 活动是当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,人们希望描述正在进行的活动。在处于一个状态的同时,对象做着某些工作,并一直继续到被某个时间中断。

二、总结

  • 状态机图的两种类型应用:
    • 对对象生命周期建模:主要描述对象能够响应的事件、对这些事件的响应及过去对当前行为的影响。
    • 对反应型对象建模:主要描述对象可能处于的稳定状态、从一个状态到另一个状态之间的转换所需的触发事件,以及每个状态改变时发生的动作。
  • 注意:
    • 一个状态机图只针对一个实体描述其状态转换。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 输入用户名和密码 防止注入攻击

1、问题解释:注入攻击 ,无密码直接登录数据库 可视化展示 1.1、当你的数据库为:其中包含三个字段id user 以及md5密码 1.2、在使用C堆数据库信息进行访问的时候,使用多条语句进行查询 string sql "select id from t_user…

Unity Shader 属性的定义

Unity Shader 属性的定义 什么是材质球 人的衣服 什么是shader 决定材质跟灯光的作用 Property 若是把shader看作class,那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int: name("dis…

YOLOv5模型转ONNX,ONNX转TensorRT Engine

系列文章目录 第一章 YOLOv5模型训练集标注、训练流程 第二章 YOLOv5模型转ONNX,ONNX转TensorRT Engine 第三章 TensorRT量化 文章目录 系列文章目录前言一、yolov5模型导出ONNX1.1 工作机制1.2 修改yolov5代码,输出ONNX 二、TensorRT部署2.1 模型部署2.2 模型推理…

【深度学习每日小知识】Computer Vision 计算机视觉

计算机视觉是人工智能的一个领域,涉及算法和系统的开发,使计算机能够解释、理解和分析来自周围世界的视觉数据。这包括从静态图像到视频流甚至 3D 环境的一切。 使用对象检测和特征提取等方法,计算机视觉本质上需要从视觉输入中提取有用信息…

TensorRT(C++)基础代码解析

TensorRT(C)基础代码解析 文章目录 TensorRT(C)基础代码解析前言一、TensorRT工作流程二、C API2.1 构建阶段2.1.1 创建builder2.1.2 创建网络定义2.1.3 定义网络结构2.1.4 定义网络输入输出2.1.5 配置参数2.1.6 生成Engine2.1.7 保存为模型文件2.1.8 释放资源 2.2 运行期2.2.1…

STM32的USB设备库

适用范围:“on the STM32F10xxx,STM32F37xxx, STM32F30xxx and STM32L15xxx devices.” STM32_USB-FS-Device_Lib_V4.0.0.rar(访问密码:1666)https://url48.ctfile.com/f/33868548-1000799917-a5409d?p1666 适用范围&#xff1…

服务器配置SSL证书到nginx基于Fdfs存储服务器或者直接阿里云绑定SSL

1.如果用FDFS存储服务器内置nginx设置SSL证书 1.验证当前nginx是否存在 http_ssl_modulehttp_ssl_module模块 如果存在直接配置就行 server {listen 80 default backlog2048;listen 443 ssl; server_name 域名; ssl_certificate /usr/local/nginx_fdfs/ssl/xxxx.top.crt; ssl…

【C++】内联函数

前言 在C语言中,我们学习过宏的用法。宏通常被用于进行简单的文本替换来执行一系列的操作,比如一些简单的运算。使用宏可以避免函数调用时建立栈帧的开销,提高程序的性能。我们首先来写一个实现加法功能的宏: #define ADD(x, y)…

5、C语言:结构

结构 结构的基本知识结构与函数传递结构 结构数组、指向结构的指针自引用结构(二叉树)表查找类型定义(typedef)联合位字段 结构也是一种数据类型。类似于int、char、double、float等。 结构是一个或多个变量的集合,这些…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH(Secure Shell)协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 (1)对称加密 (2)非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了,需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

Python读取log文件报错“UnicodeDecodeError”

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 写了一个读取log文件的Python脚本: # -*- coding:utf-8 -*- import os import numpy as np …

第01章_Java语言概述拓展练习(为什么要设置path?)

文章目录 第01章_Java语言概述拓展练习1、System.out.println()和System.out.print()有什么区别?2、一个".java"源文件中是否可以包括多个类?有什么限制?3、Something类的文件名叫OtherThing.java是否可以?4、为什么要设…

【Maven】009-Maven 简单父子工程搭建

【Maven】009-Maven 简单父子工程搭建 文章目录 【Maven】009-Maven 简单父子工程搭建一、需求说明1、结构2、第三方库 二、工程搭建1、父工程第一步:创建父工程第二步:引入公共依赖 lombok 和管理 hutool 依赖版本 2、公共子模块第一步:创建…

服务器出现500、502、503错误的原因以及解决方法

服务器我们经常会遇到访问不了的情况有的时候是因为我们服务器被入侵了所以访问不了,有的时候是因为出现了服务器配置问题,或者软硬件出现问题导致的无法访问的问题,这时候会出现500、502、503等错误代码。基于以上问题我们第一步可以先重启服…

MySQL核心SQL

一.结构化查询语言 SQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。 SQL 主要可以划分为以下 3 个类别: DDL(Data Definition Languages)语句 数据定义语言,这…

vue2配置教程

5.12.3 Vue Cli 文档地址: https://cli.vuejs.org/zh/ IDEA 打开项目,运行项目

【年终总结】回首2023的精彩,迈向2024的未来

文章目录 一、历历在目,回首成长之路🏃‍1、坚持输出,分享所学2、积土成山,突破万粉3、不断精进,向外涉足 二、雅俗共赏,阅历百般美好🎻1、音乐之声,声声入耳2、书海遨游&#xff0c…

select...for update锁详解

select…for update锁详解 select…for update的作用就是:如果A事务中执行了select…for update,那么在其提交或回滚事务之前,B,C,D…事务是无法操作(写)A事务select…for update所命中的数据的…

php时间函数date()、getdate()、time()

目录 1. 时区修改 2. date() 3. getdate() 4. time() 1. 时区修改 位于东八区&#xff0c;修改php.ini 。date.timezone Asia/Shanghai 2. date() 获取时间函数 <?php header("Content-Type: text/html; charsetutf-8");$d date(H:i:s);//小时H&#xf…