状态机简单介绍

1、状态机要素 

能够把状态机的要素分为4个要素,即:现态、条件、动做、次态。
“现态”和“条件”是因,“动做”和“次态”是果。spa

(1)现态:是指当前所处状态;
(2)条件:又称为“事件”。当条件被知足时,将会触发一个动做,或者执行一次状态的迁移。
(3)动做:条件知足后执行的动做。动做不是必须的,当条件知足后,也能够不执行任何动做,直接迁移到新状态。
(4)次态:条件知足后要迁移往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。blog

2、状态迁移图(STD)

(1)状态框:用方框表示状态,包括所谓的“现态”和“次态”;
(2)条件及迁移箭头:用箭头表示状态迁移的方向,并在该箭头上标注触发条件;
(3)节点圆圈:当多个箭头指向一个状态时,能够用节点符号(小圆圈)链接汇总;
(4)动做框:用椭圆框表示;
(5)附加条件判断框:用六角菱形框表示;进程

3、状态迁移表

4、用状态机思路实现一个时钟程序

首先咱们画出他的状态迁移图:事件

 

 

 而后咱们画出状态迁移表:变量

5、状态机应用注意事项:

注意使用状态机的时候不要出现两种错误:一、“伪态”二、“漏态”
(1)“伪态”:把某个“程序动做”当成一种“状态”来处理。
(2)“漏态”:在状态划分时漏掉一些状态。bfc

PS:程序

区分状态和伪态:(看二者的本质)
“动做”是不稳定的,即便没有条件的触发,“动做”一旦执行完毕就结束了;
“状态”是相对稳定的,若是没有外部条件的触发,一个状态会一直持续下去。im

6、更复杂的状态机

前面介绍的是一种简单的状态结构。它只有一级,而且只有一维,它的结构图以下所示:d3

 

 

 若是有必要,咱们能够创建更复杂的状态机模型。如:img

一、多级状态结构。

状态机能够是多级的。在分层的多级状态机系统里面,一个“父状态”下能够划分多个“子状态”,这些子状态共同拥有上级父状态的某些共性,同时又各自拥有本身的一些个性。

 

 

二、多维状态结构。

状态机也能够是多维的。从不一样的角度对系统进行状态的划分,这些状态的某些特性是交叉的。好比,在按照按键和显示划分状态的同时,又按照系统的工做进程作出另外一种状态划分。这两种状态划分同时存在,相互交叉。从而构成了二维的状态结构空间。

说明一下,每一维的状态都须要用一个状态变量(寄存器)来表示。

 

最后我想说一下:无论是什么样子的程序写成状态机,只有一个原则,那就是简单的才是最有效的!!

相关文章
相关标签/搜索