一種構(gòu)建有限狀態(tài)機(jī)模型框架的方法、裝置及電子裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)通信應(yīng)用技術(shù),尤其涉及一種構(gòu)建有限狀態(tài)機(jī)模型框架的方 法、裝置及電子裝置。
【背景技術(shù)】
[0002] 在計(jì)算機(jī)通信應(yīng)用領(lǐng)域中,一個(gè)對(duì)象可以包含多種狀態(tài),即在不同條件下具有不 同的狀態(tài),該對(duì)象可以通過(guò)有限狀態(tài)機(jī)模型框架來(lái)進(jìn)行描述。其中,有限狀態(tài)機(jī)是指包含有 限個(gè)狀態(tài)以及能夠在該有限個(gè)狀態(tài)之間執(zhí)行轉(zhuǎn)換和動(dòng)作等行為的計(jì)算模型,也就是說(shuō),在 有限狀態(tài)機(jī)模型框架中,如果對(duì)象在處于第一狀態(tài)時(shí)發(fā)生了特定事件,將使得該對(duì)象從第 一狀態(tài)轉(zhuǎn)換為第二狀態(tài),且在對(duì)象處于第二狀態(tài)時(shí),如果發(fā)生其他特定事件,又會(huì)使得該對(duì) 象從第二狀態(tài)轉(zhuǎn)換為第三狀態(tài)或重新轉(zhuǎn)換為第一狀態(tài),其中,第一狀態(tài)、第二狀態(tài)以及第三 狀態(tài)為泛指,用以表示對(duì)象的不同狀態(tài)。
[0003] 現(xiàn)有技術(shù)選中,對(duì)于對(duì)象的有限狀態(tài)機(jī)模型框架中對(duì)象各狀態(tài)之間的轉(zhuǎn)換,一般 采用編程語(yǔ)言中的switch/case語(yǔ)句或if/else語(yǔ)句進(jìn)行描述。以switch/case語(yǔ)句為例, 通過(guò)為對(duì)象的每一狀態(tài)設(shè)置一個(gè)case分支,用于對(duì)該狀態(tài)進(jìn)行處理,每一 case分支對(duì)相應(yīng) 狀態(tài)下的狀態(tài)轉(zhuǎn)換條件(事件類型)以及動(dòng)作進(jìn)行描述,即在case分支中,集成有檢查狀 態(tài)轉(zhuǎn)換條件以及進(jìn)行狀態(tài)轉(zhuǎn)換處理。該方法在對(duì)象的有限狀態(tài)量較少時(shí),例如,對(duì)象具有十 幾或幾十個(gè)狀態(tài),貝 lJ可以通過(guò)switch/case語(yǔ)句或if/else語(yǔ)句,清楚、明確地描述對(duì)象各 狀態(tài)之間的轉(zhuǎn)換。但如果對(duì)象的有限狀態(tài)量較多,例如,對(duì)于一些項(xiàng)目或系統(tǒng),例如,用于搜 索引擎的分詞、編譯器的實(shí)現(xiàn)以及游戲開(kāi)發(fā),一個(gè)對(duì)象的有限狀態(tài)多達(dá)成千上萬(wàn),這樣,各 狀態(tài)之間的轉(zhuǎn)換次數(shù)十分浩大,舉例來(lái)說(shuō),如果任意兩個(gè)有限狀態(tài)之間能夠相互轉(zhuǎn)換,則對(duì) 于具有 1000個(gè)有限狀態(tài)的對(duì)象來(lái)說(shuō),其具有的狀態(tài)轉(zhuǎn)換次數(shù)高達(dá),對(duì)象各狀態(tài)之間的 轉(zhuǎn)換關(guān)系復(fù)雜,使得利用現(xiàn)有switch/case語(yǔ)句或if/else語(yǔ)句來(lái)覆蓋或描述該對(duì)象所有 的狀態(tài)轉(zhuǎn)換,程序段代碼將顯得復(fù)雜混亂,對(duì)于技術(shù)開(kāi)發(fā)人員來(lái)說(shuō),利用switch/case語(yǔ)句 或if/else語(yǔ)句的編碼效率將十分低下;進(jìn)一步地,由于該方法完全不具備擴(kuò)展性,如果對(duì) 該對(duì)象進(jìn)行狀態(tài)轉(zhuǎn)換增減,需要重新利用switch/case語(yǔ)句或if/else語(yǔ)句進(jìn)行編程。
[0004] 因此,如何能高效且擴(kuò)展性地支持對(duì)象的狀態(tài)轉(zhuǎn)換,并有效提升編碼效率,是構(gòu)建 有限狀態(tài)機(jī)模型框架的熱點(diǎn)研究問(wèn)題。但目前在對(duì)象狀態(tài)轉(zhuǎn)換的應(yīng)用場(chǎng)景中,還沒(méi)有一個(gè) 通用的有限狀態(tài)機(jī)模型框架,使之能高效地處理對(duì)象較為復(fù)雜的狀態(tài)轉(zhuǎn)換,同時(shí)又能擴(kuò)展 性地支持新增和刪除對(duì)象的狀態(tài)轉(zhuǎn)換,提升編碼效率。
【發(fā)明內(nèi)容】
[0005] 有鑒于此,本發(fā)明實(shí)施例提供一種構(gòu)建有限狀態(tài)機(jī)模型框架的方法、裝置及電子 裝置,支持?jǐn)U展的對(duì)象狀態(tài)轉(zhuǎn)換增減、提升進(jìn)行狀態(tài)轉(zhuǎn)換的編碼效率。
[0006] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0007] -方面,本發(fā)明實(shí)施例提供一種構(gòu)建有限狀態(tài)機(jī)模型框架的方法,包括:
[0008] 依據(jù)對(duì)象的狀態(tài)生成對(duì)象狀態(tài)集;
[0009] 確定對(duì)象狀態(tài)集中包含的狀態(tài)轉(zhuǎn)換,獲取每一確定的狀態(tài)轉(zhuǎn)換對(duì)應(yīng)的事件類型, 并為每一確定的狀態(tài)轉(zhuǎn)換配置對(duì)應(yīng)的事件處理器;
[0010] 在對(duì)象狀態(tài)集中,依據(jù)每一狀態(tài)轉(zhuǎn)換分別對(duì)應(yīng)的事件類型以及事件處理器,構(gòu)建 狀態(tài)轉(zhuǎn)換映射表;
[0011] 向預(yù)先設(shè)置的事件分發(fā)控制器注冊(cè)構(gòu)建的狀態(tài)轉(zhuǎn)換映射表。
[0012] 優(yōu)選地,所述方法進(jìn)一步包括:
[0013] 事件分發(fā)控制器獲取對(duì)象當(dāng)前的狀態(tài)以及當(dāng)前生成的事件;
[0014] 依據(jù)獲取的對(duì)象當(dāng)前的狀態(tài)以及當(dāng)前生成的事件,確定對(duì)象的事件類型,查詢注 冊(cè)的該對(duì)象的狀態(tài)轉(zhuǎn)換映射表,得到確定的事件類型對(duì)應(yīng)的事件處理器,通知得到的事件 處理器執(zhí)行狀態(tài)轉(zhuǎn)換操作。
[0015] 優(yōu)選地,所述狀態(tài)轉(zhuǎn)換映射表以表格或二維數(shù)組進(jìn)行描述。
[0016] 優(yōu)選地,所述狀態(tài)轉(zhuǎn)換映射表包括:轉(zhuǎn)換前狀態(tài)、轉(zhuǎn)換后狀態(tài)、狀態(tài)轉(zhuǎn)換、事件類型 以及事件處理器。
[0017] 優(yōu)選地,所述在事件分發(fā)控制器獲取對(duì)象當(dāng)前的狀態(tài)之前,所述方法進(jìn)一步包 括:
[0018] 對(duì)象啟動(dòng)后,向事件分發(fā)控制器上報(bào)當(dāng)前狀態(tài),事件分發(fā)控制器在注冊(cè)的狀態(tài)轉(zhuǎn) 換映射表中設(shè)置對(duì)象的當(dāng)前狀態(tài)標(biāo)識(shí)。
[0019] 優(yōu)選地,所述方法進(jìn)一步包括:
[0020] 在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中,將事件處理器執(zhí)行狀態(tài)轉(zhuǎn)換操作后的狀態(tài)標(biāo)識(shí)更新 為當(dāng)前狀態(tài)標(biāo)識(shí)。
[0021] 優(yōu)選地,所述方法進(jìn)一步包括:
[0022] 如果依據(jù)獲取的對(duì)象當(dāng)前的狀態(tài)以及當(dāng)前生成的事件,不能確定對(duì)象的事件類 型,保持對(duì)象的當(dāng)前狀態(tài)。
[0023] 優(yōu)選地,所述方法進(jìn)一步包括:
[0024] 在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中,添加新的狀態(tài)、和/或,刪除狀態(tài)。
[0025] 優(yōu)選地,所述方法進(jìn)一步包括:
[0026] 在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中,添加新的狀態(tài)轉(zhuǎn)換、和/或,刪除狀態(tài)轉(zhuǎn)換。
[0027] 優(yōu)選地,通過(guò)狀態(tài)轉(zhuǎn)換注冊(cè)接口 EventDispatcher : :registerTransition() 注冊(cè)狀態(tài)轉(zhuǎn)換映射表或添加新的狀態(tài),通過(guò)狀態(tài)轉(zhuǎn)換刪除接口 EventDispatcher :: removeTransitionO 刪除狀態(tài),通過(guò)狀態(tài)轉(zhuǎn)換處理接口 EventHandler : :handleEvent()執(zhí) 行狀態(tài)轉(zhuǎn)換操作。
[0028] 本發(fā)明實(shí)施例提供的構(gòu)建有限狀態(tài)機(jī)模型框架的方法,通過(guò)依據(jù)對(duì)象的狀態(tài)生成 對(duì)象狀態(tài)集,確定對(duì)象狀態(tài)集中包含的狀態(tài)轉(zhuǎn)換,獲取每一確定的狀態(tài)轉(zhuǎn)換對(duì)應(yīng)的事件類 型,為對(duì)象的每一狀態(tài)轉(zhuǎn)換設(shè)置對(duì)應(yīng)的一用于處理事件類型的事件處理器,生成以狀態(tài)轉(zhuǎn) 換映射表表示的有限狀態(tài)機(jī)模型框架并進(jìn)行注冊(cè)。這樣,以狀態(tài)轉(zhuǎn)換映射表的方式構(gòu)建有 限狀態(tài)機(jī)模型框架,具有很好的可擴(kuò)展性,可以避免利用switch/case語(yǔ)句或if/else語(yǔ)句 來(lái)覆蓋或描述對(duì)象的狀態(tài)轉(zhuǎn)換,能夠方便高效地處理狀態(tài)轉(zhuǎn)換情形,大大提高了開(kāi)發(fā)效率 以及進(jìn)行狀態(tài)轉(zhuǎn)換的編碼效率。
[0029] 另一方面,本發(fā)明實(shí)施例提供一種構(gòu)建有限狀態(tài)機(jī)模型框架的裝置,包括:對(duì)象狀 態(tài)集生成模塊、配置模塊、狀態(tài)轉(zhuǎn)換映射表構(gòu)建模塊以及注冊(cè)模塊,其中,
[0030] 對(duì)象狀態(tài)集生成模塊,用于依據(jù)對(duì)象的狀態(tài)生成對(duì)象狀態(tài)集;
[0031] 配置模塊,用于確定對(duì)象狀態(tài)集中包含的狀態(tài)轉(zhuǎn)換,獲取每一確定的狀態(tài)轉(zhuǎn)換對(duì) 應(yīng)的事件類型,并為每一確定的狀態(tài)轉(zhuǎn)換配置對(duì)應(yīng)的事件處理器;
[0032] 狀態(tài)轉(zhuǎn)換映射表構(gòu)建模塊,用于在對(duì)象狀態(tài)集中,依據(jù)每一狀態(tài)轉(zhuǎn)換對(duì)應(yīng)的事件 類型以及事件處理器,構(gòu)建狀態(tài)轉(zhuǎn)換映射表;
[0033] 注冊(cè)模塊,用于向預(yù)先設(shè)置的事件分發(fā)控制器注冊(cè)構(gòu)建的狀態(tài)轉(zhuǎn)換映射表。
[0034] 優(yōu)選地,進(jìn)一步包括:狀態(tài)轉(zhuǎn)換信息獲取模塊以及事件分發(fā)控制模塊,其中,
[0035] 狀態(tài)轉(zhuǎn)換信息獲取模塊,用于獲取對(duì)象當(dāng)前的狀態(tài)以及當(dāng)前生成的事件;
[0036] 事件分發(fā)控制模塊,用于依據(jù)獲取的對(duì)象當(dāng)前的狀態(tài)以及當(dāng)前生成的事件,確定 對(duì)象的事件類型,查詢注冊(cè)的該對(duì)象的狀態(tài)轉(zhuǎn)換映射表,得到確定的事件類型對(duì)應(yīng)的事件 處理器,通知得到的事件處理器執(zhí)行狀態(tài)轉(zhuǎn)換操作。
[0037] 優(yōu)選地,所述事件分發(fā)控制模塊進(jìn)一步用于在依據(jù)獲取的對(duì)象當(dāng)前的狀態(tài)以及當(dāng) 前生成的事件,不能確定對(duì)象的事件類型后,保持對(duì)象的當(dāng)前狀態(tài)。
[0038] 優(yōu)選地,其特征在于,進(jìn)一步包括:?jiǎn)?dòng)上報(bào)模塊、當(dāng)前狀態(tài)更新模塊以及映射表 更新申吳塊,其中,
[0039] 啟動(dòng)上報(bào)模塊,用于在對(duì)象啟動(dòng)后,向事件分發(fā)控制器上報(bào)當(dāng)前狀態(tài),事件分發(fā)控 制器在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中設(shè)置對(duì)象的當(dāng)前狀態(tài)標(biāo)識(shí);
[0040] 當(dāng)前狀態(tài)更新模塊,用于在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中,將事件處理器執(zhí)行狀態(tài)轉(zhuǎn) 換操作后的狀態(tài)標(biāo)識(shí)更新為當(dāng)前狀態(tài)標(biāo)識(shí);
[0041] 映射表更新模塊,用于在注冊(cè)的狀態(tài)轉(zhuǎn)換映射表中,添加新的狀態(tài)、和/或,刪除 狀態(tài)。
[0042] 本發(fā)明實(shí)施例提供的構(gòu)建有限狀態(tài)機(jī)模型框架的裝置,對(duì)象狀態(tài)集生成模塊依據(jù) 對(duì)象的狀態(tài)生成對(duì)象狀態(tài)集,配置模塊確定對(duì)象狀態(tài)集中包含的狀態(tài)轉(zhuǎn)換,獲取每一確定 的狀態(tài)轉(zhuǎn)換對(duì)應(yīng)的事件類型,為對(duì)象的每一狀態(tài)轉(zhuǎn)換設(shè)置對(duì)應(yīng)的一用于處理事件類型的事 件處理器,狀態(tài)轉(zhuǎn)換映射表構(gòu)建模塊生成以狀態(tài)轉(zhuǎn)換映射表表不的有限狀態(tài)機(jī)模型框架, 注冊(cè)模塊對(duì)構(gòu)建的狀態(tài)轉(zhuǎn)換映射表進(jìn)行注冊(cè)。這樣,以狀態(tài)轉(zhuǎn)換映射表的方式構(gòu)建有限狀 態(tài)機(jī)模型框架,具有很好的可擴(kuò)展性,可以避免利用switch/case語(yǔ)句或if/else語(yǔ)句來(lái)覆 蓋或描述對(duì)象的狀態(tài)轉(zhuǎn)換,能夠方便高效地處理狀態(tài)轉(zhuǎn)換情形,大大提高了開(kāi)發(fā)效率以及 進(jìn)行狀態(tài)轉(zhuǎn)換的編碼效率。
[0043] 再一方面,本發(fā)明實(shí)施例提供一種電子裝置,包括:殼體、處理器、存儲(chǔ)器、電路板 和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲(chǔ)器設(shè)置在電路板上; 電源電路,用于為上述電子設(shè)備的各個(gè)電路或器件供電;存儲(chǔ)器用于存儲(chǔ)可執(zhí)行程序代碼; 處理器通過(guò)讀