性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

程序小白
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
【第一章】有限狀態(tài)機(jī)理論速成筆記
【第二章】HSM層次式狀態(tài)機(jī)理論(進(jìn)階版)
【第三章】有限狀態(tài)機(jī)(FSM)之炸彈項(xiàng)目(實(shí)戰(zhàn)1)
【第四章】有限狀態(tài)機(jī)(FSM)之炸彈項(xiàng)目(實(shí)戰(zhàn)2)
【第五章】有限狀態(tài)機(jī)(FSM)之炸彈項(xiàng)目(實(shí)戰(zhàn)3)
【第六章】層次式狀態(tài)機(jī)HSM = 有限狀態(tài)機(jī)FSM + 面向?qū)ο?
作者動(dòng)態(tài) 更多
基于stm32采用PWM驅(qū)動(dòng)伺服控制器學(xué)習(xí)筆記
5天前
基于STM32驅(qū)動(dòng)TM1638學(xué)習(xí)筆記——軟件篇
04-19 12:42
基于TM1638驅(qū)動(dòng)8位數(shù)碼管設(shè)計(jì)分享
02-24 11:26
RT-Thread驅(qū)動(dòng)之路: Studio創(chuàng)建FAL分區(qū)⑤
01-02 08:30
RT-Thread驅(qū)動(dòng)之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

