状态机的最基本概念是state(状态),transition(转换)和event(事件)。每个状态包含若干转换,这些转换定义了如何响应事件。事件可以是状态机本身产生,也可以来源于外部实体。传统的状态机中,状态机总是处于唯一的状态,这个状态被称为活动状态。当有事件发生,状态机检测活动状态相关的转换,如果发现某个转换与发生的事件匹配,就会将活动状态转移到转换中定义的目标状态。这个目标状态就成为当前的活动状态。
SCXML基于Harel状态图,对这些概念进行了扩展。首先,每个状态不仅包括转换,还可以包括action(活动),这些活动在进入(onentry)和退出(onexit)状态时进行。转换也可以包含活动,这些活动在转换时执行。如果从状态S1通过转换T到状态S2,那么,首先执行S1的onexit活动,然后执行T的活动,最后执行S2的onentry活动。
第二个扩展是在转换中增加了条件(cond),如果转换没有关联事件,那么如果条件成立,就会发生转换。如果有关联事件,那么需要关联事件和条件同时成立时转换。如果有多个转换关联了相同的事件,那么按顺序执行第一个符合条件的转换。
网友评论