美文网首页
状态机基础知识

状态机基础知识

作者: 捞月亮的阿汤哥 | 来源:发表于2021-01-09 17:16 被阅读0次

    这几天想研究下状态机,所以开始阅读了squirrel的代码,文档提到了建议先学习下状态机基础知识。所以学习了这方面的知识。

    状态机的分类

    按照uml2.4可以分为两种类型的状态机。分别是behavior state machine和protocol state machine。两种类型的状态机有很多相似之处,behavior state machine更关注行为的变化,protocol state machine则可以描述系统内的状态变化的生命周期(比如Java线程的生命周期)。

    behavior state machine

    • 示意图 image

      首先看个状态机的示意图,主要描述的是银行ATM自助取款机的状态变化。
      这里面有一些概念,大的可以分为vertex和transition。

    vertex

    如果把状态机看作是个图(graph)的话,可以把vertex看作图的状态节点。可以分为如下两种

    state

    state可以描述状态,可以分为三种类型。分别是简单状态(simple state),复合状态(composite state), 子状态(submachine state)。

    • 简单状态


      简单状态.png
    • 复合状态
      在简单状态中可以嵌套其他的状态变化,如下图


      复合状态.png

      这个复合状态中,Nothing有子状态idle,Configuring有子状态NewValueSelection和NewValuePreview,NewValuePreview有两个子状态state1,state2。

    • 子状态机
      这个url文档原话说的是The state machine that contains the submachine state is called the containing state machine.怎么理解这句话呢?我的理解是父类状态机包含子类状态机的状态。实际场景就是主子订单,1笔主订单可能包含多笔子订单,主订单和子订单都有订单状态,比如待支付,已支付,已取消,配送中,售后中等。

    Pseudostate

    有如下几种类型,简单可以理解为一些预定义的状态。

    • Initial Pseudostate


      初始化
    • Terminate Pseudostate


      结束
    • Entry Point


      进入节点
    • Exit Point


      退出节点
    • Choice 选择分支
    • Fork


      多线程派发
    • Join


      线程归并
    • Junction


      结合
    • Shallow History Pseudostate
      包含H的圆圈


      浅复制
    • Deep History Pseudostate
      包含H*的圆圈

    • Final State
      uml定义其为state的子类,但是不是一种pseudostate


      结束状态

    transition

    vertex对应状态机图上的节点,transition就有对应的转换。转换一般如下描述

    transition ::= [ triggers ]  [ guard ]  [ '/' behavior-expression ]
    

    triggers是触发事件,guard是检查是否能触发的约束,behavior-expression是触发后会执行的动作。
    举个例子,

     left-mouse-down(coordinates) [coordinates in active_window] / link:=select-link(coordinates);link.follow()
    

    按下鼠标左键(left-mouse-down(coordinates) )是一个trigger,但是不一定会触发,需要满足guard约束(坐标需要在激活的窗口 ),如果满足就会触发behavior:link和link.follow。

    behavior state machine小结

    重新看上面的behavior state machine示意图,应该就很好理解了。注意下Customer Authentication和Transaction中的两个圆圈是Decomposition compartment ,简单可以理解为隐藏其中的细节。

    protocol state machine

    大致内容和上面一样,protocol state machine可以描述对象的生命周期。先看个示意图

    • 示意图 User Account

      protocol state machine的transition和上面的有点不同,它的表达式是

    protocol-transition ::= [ pre-condition ]  [trigger](https://www.uml-diagrams.org/common-behaviors.html#trigger-syntax) '/'  [ post-condition ]
    
    

    举个例子,上面的图New到Active,pre-condition是验证账户(比如身份证,手机号),激活账号(trigger),post-condition(验证唯一性)。

    参考资料

    https://www.uml-diagrams.org/state-machine-diagrams.html
    https://doc.qt.io/archives/qt-4.8/statemachine-api.html
    https://sparxsystems.com/resources/tutorials/uml2/state-diagram.html
    https://plantuml.com/zh/state-diagram

    相关文章

      网友评论

          本文标题:状态机基础知识

          本文链接:https://www.haomeiwen.com/subject/knbcaktx.html