【第二章】HSM層次式狀態(tài)機(jī)理論(進(jìn)階版)

      傳統(tǒng)的有限狀態(tài)機(jī)理論只是根基,現(xiàn)在很少真正把它應(yīng)用到我們的項(xiàng)目中,它已經(jīng)不足以應(yīng)對我們?nèi)缃裨谇度胧较到y(tǒng)的軟件設(shè)計(jì)中遇到的問題了。

      那么啥是HSM? 大牛是這么講的,說實(shí)話有點(diǎn)難懂,我從入門到放棄到再入門了好幾遍,我不打算對這些概念做什么解釋,假如有一天你覺得你的理論不夠用了再回去翻可能效果更好,或者你聽我扯完蛋,再去看發(fā)現(xiàn)也不是那么難懂,我就滿足了。

      我的理解:HSM就是一個(gè)狀態(tài)機(jī)包含子狀態(tài)機(jī),從而形成的層次結(jié)構(gòu),這不就是面向?qū)ο罄碚摵陀邢逘顟B(tài)機(jī)理論結(jié)合的產(chǎn)物?對的,這年頭,你搞嵌入式軟件設(shè)計(jì),要是沒點(diǎn)面向?qū)ο蟮乃枷朐诶锩?,出門都不好意思和同行打招呼(他有女朋友,我有對象~?。?/p>

對比一下傳統(tǒng)的FSM狀態(tài)機(jī),可能更好懂一些,(請忽略內(nèi)部那些e/x后面再說)如下:

為什么要引入層次式狀態(tài)機(jī),這種嵌套的結(jié)構(gòu)明顯會(huì)將事情搞復(fù)雜。

      層次式狀態(tài)機(jī)的設(shè)計(jì)和實(shí)現(xiàn)說實(shí)話灰常復(fù)雜,你要是沒學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法,就不要去看他的源碼了,挫敗感瞬間會(huì)涌上心頭。那么為啥還要用呢,設(shè)計(jì)層次式狀態(tài)機(jī)是復(fù)雜,但是應(yīng)用起來并不復(fù)雜,沒有啥比調(diào)用函數(shù)API解決問題更簡單的方式了,而很有意思的是,應(yīng)用它你的應(yīng)用會(huì)變得無比清晰和簡明。

      軟件界中,最糟糕的設(shè)計(jì)之一,重復(fù)造輪技術(shù),因?yàn)殡S著需求的爆發(fā),它最終會(huì)演變成你我都看不懂的存在(哪怕你用作文寫注釋)。

      我們由一個(gè)現(xiàn)實(shí)的問題,來切入到從傳統(tǒng)的有限狀態(tài)機(jī)(FSM)切換到層次狀態(tài)機(jī)(HSM)所帶來的好處舉一個(gè)空調(diào)的運(yùn)行控制的例子吧,空調(diào)大家都熟悉,內(nèi)部四大件:壓縮機(jī) 四通閥 冷凝器(帶風(fēng)扇)蒸發(fā)器(帶風(fēng)扇)。

      當(dāng)你從關(guān)機(jī)狀態(tài)到制冷模式和制熱模式兩種狀態(tài),其實(shí)兩個(gè)風(fēng)機(jī)都要開,壓機(jī)也都要開,區(qū)別在于四通閥的方向不一樣。

      傳統(tǒng)FSM: 關(guān)機(jī)狀態(tài), 制冷狀態(tài),制熱狀態(tài)等三個(gè)狀態(tài)。在制冷制熱狀態(tài)都要開風(fēng)機(jī)和壓機(jī),代碼里面你要寫兩遍(再現(xiàn)重復(fù)造輪技術(shù))。

      進(jìn)階HSM: 關(guān)機(jī)狀態(tài),運(yùn)行狀態(tài),運(yùn)行子狀態(tài):制冷,運(yùn)行子狀態(tài):制熱,開風(fēng)機(jī)和壓機(jī)的操作扔進(jìn)運(yùn)行狀態(tài)處理(也叫超狀態(tài),可以類比) ,這樣代碼中寫一遍就可以(復(fù)用的藝術(shù))。

      這里應(yīng)用到了面向?qū)ο蟮暮诵闹?,繼承思想來實(shí)現(xiàn)復(fù)用,在軟件設(shè)計(jì)中,沒有比這更實(shí)用的技術(shù)。

      既然提到了面向?qū)ο?,提一下三大核心概念,封裝繼承和多態(tài),上面應(yīng)用的就是繼承思想,在事件驅(qū)動(dòng)型系統(tǒng)中,我們叫行為繼承,接下來介紹那兩大概念。

      封裝技術(shù)是基于抽象而來的,抽象抽象是抽成一頭象,不是真讓你去抽象(可能有繩命危險(xiǎn)),他的作用主要是,能讓你縮放自如,代碼界大??偸悄芤噪y以想象的速度定位bug,增加需求等其實(shí)用的就是縮放技術(shù)(并不是他的腦回路連接方式和我們的不同)。

      運(yùn)用這個(gè)技術(shù)可以讓你以各種方式把大象放進(jìn)冰箱,是開/關(guān)門一頭放,還是切了放,完全取決于你是不是認(rèn)為他是一頭象。這么說有點(diǎn)抽象,具體點(diǎn),你去四兒子店告訴銷售,你要買輛車,他會(huì)立即向你介紹各種車型,假如你說我要四個(gè)輪子,一個(gè)發(fā)動(dòng)機(jī),一個(gè)變速箱,一個(gè)車殼,加一個(gè)底盤等等。他可能會(huì)懷疑人生。

      多態(tài)對應(yīng)我們的狀態(tài)機(jī)就更好理解了,例如制冷狀態(tài) 制熱都是針對運(yùn)行狀態(tài)的多種狀態(tài)的擴(kuò)展,基于同一個(gè)超狀態(tài)擴(kuò)展多個(gè)子狀態(tài)。

      到這里關(guān)于層次式狀態(tài)機(jī)是個(gè)啥,他為何而來,他到底怎么來的 ,你可能腦子里有個(gè)大體的印象了。這里層次式狀態(tài)機(jī)雖然是基于面向?qū)ο蠹夹g(shù)而產(chǎn)生,但是他不等于面向?qū)ο缶幊?,和我們傳統(tǒng)的對象和類的概念還是不小的區(qū)別,實(shí)踐中慢慢體會(huì)吧 。

      經(jīng)典狀態(tài)機(jī)分兩種:Mealy 機(jī)和 Moore機(jī)。

      簡單介紹:Mealy 機(jī) 沒有進(jìn)入動(dòng)作和退出動(dòng)作,只有狀態(tài)和轉(zhuǎn)換動(dòng)作。

                       Moore 機(jī) 有進(jìn)入動(dòng)作和退出動(dòng)作,沒有轉(zhuǎn)換動(dòng)作。

      這里不打算分開講了,UML對經(jīng)典狀態(tài)機(jī)進(jìn)行了擴(kuò)展,合二為一,也就是一個(gè)狀態(tài)機(jī)有:狀態(tài),進(jìn)入動(dòng)作,退出動(dòng)作,轉(zhuǎn)換動(dòng)作組成。關(guān)于啥是UML(這個(gè)叫做統(tǒng)一建模語言,我建議你不要去看,這顆思想的種子需要挖一個(gè)好大的坑,容易閃腰)。

      看到這里,你應(yīng)該知道什么是層次式狀態(tài)機(jī)了,也知道了怎么構(gòu)造他,但這還不夠,下面還有個(gè)大活,就是層次式狀態(tài)機(jī)是如何轉(zhuǎn)換的,說實(shí)話我看完原著沒怎么懂,只有自己真的上機(jī)執(zhí)行 和操作過了以后,算是基本搞明白了,所以這里,我不打算展開去講理論如何轉(zhuǎn)換的,書里講的比我專業(yè)很多。

      我想告訴大家基于層次式狀態(tài)機(jī)設(shè)計(jì)的幾個(gè)屬性,記住他們,你就可以直接上例子,我們再例子里面慢慢聊了。

      劃重點(diǎn):一、狀態(tài)機(jī)可以分層次,但是系統(tǒng)停留階段只能是最終的子狀態(tài),他不能停留在任何層次的超狀態(tài),這個(gè)停留的狀態(tài)稱為活動(dòng)狀態(tài)。例如上面空調(diào)的例子,運(yùn)行狀態(tài)無法停留,他是一個(gè)過渡狀態(tài),執(zhí)行他是有意義的,但停留沒有意義,最終活動(dòng)狀態(tài)要么制冷要么制熱狀態(tài)。

     劃重點(diǎn):二、狀態(tài)機(jī)本身是不會(huì)有任何動(dòng)作的,只有觸發(fā)相關(guān)事件,他才會(huì)執(zhí)行程序上下文,每個(gè)事件會(huì)有對應(yīng)的動(dòng)作范型,這里講一下一個(gè)狀態(tài)機(jī)必備的事件-動(dòng)作范型。

            初始事件-動(dòng)作范型:也就是狀態(tài)機(jī)在初始化過程中需要執(zhí)行的程序上下文。

            進(jìn)入事件-動(dòng)作范型:切換狀態(tài)機(jī)時(shí),目標(biāo)狀態(tài)機(jī)必須執(zhí)行的程序上下文。

            退出事件-動(dòng)作范型:切換狀態(tài)機(jī)時(shí),源狀態(tài)機(jī)必須執(zhí)行的程序上下文。

            轉(zhuǎn)換事件-動(dòng)作范型:切換狀態(tài)機(jī)時(shí),先于進(jìn)入/退出動(dòng)作執(zhí)行的程序上下文。

      層次式狀態(tài)機(jī)的內(nèi)部實(shí)現(xiàn)復(fù)雜,應(yīng)用只是看著復(fù)雜,當(dāng)你真正理解以后,會(huì)覺得無比清晰和簡單。下一屆講大活,層次式狀態(tài)機(jī)的轉(zhuǎn)換執(zhí)行的順序和動(dòng)作集,下期再見~!

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 8
收藏 9
關(guān)注 150
成為作者 賺取收益
全部留言
0/200
  • 星球居民-G9sQj7p6 2020-12-30 13:04
    學(xué)習(xí)一下
    回復(fù)