一种状态机控制方法、装置及状态机系统转让专利

申请号 : CN201010553679.9

文献号 : CN102467414B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蔡学镛

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本申请公开了一种状态机控制方法、装置及状态机系统。一种状态机控制方法包括:A.将状态机的当前活跃状态更新为所述状态机的初态;B.获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;C.根据匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;D.判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述状态机的运行,否则返回步骤B。本申请所提供的状态机控制方法,适用于各种状态机定义,可以使用各种程序语言实现,不受硬件与软件环境的限制。大大降低了基于状态机的应用系统的开发难度及开发成本。

权利要求 :

1.一种状态机控制方法,其特征在于,用于在计算机中控制UML绘制的状态图所定义的状态机的运行,其中,所述状态图的状态定义中包含复合状态,其中,复合状态内的每个区域都是并发运行的,每个区域内有自己的状态图,包括:A.将运行在计算机中的状态机的当前活跃状态更新为所述状态机的初态;

B.获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;其中,如果当前活跃状态为复合状态,则所述将基础事件与当前活跃状态的各个迁移条件分别进行匹配具体为仅将基础事件与当前活跃状态的子状态的各个迁移条件分别进行匹配;

C.根据匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;

D.判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述状态机的运行,否则返回步骤B。

2.根据权利要求1所述的方法,其特征在于,如果所述状态机的定义中包括短路迁移,则在获得基础事件之前,还包括:判断当前活跃状态是否存在短路迁移,如果是,则执行该短路迁移,并根据迁移结果对当前活跃状态进行更新;

其中,所述短路迁移为:不需要事件触发的状态迁移。

3.根据权利要求1所述的方法,其特征在于,所述根据迁移结果对当前活跃状态进行更新,包括:如果复合状态中的某个子状态迁移到终态,则在当前活跃状态中,移除该子状态。

4.一种状态机控制装置,其特征在于,用于在计算机中控制UML绘制的状态图所定义的状态机的运行,其中,所述状态图的状态定义中包含复合状态,其中,复合状态内的每个区域都是并发运行的,每个区域内有自己的状态图,包括:初始化单元,用于将运行在计算机中的状态机的当前活跃状态更新为所述状态机的初态;

匹配单元,用于获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;如果当前活跃状态为复合状态,则匹配单元仅将基础事件与当前活跃状态的子状态的各个迁移条件分别进行匹配迁移单元,用于根据所述匹配单元匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;

结束运行单元,用于在当前活跃状态进行更新后,判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述的状态机运行。

5.根据权利要求4所述的装置,其特征在于,如果所述状态机的定义中包括短路迁移,则所述装置还包括:短路迁移单元,用于在所述匹配单元获得基础事件之前,判断当前活跃状态是否存在短路迁移,如果是,则执行该短路迁移,并根据迁移结果对当前活跃状态进行更新;

其中,所述短路迁移为:不需要事件触发的状态迁移。

6.根据权利要求4所述的装置,其特征在于,所述迁移单元根据迁移结果对当前活跃状态进行更新,包括:如果复合状态中的某个子状态迁移到终态,则在当前活跃状态中,移除该子状态。

7.一种状态机,其特征在于,包括如权利要求4至6任一项所述的状态机控制装置。

8.一种状态机系统,其特征在于,包括状态机以及如权利要求4至6任一项所述的状态机控制装置。

说明书 :

一种状态机控制方法、装置及状态机系统

技术领域

[0001] 本申请涉及计算机应用技术领域,特别是涉及一种状态机控制方法、装置及状态机系统。

背景技术

[0002] 状态机(state machine)定义了多个状态以及状态之间的迁移。状态机通过响应一系列事件而运行,当事件满足某些触发条件时,将导致状态机从当前的状态迁移到下一个状态。在所定义的多个状态之中,存在至少一个初态和至少一个终态,状态机从初态开始运行,当迁移到终态时,状态机停止运行。
[0003] 状态机在计算机领域应用非常广泛,许多系统都使用到状态机。状态机根据状态机定义(状态图)来运行。根据系统实现功能的不同,相应的状态定义也千变万化。现有技术中,针对不同的状态定义,需要分别设计不同的状态机控制方法。并且,一旦状态机的定义有变动(例如增加或减少一个状态等等),都会导致状态机控制程序代码的大量修改,这在很大程度上增加了基于状态机的应用系统的开发难度及开发成本。

