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