发表于: 2018-04-23 23:22:20

1 531


今天的完成:

今天把任务2-4样式全部写完了。

今天的问题:

对有限状态机的实际操作还有一些问题

今天的收获:

在理论上,对有限转态机有一定的了解,理解它实现的原理。

状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:

①现态:是指当前所处的状态。

②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。


这里需要注意的两个问题:

1、避免把某个“程序动作”当作是一种“状态”来处理。那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。

2、状态划分时漏掉一些状态,导致跳转逻辑不完整。

所以维护上述一张状态表就非常必要,而且有意义了。从表中可以直观看出那些状态直接存在跳转路径,那些状态直接不存在。如果不存在,就把对应的单元格置灰。 每次写代码之前先把表格填写好,并且对置灰的部分重点review,看看是否有“漏态”,然后才是写代码。QA拿到这张表格之后,写测试用例也是手到擒来。

这里展示一个简单的例子


这是一个交通信号灯的例子,从绿色变成黄色,然后从黄色的状态变成红色,红色再变成黄色,最后变成绿色。


var fsm = StateMachine.create({

  

    initial: 'green',

  

    events: [

      { name: 'warn',  from: 'green',  to: 'yellow' },

      { name: 'stop', from: 'yellow', to: 'red' },

      { name: 'ready',  from: 'red',    to: 'yellow' },

      { name: 'go', from: 'yellow', to: 'green' }

    ]

  

  });

交通信号灯的初始状态(initial)为green,events属性是触发状态改变的各种事件,比如warn事件使得green状态变成yellow状态,stop事件使得yellow状态变成red状态等等。

今天就是初步了解了一下,可能了解的不够深入。

明天的任务:

继续了解有限状态机的运行原理。


返回列表 返回列表
评论

    分享到