1.状态机基本概念

1.1 什么是状态机

状态机(有限状态机,FSM)是包含有限个状态的概念化机器,由状态、转换和动作这3个元素组成的有向图,三者关系如下:

  • 动作是实现状态转换而执行的计算;
  • 事件是状态转换的原因;
  • 动作是状态转换的效果;

在任何时候,状态机只能处于其中的一个状态,而状态的转换由输入事件引起,但状态机又可以响应或不响应输入事件,所以输出动作同也是可以产生或不产生的,下一个状态取决于当前的状态以及输入事件。

所有的状态机体系中,普遍的假设一个状态机在它能进行下一个事件处理前完成对每个事件的处理,这个执行模型被称为“运行-到-完成”模型(Run-to-Completion Execution Model,RTC)。

1.1.1 事件

事件发生在某个时间节点上,也被成为离散时间、离散信号或激励。必须要注意的是,事件的发生是原子性的,也即不可以被中断打断的。通常有5种可以总结的触发事件,分别如下:

  • 时间事件:用时间表达式指定了某一个时刻,这个时间表达式既可以是绝对的,也可以是相对的,本文档中使用关键字“after:”指定一个带有相对时间表达式的时间事件,表示一个事件将在指定的经过时间之后发生,例如after:10秒。在状态机里,定时器事件将会导致向一个给定状态的转换。经过时间是指从进入到某个状态的时间点(例如定时器启动时间)直到状态退出的时间点的时间段,而状态的退出是由定时器到期事件(timeout)引起的。本文档中使用关键字“at:”指定一个带有绝对时间表达式的时间事件,表示一个事件将在指定的时刻发生,例如at:2021年2月16日星期二
  • 信号事件:表示异步信号的接受,信号发生器在发送信号等待回复时,不会阻塞,而是立即继续它的执行。
  • 接受事件:表示接受请求消息,在接受对象上调用一个特定的操作。
  • 变更事件:对象状态的改变,使得某个条件为真进行的建模。
  • 完成事件:如果没有显示的触发事件,那么从一个状态开始的转移即为完成转移。

1.1.2 状态

状态代表了一段时间内持续存在的可识别的状况,而在实际状况中,状态转换的时间相较于状态持续的时间,是可以忽略不计的。状态机的初始状态是状态机被激活时进入的状态。UML状态机语法内使用圆角矩形表示状态。

1.1.3 监护条件

监护条件是基于扩展状态变量和事件参数动态评估的布尔表达式,可以用来指定有条件的状态转换,表达法:事件[条件],这里的条件是布尔表示式。所以当事件附带有监护条件时,只要条件为真,才允许动作或转换。

 

​​​​​​​1.1.4 动作

动作是状态转换时触发的,它执行后终止自己。动作是状态转换时瞬间执行的,因此理论上动作的持续时间为零。

​​​​​​​1.1.4.1 状态转换动作

状态转换被标记为事件/动作(Event/Action)或者事件[条件]/动作(Event[condition]/Action)

​​​​​​​1.1.4.2 进入动作

状态转换时执行的瞬时动作,该动作使用保留字entry表示,而使用该动作最佳的时间为:

  • 到达一个状态有不止一个转换;
  • 在到达这个状态的每个转换上都需要执行相同的动作;
  • 该动作是进入此状态时执行的,而不是从上一个状态退出时执行的;

1.1.4.3 退出动作

状态转换过程中执行的瞬时动作,该动作使用保留字exit表示,而使用该动作最佳的时间为:

  • 离开一个状态有不止一个转换;
  • 每个状态转换都需要完成同样的动作;
  • 该动作是退出该状态而不是进入下一个状态时执行的;
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CheerToday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值