发明内容

[0004] 为解决上述技术问题,本申请实施例提供一种状态机控制方法、装置及状态机系统,其适用于各种状态机定义,以降低基于状态机的应用系统的开发难度及开发成本,本申请技术方案如下:
[0005] 本申请实施例还提供一种状态机控制方法,包括:
[0006] A.将状态机的当前活跃状态更新为所述状态机的初态;
[0007] B.获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;
[0008] C.根据匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;
[0009] D.判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述状态机的运行,否则返回步骤B。
[0010] 本申请实施例还提供一种状态机控制装置,包括:
[0011] 初始化单元,用于将状态机的当前活跃状态更新为所述状态机的初态;
[0012] 匹配单元,用于获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;
[0013] 迁移单元,用于根据所述匹配单元匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;
[0014] 结束运行单元,用于在当前活跃状态进行更新后,判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述的状态机运行。
[0015] 本申请实施例还提供一种状态机,包括如上所述的状态机控制装置。
[0016] 本申请实施例还提供一种状态机系统,包括如上所述的状态机控制装置。
[0017] 本申请实施例所提供的状态机控制方法,适用于各种状态机定义,可以用各种程序语言实现,不受硬件与软件环境的限制。大大降低了基于状态机的应用系统的开发难度及开发成本。此外,本申请所提供的状态机控制方法,还可以支持包含复合状态的状态定义,从而更有利于应用系统实现更为复杂多样的功能。

附图说明

[0018] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
[0019] 图1为本申请实施例状态机控制方法的一种流程图;
[0020] 图2为本申请第一具体实施例的状态机定义示意图;
[0021] 图3为本申请实施例状态机控制方法的另一种流程图;
[0022] 图4为本申请第二具体实施例的状态机定义示意图;
[0023] 图5为本申请实施例状态机控制装置的一种结构示意图;
[0024] 图6为本申请实施例状态机控制装置的另一种结构示意图;
[0025] 图7为本申请实施例状态机系统的结构示意图。

具体实施方式

