状态机基础知识

2021-01-09  本文已影响0人  捞月亮的阿汤哥

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

状态机的分类

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

behavior state machine

vertex

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

state

state可以描述状态,可以分为三种类型。分别是简单状态(simple state),复合状态(composite state), 子状态(submachine 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可以描述对象的生命周期。先看个示意图

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

上一篇 下一篇

猜你喜欢

热点阅读