Atitit fsm有限狀態(tài)機(jī)概念與最佳實踐
Atitit ?fsm有限狀態(tài)機(jī)概念與最佳實踐
?
目錄
1. 概念組成與原理成分 1
1.1. 1、狀態(tài)機(jī)的要素?4個要素,即現(xiàn)態(tài)、條件、動作、次態(tài) 2
1.2. 狀態(tài)表 2
2. 性狀 2
2.1. 一般一個class即可 2
2.2. 而言有fsm模式就復(fù)雜些了 2
3. 適用場景 主治 適應(yīng)癥 2
3.1. 所有場景(較簡單)。 2
4. Bp?最佳實踐 用法 2
5. 缺點 不良反應(yīng) 3
5.1. 有限的應(yīng)用領(lǐng)域(由 于不可確定性); 3
5.2. 對于大量的 I/O 服務(wù)的應(yīng)用,不容易實現(xiàn); 3
5.3. 大的程序不便于調(diào)試 3
5.4. Fsm是專用自動機(jī),不是通用自動機(jī) 3
5.5. 2、 因為其狀態(tài)有限,當(dāng)所要描述的系統(tǒng)的狀態(tài)太多時,可能確定的有限狀態(tài)機(jī)無能為力; 3
5.6. 有限狀態(tài)機(jī)的可擴(kuò)展性差(或者對比計算機(jī)而言是無可編程性) 3
5.7. 3、 有一些任務(wù)是有限狀態(tài)機(jī)無法完成的 3
6. 禁忌 不適應(yīng)場合 4
7. 注意事項 4
8. 相互作用與其他類庫模式 5
9. 過量與濫用后果 5
10. 原理 5
11. 理解曲線 5
11.1. 學(xué)習(xí)曲線最簡單的,比起pda,turing?? 5
12. 儲藏 5
13. 包裝與api接口 5
14. 執(zhí)行標(biāo)準(zhǔn) 5
15. 生產(chǎn)組織與個人 ?attilax 5
16. Ref 5
?
1.?概念組成與原理成分1.1.?1、狀態(tài)機(jī)的要素?4個要素,即現(xiàn)態(tài)、條件、動作、次態(tài)
狀態(tài)機(jī)可歸納為4個要素,即現(xiàn)態(tài)、條件、動作、次態(tài)。“現(xiàn)態(tài)”和“條件”是因,“動作”和“次態(tài)”是果。詳解如下:
①現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。
②條件:又稱為“事件”。當(dāng)一個條件被滿足,將會觸發(fā)一個動作,或者執(zhí)行一次狀態(tài)的遷移。
③動作:條件滿足后執(zhí)行的動作。動作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動作,直接遷移到新狀態(tài)。
④次態(tài):條件滿足后要遷往的新狀態(tài)?!按螒B(tài)”是相對于“現(xiàn)態(tài)”而言的,“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。
?
1.2.?狀態(tài)表
我們可以用狀態(tài)表了表示整個過程,如下圖所示。
2.?性狀2.1.?一般一個class即可2.2.?而言有fsm模式就復(fù)雜些了3.?適用場景 主治 適應(yīng)癥3.1.?所有場景(較簡單)。
復(fù)雜場景使用pda和turing機(jī)
4.?Bp?最佳實踐 用法
?
5、處理事件輸入,實現(xiàn)狀態(tài)跳轉(zhuǎn)邏輯。?雙case
這里有兩種寫法,一種是在狀態(tài)中判斷事件:一種是事件中判斷狀態(tài):
?
本人觀點:一般業(yè)務(wù)場景來說,狀態(tài)的數(shù)量是確定的切數(shù)目較少,不同狀態(tài)下需要處理的事件也不一樣。而觸發(fā)的事件數(shù)量則比較多,采用上面第二種方式在事件中判斷狀態(tài)也有利于把里面一層的switch/case剝離出來當(dāng)成單獨的函數(shù),做一些代碼模塊結(jié)構(gòu)的優(yōu)化,故推薦使用第二種方式,事件中判斷狀態(tài)。
5.?缺點 不良反應(yīng)5.1.?有限的應(yīng)用領(lǐng)域(由 于不可確定性);5.2.?對于大量的 I/O 服務(wù)的應(yīng)用,不容易實現(xiàn);5.3.?大的程序不便于調(diào)試5.4.?Fsm是專用自動機(jī),不是通用自動機(jī)
有限狀態(tài)機(jī)的弱點
1、 每一種有限狀態(tài)機(jī)均功能唯一,即設(shè)計好之后無法完成其他原理不同的工作;
5.5.?2、 因為其狀態(tài)有限,當(dāng)所要描述的系統(tǒng)的狀態(tài)太多時,可能確定的有限狀態(tài)機(jī)無能為力;5.6.?有限狀態(tài)機(jī)的可擴(kuò)展性差(或者對比計算機(jī)而言是無可編程性)5.7.?3、 有一些任務(wù)是有限狀態(tài)機(jī)無法完成的
,比如它可以判斷輸入的0、1數(shù)列中0或1的個數(shù)是否為奇數(shù)或偶數(shù),但是無法判斷0是否比1多或者相反。
前兩個問題表示有限狀態(tài)機(jī)的可擴(kuò)展性差(或者對比計算機(jī)而言是無可編程性),而后者是因為有限狀態(tài)機(jī)狀態(tài)有限而且不能記下自己需要記錄的東西(或者對比圖靈機(jī)理論是不能寫)。
于是我們發(fā)現(xiàn)有限狀態(tài)機(jī)不但狀態(tài)有限,功能也有限(根據(jù)計算理論,這是因為它只能接受正則語言,而正則語言是最低級的語言,所以能夠解決的問題是有限的)。
事實上,最初的計算“機(jī)”(其實更應(yīng)該說是計算器)都是功能單一的,雖然人們不斷地試圖在一臺機(jī)器上集成更多的功能,但是相對于下面要講到通用計算理論,這些行為還是“盲目”的。
6.?禁忌 不適應(yīng)場合
?
7.?注意事項
這里需要注意的兩個問題:
1、避免把某個“程序動作”當(dāng)作是一種“狀態(tài)”來處理。那么如何區(qū)分“動作”和“狀態(tài)”?“動作”是不穩(wěn)定的,即使沒有條件的觸發(fā),“動作”一旦執(zhí)行完畢就結(jié)束了;而“狀態(tài)”是相對穩(wěn)定的,如果沒有外部條件的觸發(fā),一個狀態(tài)會一直持續(xù)下去。
2、狀態(tài)劃分時漏掉一些狀態(tài),導(dǎo)致跳轉(zhuǎn)邏輯不完整。
所以維護(hù)上述一張狀態(tài)表就非常必要,而且有意義了。從表中可以直觀看出那些狀態(tài)直接存在跳轉(zhuǎn)路徑,那些狀態(tài)直接不存在。如果不存在,就把對應(yīng)的單元格置灰。 每次寫代碼之前先把表格填寫好,并且對置灰的部分重點review,看看是否有“漏態(tài)”,然后才是寫代碼。QA拿到這張表格之后,寫測試用例也是手到擒來。
8.?相互作用與其他類庫模式9.?過量與濫用后果10.?原理11.?理解曲線11.1.?學(xué)習(xí)曲線最簡單的,比起pda,turing
12.?儲藏?13.?包裝與api接口14.?執(zhí)行標(biāo)準(zhǔn)15.?生產(chǎn)組織與個人 ?attilax
?
16.?Ref
Atiitt fsm有限狀態(tài)機(jī)優(yōu)缺點
?