[0026] 为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请保护的范围。
[0027] 图1所示为本申请实施例所提供的一种状态机控制方法流程图,该方法可以包括以下步骤:
[0028] S101.将状态机的当前活跃状态更新为所述状态机的初态;
[0029] S102.获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;
[0030] S103.根据匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;
[0031] S104.判断当前活跃状态是否为所述状态机的终态,如果是,则结束状态机的运行,否则返回步骤S102。
[0032] 其中,上述状态机控制方法任意步骤的执行主体,可以是状态机本身,也可以是位于状态机内部、或独立于状态机的一个功能实体。
[0033] 在上述的状态机控制方法中,定义了一个“当前活跃状态”,当状态机开始运行后,当前活跃状态被初始化为状态机的初态,后续每次状态机的状态发生变化,都会将该当前活跃状态更新至转移后的状态,然后再次等待下一次状态更新。可见,上述方法适用于状态机的任意一个状态,因此不会受到状态机定义变化的影响。
[0034] 复合状态(Composite State)在状态机设计中具有重要意义,使用复合状态可以实现更为复杂和多样的系统功能,现有技术的状态机控制方法需要编写大量的代码,而应用上述所提供的状态机控制方法,只需定义简单的数据结构,就可以支持对复合状态的处理。
[0035] 例如,当前活跃状态表示为[A[CDE[F]]B],A是复合状态,C、D、E是A的子状态;E也是复合状态,F是E的子状态。
[0036] 如果当前活跃状态是复合状态,则在将基础事件与当前活跃状态的各个迁移条件分别进行匹配时,可以仅将基础事件与当前活跃状态的子状态的各个迁移条件分别进行匹配,以[A[CDE[F]]B]为例,由于A是复合状态,因此不需对A进行匹配,而是直接对其子状态C、D、E进行匹配。同时E也是复合状态,因此不需对E进行匹配,而是直接对其子状态F进行匹配。也就是说,如果当前活跃状态为[A[CDE[F]]]B],则只需将基础事件与B、C、D、F的迁移条件进行匹配。
[0037] 根据上述对复合状态的处理方法,如果复合状态中的某个子状态迁移到终态,则在对当前活跃状态的更新过程中,可以在当前活跃状态中,移除该子状态。例如对于[A[CDE[F]]B],如果状态F迁移到了终态,则可以将当前活跃状态更新为[A[CDE[]]B],其中[]代表空集,可以进一步移除,因此,当前活跃状态的最终更新结果为[A[CDE]B]。
[0038] UML(Unified Modeling Language,统一建模语言)是目前应用最为普遍的状态图表达方式,本申请所提供的状态机控制方法,可以很好地支持UML(Unified Modeling Language,统一建模语言)绘制的状态图。
[0039] UML对状态图的标准描述中,包含两个主要组件:状态(state)与迁移(transition),状态内可以切割出不同的区域(Region),每个区域内又可以有自己的状态图。
[0040] 图2所示为采用UML建立的一种状态机定义示意图,在该状态机定义中,共有十个状态(S1-S10)、八个迁移(T1-T8)、两个区域(R1-R2)。其中,初态绘成实心圆(S1、S4、S7),终态绘成具同心环的实心圆(S6、S9、S10),其他状态绘成圆角矩行(S2、S3、S5、S8)。其中S3是一个复合状态,包含两个区域(R1与R2),这两个区域用虚线隔开。一个复合状态内的每个区域都是并发运行的。
[0041] 下面结合本申请所提供的状态机控制方法,对图3所示状态机的运行过程进行说明:
[0042] 首先对状态机进行初始化:状态机的初态为S1,所以将当前活跃状态设置为[S1];
[0043] 新的基础事件E1进入状态机:从当前活跃状态中找到S1,发现S1有一个迁移为T1,此迁移会进入S2。经过匹配,发现E1符合T1的描述,所以运行T1,并将当前活跃状态中的S1用S2取代。当前活跃状态更新为[S2];
[0044] 新的基础事件E2进入状态机:从当前活跃状态中找到S2,发现S2有一个迁移为T8,此迁移会进入S10。经过匹配,发现E2不符合T8的描述,所以不运行T8;接着找到S2的另一个迁移T2,此迁移会进入S3。经过匹配,发现E2符合T2的描述,所以运行T2,并将当前活跃状态中的S2用S3取代。当前活跃状态为[S3]。由于S3是一个复合状态,所以在S3之后需要紧接着插入S3内所有区域的初始状态,于是当前活跃状态更新为[S3[S4 S7]];
[0045] 新的基础事件E3进入状态机:从当前活跃状态中找到S3,发现S3后面跟着一个集合[S4 S7],这表示S3是一个尚未完成的复合状态,所以不必处理S3。继续往下,找到S4,发现S4有一个迁移为T3,此迁移会进入S5。经过匹配,发现E3符合T4的描述,所以运行T3,将S4改为S5,当前活跃状态更新为[S3[S5 S7]];
[0046] 新的基础事件E4进入状态机:S3不必参与匹配(因为后面是集合),S5的迁移(T4)则参与匹配,且匹配成功,S5被带换成S6。当前活跃状态为[S3[S6 S7]]。由于S6是终态,所以将其移除,当前活跃状态更新为[S3[S7]];
[0047] 新的基础事件E5、E6依序进入状态机:于是当前活跃状态依序变成[S3[S8]]与[S3[S9]],由于S9是终态,所以会被移除,当前活跃状态变成[S3[]],接着把空集合移除,当前活跃状态更新为[S3];
[0048] 新的基础事件E7进入状态机:从当前活跃状态中找到S3,发现S3有一个迁移为T7,此迁移会进入S10。经过匹配,发现E7符合T7的描述,所以运行T7;当前活跃状态变成[S10]。由于S10是一个终态,所以会被移除,当前活跃状态更新为[]。由于当前活跃状态为空,状态机运行完毕。
[0049] 在状态机的运行过程中,一般是由基础事件触发状态机状态的迁移,为了满足实际应用的需要,还定义了一种不需要事件触发的状态迁移,这类状态迁移称为短路(Short-circuit)迁移。
[0050] 图3所示为本申请实施例所提供的另一种状态机控制方法流程图,该方法中包括了对短路迁移的处理,可以包括以下步骤:
[0051] S201,将状态机的当前活跃状态更新为
[0052] 所述状态机的初态。
[0053] S202,判断当前活跃状态是否存在短路迁移,如果是,则执行S203,否则执行S204。
[0054] S203,执行短路迁移,并根据迁移结果对当前活跃状态进行更新。
[0055] S204,获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配。
[0056] S205,根据匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新。
[0057] S206,判断当前活跃状态是否为状态机的终态,如果是,则结束状态机的运行,否则返回步骤S202。
[0058] 与前面的实施例相比,上述的状态机控制方法中,进一步增加了对短路迁移的处理。如果在状态机的定义中包括短路迁移,那么在状态机每次迁移到一个新状态之后,需要立即(在接收到基础事件之前)检查该新状态是否存在短路迁移,如果新状态存在短路迁移,则执行该短路迁移,并根据迁移结果对当前活跃状态再次进行更新;如果新状态不存在,则等待基础事件的输入,再根据基础时间进行普通状态迁移。
[0059] 下面再结合一个网络交易系统的具体应用实例,对包含短路迁移的状态机控制方法进行说明。
[0060] 图4所示的状态机定义中,共有十个状态(S1-S10)、三个迁移(T1-T8)、两个区域(R1-R2)。其中,S1、S4、S7为初态,S6、S9、S10为终态,S2为状态“等待创建”,S3为状态“交易进行中”,是一个复合状态,S5为状态“等待付款”,S7表示状态“等待送货”,其中复合状态S3内的两个区域是并发运行的。
[0061] 首先对状态机进行初始化:状态机的初态为S1,所以将当前活跃状态设置为[S1],S1与S2短路,所以直接迁移至S2(等待交易创建),并再次更新当前活跃状态为[S2];
[0062] 用户创建交易,产生T1基础事件,S2迁移至S3(交易进行中),而S3是一个复合状态,所以当前活跃状态更新为[S3[S4 S7]];
[0063] S4与S5短路,S7与S8也是短路,所以当前活跃状态更新为[S3[S5 S8]]。即:交易进行中(等待付款、等待送货);
[0064] 付款动作导致T2基础事件,S5迁移至S6,当前活跃状态更新为[S3[S6 S8]]。由于S6是终态,所以会被消除,活跃状态成为[S3[S8]];
[0065] 送货动作导致T3基础事件,S8迁移至S9,当前活跃状态更新为[S3[S8]]。由于S8是终态,所以会被消除,当前活跃状态成为[S3[]],再消除[],当前活跃状态成为[S3]。
[0066] S3与S10短路,所以直接将S3迁移至S10。当前活跃状态成更新为[S10]。由于S10是终态,所以会被消除,当前活跃状态更新为[]。此时当前活跃状态为空,状态机运行完毕,一次交易正常完成。
[0067] 相应于上面的方法实施例,本申请还提供一种状态机控制装置,参见图5所示,包括:
[0068] 初始化单元301,用于将状态机的当前活跃状态更新为所述状态机的初态;
[0069] 匹配单元302,用于获得输入所述状态机的基础事件,将所述基础事件与当前活跃状态的各个迁移条件分别进行匹配;
[0070] 迁移单元303,用于根据所述匹配单元匹配成功的迁移条件,对所述状态机执行状态迁移,并根据迁移结果对当前活跃状态进行更新;
[0071] 结束运行单元304,用于在当前活跃状态进行更新后,判断当前活跃状态是否为所述状态机的终态,如果是,则结束所述状态机运行。
[0072] 参见图6所示,如果所述状态机的定义中包括短路迁移,则所述装置还可以包括:
[0073] 短路迁移单元305,用于在所述匹配单元获得基础事件之前,判断当前活跃状态是否存在短路迁移,如果是,则执行该短路迁移,并根据迁移结果对当前活跃状态进行更新;
[0074] 其中,如果状态机的当前活跃状态为复合状态,则匹配单元302可以仅将基础事件与当前活跃状态的子状态的各个迁移条件分别进行匹配。
[0075] 所述迁移单元303根据迁移结果对当前活跃状态进行更新,具体可以包括:如果复合状态中的某个子状态迁移到终态,则在当前活跃状态中,移除该子状态。
[0076] 本申请实施例所提供的状态机控制装置,可以是状态机本身,也可以是内置于状态机中,还可以是独立于状态机的功能实体,针对状态机控制装置独立于状态机的情况,本申请实施例还提供一种状态机系统,参见图7所示,该系统包括状态机401和状态机控制装置402。其中,所述状态机控制装置402可以与前述的状态机控制装置相同,这里不再重复说明。
[0077] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0078] 通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
[0079] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置和系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0080] 本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0081] 本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0082] 以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。