CN102103497A - 有限状态机执行装置和方法、在应用中的建立和使用方法 - Google Patents
有限状态机执行装置和方法、在应用中的建立和使用方法 Download PDFInfo
- Publication number
- CN102103497A CN102103497A CN2009102624827A CN200910262482A CN102103497A CN 102103497 A CN102103497 A CN 102103497A CN 2009102624827 A CN2009102624827 A CN 2009102624827A CN 200910262482 A CN200910262482 A CN 200910262482A CN 102103497 A CN102103497 A CN 102103497A
- Authority
- CN
- China
- Prior art keywords
- state
- class
- concrete
- finite
- state machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了有限状态机执行装置和方法、以及在应用中建立和使用有限状态机的方法,有限状态机执行方法包括:接收触发事件;获取有限状态机的当前状态,并根据输入事件以及状态转移表,获取当前状态要转移至的下一状态;借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及使用获取的下一状态更新当前状态。本发明结合了面向对象的状态模式和Flyweight模式的原理,对有限状态机的执行逻辑进行了改进,建立了单实例模式的具体状态类,避免了对象的重复创建和删除,从而在用于各种应用的开发、模型化等场合时,能够减少系统的资源消耗,加快应用的执行速度和效率。
Description
技术领域
本发明涉及有限状态机(Finite State Machine,FSM),具体涉及有限状态机执行装置和方法、以及在应用中建立和使用有限状态机的方法。
背景技术
有限状态机(FSM)能够有效、方便地描述系统和组件的动态行为,其广泛应用于电信软件应用开发。FSM具有有限个状态,一般包括状态及状态之间的转移关系。目前,在软件编程工程中普遍采用两种方法来实现FSM。一种是采用过程语言,例如C语言,采用这种方法实现的FSM实质上是由条件语句描述的,其在维护和扩展方面的性能较差。另一种方法是采用面向对象语言,例如C++或Java,按照一定的状态模式来描述FSM,这种面向对象的编程方式易于维护和开发,由此在目前的软件应用开发中更加普遍。
采用面向对象的状态模式来执行FSM,能够满足易于维护和扩展的要求。但是,面向对象语言的原则就是一切都是对象,每个对象都有自己的生命周期。当应用于实际所需的FSM模型建立时,有时对象的数量可能很庞大。例如,文字处理软件应用中,如果每个文字都作为一个对象,则几千个字就需要创建几千个对象。这些对象的创建和删除会占用大量系统资源,消耗大量存储空间,带来很大的运行时间开销。
因此,需要一种FSM的执行和应用方案,其能够减少采用面向对象语言的FSM时对象的数量,从而减少对运行该FSM的应用的存储空间的占用,降低运行时间开销,提高系统整体性能。
发明内容
为解决上述问题,根据本发明一方面,提出了一种有限状态机执行装置,包括:
引擎单元,用于接收输入事件,作为有限状态机的触发事件;
存储单元,用于存储有限状态机的当前状态以及状态转移表,状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
状态类定义单元,用于根据有限状态机的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据由引擎单元接收的输入事件来进行预定处理;以及
执行单元,用于从存储单元中获取当前状态,并根据引擎单元提供的输入事件以及存储单元中存储的状态转移表,获取当前状态要转移至的下一状态,并且通过基本状态类,确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及执行单元还使用获取的下一状态更新存储单元中的当前状态。
本发明的有限状态机执行装置具有通用性,能够用于多种应用场合。
优选地,有限状态机执行装置还包括:解析器,用于预先对有限状态机状态转移的描述进行解析,以获得要存储于存储单元的状态转移表。
由此,可以预先采用例如XML来描述有限状态机的状态转移,并采用解析器进行解析,获得状态转移关系。当应用场合改变时,可以通过改变XML描述来反映应用变化,方便了有限状态机的建立和使用。
优选地,执行单元还用于在有限状态机的状态发生改变时,修改状态类定义单元定义的具体状态类,并更新存储单元中存储的当前状态以及状态转移表。
这样,当有限状态机的状态发生改变时,例如增加了新状态时,只需要定义一个新的具体状态类,并相应地改变状态转移关系。同样,当删除状态时,也只需要删除相应的具体状态类。避免了重新设计整个有限状态机,加快了开发速度。
优选地,属于基本状态类的一个或多个具体状态类是通过继承基本状态类而获得的。
这是根据面向对象的状态模式而设计的,具体状态类是基本状态类的继承类,基本状态类扮演具体状态类与其他部分的接口,具体状态类的改变不需要或者只需要略微改变基本状态类,从而可以保持与其他部分的接口不发生显著变化,这有利于有限状态机的扩展。
优选地,每一个具体状态类是单实例模式。在使用具体状态类进行预定处理时,创建该具体状态类的对象实例,以用于进行预定处理。
单实例模式表示每一个具体状态类只有一个实例,利于维护。并且具体状态类根据应用的运行时间环境而动态地创建所需的对象实例,来进行所需处理,这样不需要重复地创建、维护和删除对象实例,节约了系统资源。
根据本发明另一方面,提出了一种有限状态机执行方法,包括:
接收输入事件,作为有限状态机的触发事件;
获取有限状态机的当前状态,并根据输入事件以及状态转移表,获取当前状态要转移至的下一状态,所述状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及使用获取的下一状态更新当前状态。
根据本发明另一方面,提出了一种建立针对应用的有限状态机的方法,包括:
根据应用中多个组件具有的状态、状态改变以及触发状态改变的事件,确定有限状态机的各个状态以及状态转移表,状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
根据所确定的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据所述应用的运行时间环境来进行预定处理;以及
根据所确定的各个状态和状态转移表、以及定义的基本状态类和具体状态类,建立针对该应用的有限状态机。
优选地,应用中的多个组件具有的状态相同,并且各个具体状态类分别对应于多个组件所具有的各个状态。
优选地,每一个具体状态类能够根据应用的运行时间环境,动态地创建对象实例,以代表应用中相应的组件,来进行预定处理。
根据本发明另一方面,提出了一种在应用中使用有限状态机的方法,所述有限状态机是上述建立方法而针对所述应用建立的,使用有限状态机的方法包括:
接收输入所述应用的事件,该输入事件包括标识了所述应用的多个组件之一的指示;
根据该输入事件,从预先存储的多个组件及其当前状态中,获取由所述指示标识的组件及其当前状态;
根据所获取的组件及其当前状态,借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类;
使用所确定的具体状态类,创建代表所获取的组件的对象实例,以进行预定处理。
在采用面向对象设计模式的现有技术中,通常针对每个对象建立有限状态机来执行相应的处理,并且还要维护并且在该对象的生命周期结束时删除其对应的有限状态机,这会带来大量的系统资源消耗。在本发明中,不再逐个对象地执行有限状态机,而是根据应用,预先存储有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件,并且根据有限状态机的各个状态,定义了基本状态类、以及属于该基本状态类的一个或多个具体状态类,这些类是在各个对象之间共享的。由此,当针对某个对象发生输入事件时,确定与该对象当前状态对应的具体状态类,并使用该具体状态类创建该对象的代表实例,以进行相应的处理。这里,具体状态类是永久性的,不再存在临时建立、维护和删除对象的系统资源消耗,并且维护具体状态类的开销也不大。由此,可以减少内存消耗和运行时间开销,提高系统执行效率。
附图说明
图1示出了根据本发明实施例的有限状态机执行装置的示意框图;
图2示出了基本状态类与具体状态类的关系示意图;
图3示出了本发明有限状态机执行装置的执行过程的流程图;
图4示出了Diameter连接的状态及状态改变;
图5示出了采用传统方法的Diameter连接及其状态对应的示意图;
图6示出了建立针对应用的有限状态机的方法的流程图;
图7示出了采用本发明方法的Diameter连接及其状态对应的示意图;以及
图8示出了根据本发明实施例的在应用中使用有限状态机的方法流程图。
具体实施方式
在采用面向对象语言的软件应用开发中,通常存在大量的细粒度对象,这些对象是很小的类的实例,例如,在游戏中,可能会用到很多模型数据,这些数据在不同的游戏位置出现,有的可能反复使用多次。如果将每个模型数据都看作对象,那么为这些模型数据创建、维护和删除其抽象化的对象会消耗大量的存储空间和运行时间,降低系统整体性能。另一方面,这些细粒度对象彼此可能相同或相似,或者从本质上来讲,仅仅存在少数几个类,细粒度对象之间的固有属性相同,不同的仅仅是基于应用环境或时间等非固有属性。因此,可以考虑将固有属性相似或相同的对象划分到同一类,为它们创建一个基本对象,作为原始模型,然后根据不同的应用环境和/或时间,在该原始模型的基础上产生不同的具体对象。这样,能够避免相似类的大量重复,实现资源共享,提高程序效率和性能。这就是Flyweight(享元)模式,该模式解决的主要问题是由于(同类)对象的数量太大,采用面向对象的设计时会给系统带来难以承受的存储开销和资源占用。在Flyweight模式中,通常找出对象的共同点,设计一个元类,封装可以共享的类,这些类可以被对象共享。
因此,可以考虑将面向对象设计中的Flyweight模式的原理应用于有限状态机的建立和执行,以减少内存消耗和运行时间开销,提高执行效率。
参照Flyweight模式的原理,提出了本发明的有限状态机执行装置,在该有限状态机执行装置中,对有限状态机的执行逻辑进行了改进,从而在用于各种应用的开发、模型化等场合时,能够减少系统的资源消耗,加快应用的执行速度和效率。
以下结合附图,详细描述本发明的具体实施例。
图1示出了根据本发明实施例的有限状态机执行装置10的示意框图,包括引擎单元110、存储单元120、状态类定义单元130和执行单元140。优选地,有限状态机执行装置10还可以包括解析器150。
引擎单元110接收输入事件,作为有限状态机的触发事件。引擎单元110是有限状态机的触发引擎,从外部接收触发事件。引擎单元110可以保持消息队列,当从外部接收到消息时,将消息保存于该消息队列。然后,可以根据输入的事件,从消息队列中获取相应的消息,以触发有限状态机。
存储单元120存储有限状态机的当前状态以及状态转移表。存储单元120可以主要分为两个部分或者由两个存储器来实现,分别存储有关当前状态的数据和状态转移表。状态转移表是包括有限状态机的状态转移信息的表,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件。状态转移表是可以预先设置的,或者可以由解析器150预先对有限状态机状态转移的描述进行解析,来获得并存储在存储单元120中。对有限状态机状态转移的描述可以采用适当的编程语言,例如,可以采用XML,从而解析器150对XML描述进行解析。在本发明中,如果需要对有限状态机进行修改,可以通过修改状态转移表或者修改对有限状态机状态转移的描述来实现,这确保了本发明的有限状态机执行装置易维护、易修改、易扩展,以及确保了其通用性。此外,这种修改可以预先进行,确保了执行速度和效率。
状态类定义单元130根据有限状态机的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据由引擎单元110接收的输入事件来进行预定处理。图2示出了状态类定义单元130定义的基本状态类与具体状态类的关系示意图。这是根据面向对象的状态模式而设计的,具体状态类是基本状态类的继承类,基本状态类扮演具体状态类与其他部分的接口,具体状态类的改变不需要或者只需要略微改变基本状态类,从而可以保持与其他部分的接口不发生显著变化,这有利于有限状态机的扩展。这是常规的面向对象的状态模式设计中已知的,在本发明中不再对其进行具体描述。
此外,每一个具体状态类是单实例模式(Singleton),单实例模式表示每一个具体状态类只有一个实例,利于维护,同时也意味着不需要重复地创建属性或特性相同或相似的多个对象,这体现了Flyweight模式的原理。在使用具体状态类进行预定处理时,才创建该具体状态类的对象实例来进行具体的预定处理。具体状态类是永久性的,从而避免了重复地创建、维护和删除对象实例,节约了系统资源。
执行单元140从存储单元120中获取当前状态,并根据引擎单元110提供的输入事件以及存储单元120中存储的状态转移表,获取当前状态要转移至的下一状态,并且通过基本状态类,确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理。执行单元140还使用获取的下一状态更新存储单元120中的当前状态,以确保有限状态机的连续执行。
执行单元140还可以在有限状态机的状态发生改变时,修改状态类定义单元定义的具体状态类,并更新存储单元中存储的当前状态以及状态转移表。例如,当增加了新状态时,执行单元140可以在状态类定义单元130中定义一个新的具体状态类,并相应地改变状态转移关系。同样,当删除状态时,也只需要删除相应的具体状态类。这避免了重新设计整个有限状态机,加快了开发速度。
图3示出了本发明有限状态机执行装置10的执行过程。在步骤300,引擎单元110接收输入事件,作为有限状态机的触发事件。在步骤302,执行单元140获取有限状态机的当前状态,并根据输入事件以及状态转移表,获取当前状态要转移至的下一状态。在步骤304,执行单元140借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及使用获取的下一状态更新当前状态。备选地,该执行过程还可以包括预先对有限状态机状态转移的描述进行解析,以获得状态转移表的步骤。
如上所述,本发明的有限状态机执行装置10并没有按照现有技术的方法,不断地创建、删除对象实例,而是定义了能够被多个对象共享的、根据各个状态的具体状态类,并且具体状态类可以是单实例模式,并且可以是永久性的。在执行过程中,采用具体状态类动态地创建对象实例以供使用。此外,本发明的有限状态机执行装置10具有可以预定并且容易修改的状态转移表,提供了全部所需的状态、状态转移和触发事件的信息,在执行过程中只需要查找相应的信息,就能够支持状态机的持续执行。同时,对状态机的修改、扩展和删减也很容易实现,避免了重新构造整个状态机。
下面描述根据本发明实施例在应用中建立和使用有限状态机的方法。如上所述,本发明的有限状态机执行装置和方法具有通用性,可以结合到多种应用中,提高应用的执行速度和效率,并减少应用执行所需的系统资源消耗。对于具有状态改变等属性相同的多个组件的应用而言,本发明的有限状态机执行装置和方法尤其适用。
为了清楚说明本发明的在应用中建立和使用有限状态机的方法,下面采用Alcatel-Lucent 5240 ISC Diameter stack作为应用示例,来描述有限状态机的建立和使用。本领域技术人员能够理解,本发明还可以应用于其他应用情况,而不仅仅限于该示例。
在目前的5240 ISC Diameter stack中,一张服务卡可以支持15个Diameter接口,每个接口可以支持最多256个Diameter连接。图4示出了Diameter连接的状态及状态改变,其中包括4个状态:Spare,Transport Trying,Diam-Trying和Diam-Conn。
如果采用常规的面向对象的有限状态机来模型化5240ISCDiameter stack的操作,则需要为每一张服务卡上每一个Diameter接口的每一个Diameter连接创建一个对象,即,总共会存在15*256=3840个对象。此外,还需要为每一个对象维护一个包括上述4个状态及状态改变的有限状态机。以每个对象改变其状态6次为例,则对象的状态转移关系达到了3840*6=23040种,如图5所示。要维护这些对象及其状态和状态转移关系,需要占用大量的存储空间,系统的运行时间开销很大,降低了应用执行的效率和速度。
在本发明实施例中,5240 ISC Diameter stack的操作同样使用面向对象的有限状态机。但是,本发明并不为每一张服务卡上每一个Diameter接口的每一个Diameter连接都创建一个对象。可以看出,各个Diameter连接具有相似或相同的属性,具体而言,它们都具有图4所示的4个状态,其状态改变都在这4个状态之间进行。那么,结合上述本发明有限状态机的执行原理,可以按照图6所示为5240 ISCDiameter stack建立有限状态机。
图6示出了建立针对应用的有限状态机的方法的流程图,作为示例,该应用是5240 ISC Diameter stack的Diameter连接操作。
首先,在步骤600,根据应用中多个组件具有的状态、状态改变以及触发状态改变的事件,确定有限状态机的各个状态以及状态转移表,状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件。具体而言,根据图4所示的4个状态(Spare,Transport Trying,Diam-Trying和Diam-Conn)、状态改变以及触发状态改变的事件,确定Diameter连接的状态转移信息,从而创建状态转移表。触发状态改变的事件例如可以包括针对某个Diameter连接的TCP事件,该事件指示了要建立该Diameter连接与某个地址的链接。状态转移表可以是手动建立的,也可以采用编程语言编写,并采用解析器来解析得到。状态转移表是可以预先创建,并可以根据需要而修改和更新的。状态转移表可以存储在存储单元中。
在步骤602,根据所确定的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据所述应用的运行时间环境来进行预定处理。如上所述,各个Diameter连接都具有图4所示的4个状态,其状态改变都在这4个状态之间进行。根据面向对象的状态模式设计方法,首先根据这4个状态,定义一个基本状态类作为交互接口,然后通过继承该基本状态类,得到与4个状态分别对应的4个具体状态类,可以分别命名为Spare、T-Trying、D-Trying和D-Conn。优选地,每一个具体状态类是永久性的单实例模式,每一个具体状态类能够根据应用的运行时间环境,动态地创建对象实例,以代表应用中相应的组件,来进行预定处理。在5240ISCDiameter stack的多个Diameter连接的情况下,每一个具体状态类能够根据当前是哪一个Diameter连接在活动,来创建代表该Diameter连接的对象实例,以进行该Diameter连接的预定处理或功能。
最后,在步骤604,根据所确定的各个状态和状态转移表、以及定义的基本状态类和具体状态类,建立针对该应用的有限状态机。具体而言,采用上述Diameter连接的状态转移表、以及基本状态类和4个具体状态类Spare、T-Trying、D-Trying和D-Conn,基本上确定了针对5240 ISC Diameter stack的Diameter连接操作的有限状态机。图7示出了Diameter连接及其状态对应的示意图,与图5相比可以看出,对于3840个Diameter连接,不再为每一个连接都建立一个有限状态机,而是将3840个Diameter连接全部映射到4个具体状态类。此时,3840个Diameter连接及其当前状态和操作可以看作5240 ISCDiameter stack应用在运行过程中的不同运行时间环境,从而4个具体状态类中与输入事件所涉及的Diameter连接的当前状态对应的具体状态类,可以创建该Diameter连接的对象实例,以进行相应的处理和操作。
下面,参照图8所示的在应用中使用上述建立的有限状态机的方法流程图,来描述5240 ISC Diameter stack的Diameter连接操作中有限状态机的使用过程。
可以在使用之前或者在首次使用过程中,对有关Diameter连接以及有限状态机的数据进行初始化。例如,可以预先设定有限状态机的初始状态。具体而言,对于5240 ISC Diameter stack中的3840个Diameter连接,为每一个Diameter连接设定其有关信息数据,例如,每一个Diameter连接的有关信息数据可以包括Diameter连接标识ID、应用ID、当前状态值、安全性等等,其中Diameter连接标识ID唯一地标识该Diameter连接,应用ID表示该Diameter连接可用于的应用、当前状态值表示该Diameter连接当前所处的状态。可以针对上述4个状态Spare,Transport Trying,Diam-Trying和Diam-Conn,分别设定代表它们的状态值为0、1、2、3。各个状态值可以与4个具体状态类Spare、T-Trying、D-Trying和D-Conn分别对应。只要获得该Diameter连接的当前状态值,就可以确定相对应的具体状态类。
上述初始化设置可以与状态转移表一起存储在存储单元中,也可以分离地存储,作为数据存储区。
初始化之后,就可以开始有限状态机的使用过程的。在步骤800,接收输入事件,该输入事件包括标识了所述应用的多个组件之一的指示。在Diameter连接的应用场景中,5240 ISC Diameter stack接收输入的事件,例如该事件是指示建立某个链接的TCP事件,TCP事件至少包括该事件涉及的Diameter连接的ID。
在步骤802,根据该输入事件,从预先存储的多个组件及其当前状态中,获取由所述指示标识的组件及其当前状态。参照上述示例,根据TCP事件中包括的Diameter连接的ID,从上述数据存储区中获取相应的Diameter连接及其当前状态值。
在步骤804,根据所获取的组件及其当前状态,借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类。参照上述示例,根据获取的Diameter连接及其当前状态值,通过基本状态类,确定该Diameter连接对应的具体状态类。例如,如果Diameter连接的当前状态值是1,则确定Diameter连接对应的具体状态类是T-Trying。
在步骤806,根据该输入事件以及状态转移表,确定由所述指示标识的组件的下一状态,并利用该下一状态更新该组件的当前状态。参照上述示例,根据获取的Diameter连接及其当前状态值、以及TCP事件,可以从状态转移表中查找到该Diameter连接的下一状态,并利用该下一状态更新当前状态值。由此,可以及时更新数据存储区,确保应用的持续运行。
在步骤808,使用所确定的具体状态类,创建代表所获取的组件的对象实例,以进行预定处理。参照上述示例,在确定Diameter连接对应的具体状态类是T-Trying之后,具体状态类T-Trying创建代表该Diameter连接的对象实例,该对象实例进行该Diameter连接在当前状态下的相应处理,例如,响应于TCP输入事件,建立某个链接等等。
当5240 ISC Diameter stack再次接收到输入的事件时,同样按照上述方法步骤进行操作。无论输入的事件涉及哪一个Diameter连接,都能够通过上述方法,使用有限状态机进行相应的处理。由于不再需要为3840个Diameter连接重复地创建、维护和删除对象,因此可以节省大量的存储空间,减少系统的运行时间开销很大,提高应用执行的效率和速度。
在以上的描述中,针对各个步骤,列举了多个实施例,虽然发明人尽可能地标示出彼此关联的实例,但这并不意味着这些实例必然按照相应的标号存在对应关系。只要所选择的实例所给定的条件间不存在矛盾,可以在不同的步骤中,选择标号并不对应的实例来构成相应的技术方案,这样的技术方案也应视为被包含在本发明的范围内。
本领域技术人员应该很容易认识到,可以通过编程计算机实现上述方法的不同步骤。在此,一些实施方式同样包括机器可读或计算机可读的程序存储设备(如,数字数据存储介质)以及编码机器可执行或计算机可执行的程序指令,其中,该指令执行上述方法的一些或全部步骤。例如,程序存储设备可以是数字存储器、磁存储介质(如磁盘和磁带)、硬件或光可读数字数据存储介质。实施方式同样包括执行上述方法的所述步骤的编程计算机。
应当注意的是,在以上的描述中,仅以示例的方式,示出了本发明的技术方案,但并不意味着本发明局限于上述步骤和单元结构。在可能的情形下,可以根据需要对步骤和单元结构进行调整和取舍。因此,某些步骤和单元并非实施本发明的总体发明思想所必需的元素。因此,本发明所必需的技术特征仅受限于能够实现本发明的总体发明思想的最低要求,而不受以上具体实例的限制。
至此已经结合优选实施例对本发明进行了描述。应该理解,本领域技术人员在不脱离本发明的精神和范围的情况下,可以进行各种其它的改变、替换和添加。因此,本发明的范围不局限于上述特定实施例,而应由所附权利要求所限定。
Claims (19)
1.一种有限状态机执行装置,包括:
引擎单元,用于接收输入事件,作为有限状态机的触发事件;
存储单元,用于存储有限状态机的当前状态以及状态转移表,状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
状态类定义单元,用于根据有限状态机的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据由引擎单元接收的输入事件来进行预定处理;以及
执行单元,用于从存储单元中获取当前状态,并根据引擎单元提供的输入事件以及存储单元中存储的状态转移表,获取当前状态要转移至的下一状态,并且通过基本状态类,确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及执行单元还使用获取的下一状态更新存储单元中的当前状态。
2.根据权利要求1所述的装置,还包括:
解析器,用于预先对有限状态机状态转移的描述进行解析,以获得要存储于存储单元的状态转移表。
3.根据权利要求1所述的装置,其中,执行单元还用于在有限状态机的状态发生改变时,修改状态类定义单元定义的具体状态类,并更新存储单元中存储的当前状态以及状态转移表。
4.根据权利要求1所述的装置,其中,属于基本状态类的一个或多个具体状态类是通过继承基本状态类而获得的。
5.根据权利要求1所述的装置,其中,每一个具体状态类是单实例模式。
6.根据权利要求5所述的装置,其中,在使用具体状态类进行预定处理时,创建该具体状态类的对象实例,以用于进行预定处理。
7.一种有限状态机执行方法,包括:
接收输入事件,作为有限状态机的触发事件;
获取有限状态机的当前状态,并根据输入事件以及状态转移表,获取当前状态要转移至的下一状态,所述状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类,以使用该具体状态类进行预定处理,以及使用获取的下一状态更新当前状态。
8.根据权利要求7所述的方法,还包括:
预先对有限状态机状态转移的描述进行解析,以获得状态转移表。
9.根据权利要求7所述的方法,还包括:
在有限状态机的状态发生改变时,修改具体状态类,并更新当前状态以及状态转移表。
10.根据权利要求7所述的方法,其中,属于基本状态类的一个或多个具体状态类是通过继承基本状态类而获得的。
11.根据权利要求1所述的方法,其中,每一个具体状态类是单实例模式。
12.根据权利要求11所述的方法,其中,在使用具体状态类进行预定处理时,创建该具体状态类的对象实例,以用于进行预定处理。
13.一种建立针对应用的有限状态机的方法,包括:
根据应用中多个组件具有的状态、状态改变以及触发状态改变的事件,确定有限状态机的各个状态以及状态转移表,状态转移表包括有限状态机的状态转移信息,该状态转移信息包括有限状态机的各个状态之间的转移关系以及触发各个状态转移的事件;
根据所确定的各个状态,定义基本状态类、以及属于该基本状态类的一个或多个具体状态类,每一个具体状态类用于根据所述应用的运行时间环境来进行预定处理;以及
根据所确定的各个状态和状态转移表、以及定义的基本状态类和具体状态类,建立针对该应用的有限状态机。
14.根据权利要求13所述的方法,其中,应用中的多个组件具有的状态相同,并且各个具体状态类分别对应于多个组件所具有的各个状态。
15.根据权利要求13所述的方法,其中,属于基本状态类的一个或多个具体状态类是通过继承基本状态类而获得的。
16.根据权利要求13所述的方法,其中,每一个具体状态类是单实例模式。
17.根据权利要求16所述的方法,其中,每一个具体状态类能够根据应用的运行时间环境,动态地创建对象实例,以代表应用中相应的组件,来进行预定处理。
18.一种在应用中使用有限状态机的方法,所述有限状态机是通过权利要求13-17之一所述的方法而针对所述应用建立的,使用有限状态机的方法包括:
接收输入所述应用的事件,该输入事件包括标识了所述应用的多个组件之一的指示;
根据该输入事件,从预先存储的多个组件及其当前状态中,获取由所述指示标识的组件及其当前状态;
根据所获取的组件及其当前状态,借助于基本状态类,从属于基本状态类的一个或多个具体状态类中确定与当前状态对应的具体状态类;
使用所确定的具体状态类,创建代表所获取的组件的对象实例,以进行预定处理。
19.根据权利要求18所述的方法,还包括:根据该输入事件以及状态转移表,确定由所述指示标识的组件的下一状态,并利用该下一状态更新该组件的当前状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910262482.7A CN102103497B (zh) | 2009-12-18 | 2009-12-18 | 有限状态机执行装置和方法、在应用中的建立和使用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910262482.7A CN102103497B (zh) | 2009-12-18 | 2009-12-18 | 有限状态机执行装置和方法、在应用中的建立和使用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102103497A true CN102103497A (zh) | 2011-06-22 |
CN102103497B CN102103497B (zh) | 2015-03-25 |
Family
ID=44156294
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910262482.7A Expired - Fee Related CN102103497B (zh) | 2009-12-18 | 2009-12-18 | 有限状态机执行装置和方法、在应用中的建立和使用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102103497B (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662668A (zh) * | 2012-03-31 | 2012-09-12 | 奇智软件(北京)有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN102685128A (zh) * | 2012-05-09 | 2012-09-19 | 东南大学 | 一种基于状态机的协议构造方法 |
CN102857946A (zh) * | 2012-03-26 | 2013-01-02 | 大唐移动通信设备有限公司 | 一种状态转移方法及其装置 |
CN103019695A (zh) * | 2012-11-22 | 2013-04-03 | 用友软件股份有限公司 | 数据对象与状态控制逻辑分离系统和方法 |
CN103019808A (zh) * | 2011-09-28 | 2013-04-03 | 中国移动通信集团公司 | 一种业务状态的调节装置及方法 |
CN103513971A (zh) * | 2012-06-20 | 2014-01-15 | 鸿富锦精密工业(深圳)有限公司 | 有限状态机的执行系统及执行方法 |
CN104715056A (zh) * | 2012-03-31 | 2015-06-17 | 北京奇虎科技有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN105045603A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建有限状态机模型框架的方法、装置及电子装置 |
CN105659274A (zh) * | 2013-10-01 | 2016-06-08 | 艾尼克斯股份有限公司 | 用于在可重构平台中解码数据流的方法和设备 |
CN107357592A (zh) * | 2017-07-27 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种基于状态机机制的事件处理方法及装置 |
CN108334320A (zh) * | 2016-12-22 | 2018-07-27 | 国立民用航空学院 | 用于处理软件代码的方法和装置 |
CN109426239A (zh) * | 2017-08-31 | 2019-03-05 | 株洲中车时代电气股份有限公司 | 一种机车顺序控制系统及方法 |
WO2019196551A1 (zh) * | 2018-04-09 | 2019-10-17 | 阿里巴巴集团控股有限公司 | 一种配置支付流程、执行支付流程的方法、装置及设备 |
CN110347636A (zh) * | 2019-07-15 | 2019-10-18 | 北京一流科技有限公司 | 数据执行体及其数据处理方法 |
CN110851207A (zh) * | 2019-10-17 | 2020-02-28 | 上海艾融软件股份有限公司 | 状态转换管理方法、装置、电子设备和计算机可读存储介质 |
CN112307167A (zh) * | 2020-10-30 | 2021-02-02 | 广州华多网络科技有限公司 | 文本切句方法、装置、计算机设备和存储介质 |
CN112907198A (zh) * | 2021-01-15 | 2021-06-04 | 浙江大搜车融资租赁有限公司 | 业务状态流转维护方法、装置及电子设备 |
US11474837B2 (en) | 2018-04-09 | 2022-10-18 | Advanced New Technologies Co., Ltd. | Method and apparatus for efficient programming of electronic payment processing |
CN116634537A (zh) * | 2023-06-01 | 2023-08-22 | 北京联盛德微电子有限责任公司 | 一种wifi接收机的自动功率控制方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030031170A1 (en) * | 2001-08-03 | 2003-02-13 | Jyh-Chau Hwang | Control method and apparatus for a web phone |
-
2009
- 2009-12-18 CN CN200910262482.7A patent/CN102103497B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030031170A1 (en) * | 2001-08-03 | 2003-02-13 | Jyh-Chau Hwang | Control method and apparatus for a web phone |
Non-Patent Citations (4)
Title |
---|
张国庆、霍国义: "《有限状态机设计与实现方法》", 《电脑编程技巧与维护》 * |
杨庆: "《有限状态机的设计与优化》", 《湖北民族学院学报(自然科学版)》 * |
王巍,高德远: "《有限状态机的设计策略》", 《计算机工程与应用》 * |
黎文导, 卢瑜: "有限状态机(FSM)的实现", 《青海师范大学学报(自然科学版)》 * |
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019808A (zh) * | 2011-09-28 | 2013-04-03 | 中国移动通信集团公司 | 一种业务状态的调节装置及方法 |
CN103019808B (zh) * | 2011-09-28 | 2016-08-10 | 中国移动通信集团公司 | 一种业务状态的调节装置及方法 |
CN102857946A (zh) * | 2012-03-26 | 2013-01-02 | 大唐移动通信设备有限公司 | 一种状态转移方法及其装置 |
CN102857946B (zh) * | 2012-03-26 | 2015-03-25 | 大唐移动通信设备有限公司 | 一种状态转移方法及其装置 |
CN104715056A (zh) * | 2012-03-31 | 2015-06-17 | 北京奇虎科技有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN102662668B (zh) * | 2012-03-31 | 2015-06-03 | 北京奇虎科技有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN104715056B (zh) * | 2012-03-31 | 2018-12-04 | 北京奇虎科技有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN102662668A (zh) * | 2012-03-31 | 2012-09-12 | 奇智软件(北京)有限公司 | 一种利用网页生命周期优化应用的方法和装置 |
CN102685128B (zh) * | 2012-05-09 | 2015-09-30 | 东南大学 | 一种基于状态机的协议构造方法 |
CN102685128A (zh) * | 2012-05-09 | 2012-09-19 | 东南大学 | 一种基于状态机的协议构造方法 |
CN103513971A (zh) * | 2012-06-20 | 2014-01-15 | 鸿富锦精密工业(深圳)有限公司 | 有限状态机的执行系统及执行方法 |
CN103513971B (zh) * | 2012-06-20 | 2016-08-03 | 鸿富锦精密工业(深圳)有限公司 | 有限状态机的执行系统及执行方法 |
CN103019695A (zh) * | 2012-11-22 | 2013-04-03 | 用友软件股份有限公司 | 数据对象与状态控制逻辑分离系统和方法 |
CN103019695B (zh) * | 2012-11-22 | 2016-07-06 | 用友网络科技股份有限公司 | 数据对象与状态控制逻辑分离系统和方法 |
CN105659274A (zh) * | 2013-10-01 | 2016-06-08 | 艾尼克斯股份有限公司 | 用于在可重构平台中解码数据流的方法和设备 |
CN105659274B (zh) * | 2013-10-01 | 2020-04-14 | 艾尼克斯股份有限公司 | 用于在可重构平台中解码数据流的方法和设备 |
CN105045603A (zh) * | 2015-08-24 | 2015-11-11 | 北京金山安全软件有限公司 | 一种构建有限状态机模型框架的方法、装置及电子装置 |
CN108334320A (zh) * | 2016-12-22 | 2018-07-27 | 国立民用航空学院 | 用于处理软件代码的方法和装置 |
CN107357592A (zh) * | 2017-07-27 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种基于状态机机制的事件处理方法及装置 |
CN109426239A (zh) * | 2017-08-31 | 2019-03-05 | 株洲中车时代电气股份有限公司 | 一种机车顺序控制系统及方法 |
CN109426239B (zh) * | 2017-08-31 | 2020-05-08 | 株洲中车时代电气股份有限公司 | 一种机车顺序控制系统及方法 |
TWI767106B (zh) * | 2018-04-09 | 2022-06-11 | 開曼群島商創新先進技術有限公司 | 配置支付流程、執行支付流程的方法、裝置及設備 |
WO2019196551A1 (zh) * | 2018-04-09 | 2019-10-17 | 阿里巴巴集团控股有限公司 | 一种配置支付流程、执行支付流程的方法、装置及设备 |
US11474837B2 (en) | 2018-04-09 | 2022-10-18 | Advanced New Technologies Co., Ltd. | Method and apparatus for efficient programming of electronic payment processing |
CN110347636A (zh) * | 2019-07-15 | 2019-10-18 | 北京一流科技有限公司 | 数据执行体及其数据处理方法 |
CN110347636B (zh) * | 2019-07-15 | 2024-04-30 | 北京一流科技有限公司 | 数据执行体及其数据处理方法 |
CN110851207A (zh) * | 2019-10-17 | 2020-02-28 | 上海艾融软件股份有限公司 | 状态转换管理方法、装置、电子设备和计算机可读存储介质 |
CN110851207B (zh) * | 2019-10-17 | 2023-04-18 | 上海艾融软件股份有限公司 | 状态转换管理方法、装置、电子设备和存储介质 |
CN112307167A (zh) * | 2020-10-30 | 2021-02-02 | 广州华多网络科技有限公司 | 文本切句方法、装置、计算机设备和存储介质 |
CN112907198A (zh) * | 2021-01-15 | 2021-06-04 | 浙江大搜车融资租赁有限公司 | 业务状态流转维护方法、装置及电子设备 |
CN116634537A (zh) * | 2023-06-01 | 2023-08-22 | 北京联盛德微电子有限责任公司 | 一种wifi接收机的自动功率控制方法及系统 |
CN116634537B (zh) * | 2023-06-01 | 2024-01-23 | 北京联盛德微电子有限责任公司 | 一种wifi接收机的自动功率控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102103497B (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102103497B (zh) | 有限状态机执行装置和方法、在应用中的建立和使用方法 | |
US6854107B2 (en) | Method of and system for designing an N-tier software architecture for use in generating software components | |
US7072879B2 (en) | Partially embedded database and an embedded database manager for a control system | |
CN110321226A (zh) | 主机的自动扩缩容方法、装置、主机及存储介质 | |
CN102799679B (zh) | 基于Hadoop的海量空间数据索引更新系统及方法 | |
US6941309B2 (en) | Object integrated management system | |
WO2020248511A1 (zh) | 一种基于运行时模型实现对终端应用控制的方法 | |
CN106156301A (zh) | 一种大字段数据的处理方法及装置 | |
CN110532058B (zh) | 容器集群服务的管理方法、装置、设备及可读存储介质 | |
CN110888736A (zh) | 一种基于容器云平台的应用管理方法、系统及相关组件 | |
CN113094125B (zh) | 业务流程处理方法、装置、服务器及存储介质 | |
CN102567419B (zh) | 基于树结构的海量数据存储装置及方法 | |
CN110291508A (zh) | 垃圾收集器 | |
CN104657164A (zh) | 软件升级处理方法和装置 | |
CN109558159A (zh) | 游戏中用户界面的更新方法和装置 | |
CN102542036A (zh) | 使用优化的表 | |
CN102436501A (zh) | 一种基于web的并行文件管理系统 | |
CN100468346C (zh) | 一种绘图资源的管理方法及系统 | |
CN109408322A (zh) | 一种云平台的自动业务流程实现方法 | |
GB2574579A (en) | System and graphics processing method utilizing predefined render chunks | |
CN101968747B (zh) | 一种机群应用管理系统及其应用管理方法 | |
CN116680209A (zh) | 基于wasm的多智能合约实例管理方法 | |
CN102141917A (zh) | 基于IronPython脚本语言的多业务联动实现方法 | |
CN112748997A (zh) | 一种工作流的调度方法及系统 | |
CN109669671B (zh) | 一种基于微服务的多层次自适应方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150325 Termination date: 20161218 |