什么是状态机?
什么是状态机?
“状态机”属于计算机理论方面的专业词汇,其定义是:
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。
“状态机”是个高大上的字眼,与之类似的还有“空间”。关于“空间”理解,我之前专门写过这样一段话:
我们知道,内存分为两部分,一部分被用户占用,一部分被操作系统占用,这个道理学过计算机的人都知道。但是,内存这个概念太土了,科学家们聚到一起开会的时候,总不能你一句内存,我一句内存的讨论问题吧,这不是成了电脑维修了。为了显示清高,科学家们随后就想了一个更高大上的字眼:空间。人类的世界就是由空间和时间构成的,而在计算机世界里面,也有了“空间”之说,立马是不是觉得变得高大上了呢。
同样道理,一群科学家围在一起,一口一个状态,变来变去,肯定把大家都绕晕了,使用状态机,不仅简单明了,更显得高大上。对于程序员来说,它还是一个抽象的数学模型。抽象在哪里呢?请君往下看:
先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed 。
状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。
自动门有两个状态,open 和 closed ,closed 状态下,如果读取开门信号,那么状态就会切换为 open 。open 状态下如果读取关门信号,状态就会切换为 closed 。
状态机的全称是有限状态自动机,自动两个字也是包含重要含义的。给定一个状态机,同时给定它的当前状态以及输入,那么输出状态时可以明确的运算出来的。例如对于自动门,给定初始状态 closed ,给定输入“开门”,那么下一个状态时可以运算出来的。
这样状态机的基本定义我们就介绍完毕了。重复一下:状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。
状态机的四大概念
下面来给出状态机的四大概念。
第一个是 State ,状态。一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。
第二个是 Event ,事件。事件就是执行某个操作的触发条件或者口令。对于自动门,“按下开门按钮”就是一个事件。
第三个是 Action ,动作。事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action 一般就对应一个函数。
第四个是 Transition ,变换。也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。
编写代码的时候,有时会遇见较为复杂的swith...case...和if...else...语句。这一刻有时会想到状态机,用有限状态机替换swith...case...和if...else...,请参考这个介绍:
状态机的应用场景
https://segmentfault.com/a/1190000021126332?utm_source=tag-newest