有限狀態(tài)機(jī)介紹._第1頁
有限狀態(tài)機(jī)介紹._第2頁
有限狀態(tài)機(jī)介紹._第3頁
有限狀態(tài)機(jī)介紹._第4頁
有限狀態(tài)機(jī)介紹._第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、有限狀態(tài)機(jī)有限狀態(tài)機(jī) 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第2頁頁 1. 有限狀態(tài)機(jī)的基本概念有限狀態(tài)機(jī)的基本概念 2. 有限狀態(tài)機(jī)編程方法有限狀態(tài)機(jī)編程方法 主要內(nèi)容主要內(nèi)容 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第3頁頁 狀態(tài)機(jī)的引入狀態(tài)機(jī)的引入 n狀態(tài)機(jī)理論最初的發(fā)展在數(shù)字電路設(shè)計領(lǐng)域。狀態(tài)機(jī)理論最初的發(fā)展在數(shù)字電路設(shè)計領(lǐng)域。 n在數(shù)字電路方面,根據(jù)輸出是否與輸入信號有關(guān),狀在數(shù)字電路方面,根據(jù)輸出是否與輸入信號有關(guān),狀 態(tài)機(jī)可以劃分為態(tài)機(jī)可以劃分為Mealy型和型和Moore型狀態(tài)機(jī)。型狀態(tài)機(jī)。 Moore 型狀態(tài)機(jī)的輸出只和當(dāng)前狀態(tài)有關(guān),和輸入無關(guān)。型狀態(tài)機(jī)的輸出只和當(dāng)

2、前狀態(tài)有關(guān),和輸入無關(guān)。 Mealy型狀態(tài)機(jī)的輸入是由當(dāng)前狀態(tài)和輸入共同決定。型狀態(tài)機(jī)的輸入是由當(dāng)前狀態(tài)和輸入共同決定。 n而在軟件設(shè)計領(lǐng)域,狀態(tài)機(jī)的理論儼然已經(jīng)自成一體,而在軟件設(shè)計領(lǐng)域,狀態(tài)機(jī)的理論儼然已經(jīng)自成一體, 它經(jīng)常用來描述一些復(fù)雜的算法,表明一些算法的內(nèi)它經(jīng)常用來描述一些復(fù)雜的算法,表明一些算法的內(nèi) 部的結(jié)構(gòu)和流程,更多的關(guān)注于程序?qū)ο蟮膱?zhí)行順序。部的結(jié)構(gòu)和流程,更多的關(guān)注于程序?qū)ο蟮膱?zhí)行順序。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第4頁頁 n靜態(tài)順序結(jié)構(gòu)靜態(tài)順序結(jié)構(gòu) n動態(tài)結(jié)構(gòu)動態(tài)結(jié)構(gòu) 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第5頁頁 有限狀態(tài)機(jī)有限狀態(tài)機(jī) n有限自

3、動機(jī)(有限自動機(jī)(Finite Automata Machine)是計算機(jī)科學(xué))是計算機(jī)科學(xué) 的重要基石,它在軟件開發(fā)領(lǐng)域內(nèi)通常被稱作有限狀態(tài)的重要基石,它在軟件開發(fā)領(lǐng)域內(nèi)通常被稱作有限狀態(tài) 機(jī)(機(jī)(Finite State Machine),是一種應(yīng)用非常廣泛的軟),是一種應(yīng)用非常廣泛的軟 件設(shè)計模式。件設(shè)計模式。 n有限狀態(tài)機(jī)的作用主要是有限狀態(tài)機(jī)的作用主要是描述對象在它的生命周期內(nèi)所描述對象在它的生命周期內(nèi)所 經(jīng)歷的狀態(tài)序列,以及如何響應(yīng)來自外界的各種事件經(jīng)歷的狀態(tài)序列,以及如何響應(yīng)來自外界的各種事件。 n在現(xiàn)實(shí)中,有許多事情可以用有限個狀態(tài)來表達(dá),如在現(xiàn)實(shí)中,有許多事情可以用有限個狀態(tài)

4、來表達(dá),如: 紅綠燈、電話機(jī)等等。紅綠燈、電話機(jī)等等。 其實(shí),在資訊領(lǐng)域中,很多事情其實(shí),在資訊領(lǐng)域中,很多事情 都是由有限的狀態(tài)所組成,再由于不同的輸入而衍生出都是由有限的狀態(tài)所組成,再由于不同的輸入而衍生出 各個狀態(tài)。各個狀態(tài)。 2021-7-12第第6頁頁 有限狀態(tài)機(jī)有限狀態(tài)機(jī) n有限狀態(tài)機(jī)有限狀態(tài)機(jī)FSM思想廣泛思想廣泛應(yīng)用應(yīng)用于于硬件控制硬件控制電路設(shè)計,也電路設(shè)計,也 是是軟件軟件上常用的一種處理方法上常用的一種處理方法(軟件軟件上稱為上稱為FMM-有限有限 消息機(jī)消息機(jī))。它把復(fù)雜的。它把復(fù)雜的控制控制邏輯分解成邏輯分解成有限個有限個穩(wěn)定狀態(tài),穩(wěn)定狀態(tài), 在每個狀態(tài)上判斷事件,變

5、連續(xù)處理為在每個狀態(tài)上判斷事件,變連續(xù)處理為離散離散數(shù)字?jǐn)?shù)字處理,處理, 符合計算機(jī)的工作特點(diǎn)。符合計算機(jī)的工作特點(diǎn)。 n同時,因?yàn)橛邢逘顟B(tài)機(jī)具有有限個狀態(tài),所以可以在實(shí)同時,因?yàn)橛邢逘顟B(tài)機(jī)具有有限個狀態(tài),所以可以在實(shí) 際的工程上實(shí)現(xiàn)。但這并不意味著其只能進(jìn)行有限次的際的工程上實(shí)現(xiàn)。但這并不意味著其只能進(jìn)行有限次的 處理,相反,有限狀態(tài)機(jī)是閉環(huán)系統(tǒng),有限無窮,可以處理,相反,有限狀態(tài)機(jī)是閉環(huán)系統(tǒng),有限無窮,可以 用有限的狀態(tài),處理無窮的事務(wù)。用有限的狀態(tài),處理無窮的事務(wù)。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第7頁頁 有限狀態(tài)機(jī)有限狀態(tài)機(jī)例例1 n紅綠燈紅綠燈 紅綠燈運(yùn)作的原理相當(dāng)簡單

6、,從一開始綠燈,經(jīng)過一段時間后,紅綠燈運(yùn)作的原理相當(dāng)簡單,從一開始綠燈,經(jīng)過一段時間后, 將變?yōu)辄S燈,將變?yōu)辄S燈, 再隔一會兒,就會變成紅燈,如此不斷反覆。再隔一會兒,就會變成紅燈,如此不斷反覆。 其其 FSM如下。如下。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第8頁頁 有限狀態(tài)機(jī)有限狀態(tài)機(jī)例例2 n自動販?zhǔn)蹤C(jī)自動販?zhǔn)蹤C(jī) 假設(shè)有簡單的一自動販賣機(jī)販?zhǔn)蹆深惿唐?,一類售價假設(shè)有簡單的一自動販賣機(jī)販?zhǔn)蹆深惿唐?,一類售價20元,元, 另一類售價另一類售價50元。元。 如果該販賣機(jī)只能辨識如果該販賣機(jī)只能辨識10元及元及50元硬幣。元硬幣。 一一 開始機(jī)器處于開始機(jī)器處于Hello的狀態(tài),當(dāng)投入的

7、狀態(tài),當(dāng)投入10元時,機(jī)器會進(jìn)入余額不足元時,機(jī)器會進(jìn)入余額不足 的狀態(tài),直到投入的金額大于的狀態(tài),直到投入的金額大于20元為止。元為止。 如果一次投入如果一次投入50元,則元,則 可以選擇所有的產(chǎn)品,否則就只能選擇可以選擇所有的產(chǎn)品,否則就只能選擇20元的產(chǎn)品。元的產(chǎn)品。 完成選擇后,完成選擇后, 將會賣出商品并且找回剩余的零錢,隨后,機(jī)器又將返回初始的狀將會賣出商品并且找回剩余的零錢,隨后,機(jī)器又將返回初始的狀 態(tài)。態(tài)。 其其FSM如下。如下。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第9頁頁 基本概念基本概念 n在描述有限狀態(tài)機(jī)時,常會碰到的幾個基本概念:在描述有限狀態(tài)機(jī)時,常會碰到

8、的幾個基本概念: n狀態(tài)(狀態(tài)(State)指的是對象在其生命周期中的一種狀況,處于指的是對象在其生命周期中的一種狀況,處于 某個特定狀態(tài)中的對象必然會滿足某些條件、執(zhí)行某些動作或某個特定狀態(tài)中的對象必然會滿足某些條件、執(zhí)行某些動作或 者是等待某些事件。者是等待某些事件。 n事件(事件(Event)指的是在時間和空間上占有一定位置,并且對指的是在時間和空間上占有一定位置,并且對 狀態(tài)機(jī)來講是有意義的那些事情。事件通常會引起狀態(tài)的變遷,狀態(tài)機(jī)來講是有意義的那些事情。事件通常會引起狀態(tài)的變遷, 促使?fàn)顟B(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài)。促使?fàn)顟B(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài)。 n轉(zhuǎn)換(轉(zhuǎn)換(Transi

9、tion)指的是兩個狀態(tài)之間的一種關(guān)系,表明對指的是兩個狀態(tài)之間的一種關(guān)系,表明對 象將在第一個狀態(tài)中執(zhí)行一定的動作,并將在某個事件發(fā)生同象將在第一個狀態(tài)中執(zhí)行一定的動作,并將在某個事件發(fā)生同 時某個特定條件滿足時進(jìn)入第二個狀態(tài)。時某個特定條件滿足時進(jìn)入第二個狀態(tài)。 n動作(動作(Action)指的是狀態(tài)機(jī)中可以執(zhí)行的那些原子操作,指的是狀態(tài)機(jī)中可以執(zhí)行的那些原子操作, 所謂原子操作指的是它們在運(yùn)行的過程中不能被其他消息所中所謂原子操作指的是它們在運(yùn)行的過程中不能被其他消息所中 斷,必須一直執(zhí)行下去。斷,必須一直執(zhí)行下去。 2021-7-12第第10頁頁 有限狀態(tài)機(jī)模型有限狀態(tài)機(jī)模型 n通信協(xié)

10、議建模通信協(xié)議建模 n基本出發(fā)點(diǎn):認(rèn)為通信協(xié)議主要是由響應(yīng)多個基本出發(fā)點(diǎn):認(rèn)為通信協(xié)議主要是由響應(yīng)多個“事件事件”的相對的相對 簡單的處理過程組成。簡單的處理過程組成。 n狀態(tài)轉(zhuǎn)移圖狀態(tài)轉(zhuǎn)移圖 n優(yōu)點(diǎn):簡單明了,比較精確。優(yōu)點(diǎn):簡單明了,比較精確。 n缺點(diǎn):對許多復(fù)雜的協(xié)議,事件數(shù)和狀態(tài)數(shù)會劇增,處理困難。缺點(diǎn):對許多復(fù)雜的協(xié)議,事件數(shù)和狀態(tài)數(shù)會劇增,處理困難。 2021-7-12第第11頁頁 為什么使用有限狀態(tài)機(jī)為什么使用有限狀態(tài)機(jī) n在面向?qū)ο蟮能浖到y(tǒng)中,一個對象無論多么簡單或者多么復(fù)雜,都在面向?qū)ο蟮能浖到y(tǒng)中,一個對象無論多么簡單或者多么復(fù)雜,都 必然會經(jīng)歷一個從開始創(chuàng)建到最終消亡的

11、完整過程,這通常被稱為對必然會經(jīng)歷一個從開始創(chuàng)建到最終消亡的完整過程,這通常被稱為對 象的象的生命周期生命周期。 n對象在其生命期內(nèi)是不可能完全孤立的,它必須通過發(fā)送消息來影響對象在其生命期內(nèi)是不可能完全孤立的,它必須通過發(fā)送消息來影響 其它對象,或者通過接受消息來改變自身。其它對象,或者通過接受消息來改變自身。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第12頁頁 為什么使用有限狀態(tài)機(jī)為什么使用有限狀態(tài)機(jī) n在銀行客戶管理系統(tǒng)中,客戶類(在銀行客戶管理系統(tǒng)中,客戶類(Customer)的實(shí)例在需要的時候,)的實(shí)例在需要的時候, 可能會調(diào)用帳戶(可能會調(diào)用帳戶(Account)類中定義的)類

12、中定義的getBalance()方法。在這種簡方法。在這種簡 單的情況下,類單的情況下,類Customer并不需要一個有限狀態(tài)機(jī)來描述自己的行為,并不需要一個有限狀態(tài)機(jī)來描述自己的行為, 主要原因在于它當(dāng)前的行為并不依賴于過去的某個狀態(tài)。主要原因在于它當(dāng)前的行為并不依賴于過去的某個狀態(tài)。 n并不是所有情況都會如此簡單,事實(shí)上許多實(shí)用的軟件系統(tǒng)都必須維并不是所有情況都會如此簡單,事實(shí)上許多實(shí)用的軟件系統(tǒng)都必須維 護(hù)一兩個非常關(guān)鍵的對象,它們通常具有非常復(fù)雜的狀態(tài)轉(zhuǎn)換關(guān)系,護(hù)一兩個非常關(guān)鍵的對象,它們通常具有非常復(fù)雜的狀態(tài)轉(zhuǎn)換關(guān)系, 而且需要對來自外部的各種事件進(jìn)行響應(yīng)。而且需要對來自外部的各種事

13、件進(jìn)行響應(yīng)。 n例如,在例如,在VoIP電話系統(tǒng)(找狀態(tài)圖)電話系統(tǒng)(找狀態(tài)圖)中,電話類(中,電話類(Telephone)的實(shí)例)的實(shí)例 必須能夠響應(yīng)來自對方的隨機(jī)呼叫,來自用戶的按鍵事件,以及來自必須能夠響應(yīng)來自對方的隨機(jī)呼叫,來自用戶的按鍵事件,以及來自 網(wǎng)絡(luò)的信令等。在處理這些消息時,類網(wǎng)絡(luò)的信令等。在處理這些消息時,類Telephone所要采取的行為完全所要采取的行為完全 依賴于它當(dāng)前所處的狀態(tài),此時使用狀態(tài)機(jī)將是一個不錯的選擇。依賴于它當(dāng)前所處的狀態(tài),此時使用狀態(tài)機(jī)將是一個不錯的選擇。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第13頁頁 為什么使用有限狀態(tài)機(jī)為什么使用有限狀態(tài)機(jī)

14、 n游戲引擎是有限狀態(tài)機(jī)最為成功的應(yīng)用領(lǐng)域之一,由于設(shè)計良好的狀游戲引擎是有限狀態(tài)機(jī)最為成功的應(yīng)用領(lǐng)域之一,由于設(shè)計良好的狀 態(tài)機(jī)能夠被用來取代部分的人工智能算法,因此游戲中的每個角色或態(tài)機(jī)能夠被用來取代部分的人工智能算法,因此游戲中的每個角色或 者器件都有可能內(nèi)嵌一個狀態(tài)機(jī)。者器件都有可能內(nèi)嵌一個狀態(tài)機(jī)。 n考慮考慮RPG( Role-playing Game)游戲中城門這樣一個簡單的對象,它)游戲中城門這樣一個簡單的對象,它 具有打開(具有打開(Opened)、關(guān)閉()、關(guān)閉(Closed)、上鎖()、上鎖(Locked)、解鎖)、解鎖 (Unlocked)四種狀態(tài)。當(dāng)玩家到達(dá)一個處于狀態(tài)

15、)四種狀態(tài)。當(dāng)玩家到達(dá)一個處于狀態(tài)Locked的門時,如的門時,如 果此時他已經(jīng)找到了用來開門的鑰匙,那么他就可以利用它將門的當(dāng)果此時他已經(jīng)找到了用來開門的鑰匙,那么他就可以利用它將門的當(dāng) 前狀態(tài)轉(zhuǎn)變?yōu)榍盃顟B(tài)轉(zhuǎn)變?yōu)閁nlocked,進(jìn)一步還可以通過旋轉(zhuǎn)門上的把手將其狀態(tài),進(jìn)一步還可以通過旋轉(zhuǎn)門上的把手將其狀態(tài) 轉(zhuǎn)變?yōu)檗D(zhuǎn)變?yōu)镺pened,從而成功進(jìn)入城內(nèi)。,從而成功進(jìn)入城內(nèi)。 2021-7-12第第14頁頁 控制城門的狀態(tài)機(jī)控制城門的狀態(tài)機(jī) 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第15頁頁 1. 有限狀態(tài)機(jī)的基本概念有限狀態(tài)機(jī)的基本概念 2. 有限狀態(tài)機(jī)編程方法有限狀態(tài)機(jī)編程方法 主要內(nèi)容

16、主要內(nèi)容 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第16頁頁 確定的有限狀態(tài)機(jī)確定的有限狀態(tài)機(jī) n一個一個DFA M是一個五元組,記作是一個五元組,記作 M = (S, , f, S0, Z),其中,其中 1) S = 狀態(tài)狀態(tài)i,S是一個有限集,其中的每一個元素稱為一個狀態(tài)是一個有限集,其中的每一個元素稱為一個狀態(tài) 2) = 輸入字符輸入字符i, 是一個有窮字母表,它的每一個元素稱為一個是一個有窮字母表,它的每一個元素稱為一個 輸入字符輸入字符 3) f : S S,f 是轉(zhuǎn)換函數(shù),表示某狀態(tài)接受某個是轉(zhuǎn)換函數(shù),表示某狀態(tài)接受某個輸入字符輸入字符所到所到 達(dá)的狀態(tài),如:達(dá)的狀態(tài),如:f(

17、p,a) = q,p,q S,a 4) S0 S, S0是是S中的元素,是唯一的一個初態(tài)中的元素,是唯一的一個初態(tài) 5) Z S,且,且 Z ,Z是是S的一個子集,是一個終態(tài)集,或叫結(jié)束集的一個子集,是一個終態(tài)集,或叫結(jié)束集 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第17頁頁 確定的有限狀態(tài)機(jī)確定的有限狀態(tài)機(jī) 左側(cè)的狀態(tài)圖,在數(shù)學(xué)上稱作左側(cè)的狀態(tài)圖,在數(shù)學(xué)上稱作DFA, 其形式化定義為:其形式化定義為: M=(S, , f, S0, Z) 其中,其中,S = 0 , 1 , 2 , 3 = a , b , c , d S0 = 0 Z = 3 源狀態(tài)源狀態(tài)輸入輸入目的狀態(tài)目的狀態(tài) 0a1

18、0C2 1d1 1b3 2d3 f: 013 a b c d d 2 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第18頁頁 手工編寫狀態(tài)機(jī)手工編寫狀態(tài)機(jī) n與其他常用的設(shè)計模式有所不同,程序員想要在自己的軟件系統(tǒng)與其他常用的設(shè)計模式有所不同,程序員想要在自己的軟件系統(tǒng) 中加入狀態(tài)機(jī)時,必須再額外編寫一部分用于邏輯控制的代碼,中加入狀態(tài)機(jī)時,必須再額外編寫一部分用于邏輯控制的代碼, 如果系統(tǒng)足夠復(fù)雜的話,這部分代碼實(shí)現(xiàn)和維護(hù)起來還是相當(dāng)困如果系統(tǒng)足夠復(fù)雜的話,這部分代碼實(shí)現(xiàn)和維護(hù)起來還是相當(dāng)困 難的。難的。 n在實(shí)現(xiàn)有限狀態(tài)機(jī)時,使用在實(shí)現(xiàn)有限狀態(tài)機(jī)時,使用switch語句語句是最簡單也是最直

19、接的一是最簡單也是最直接的一 種方式,其基本思路是為狀態(tài)機(jī)中的每一種狀態(tài)都設(shè)置一個種方式,其基本思路是為狀態(tài)機(jī)中的每一種狀態(tài)都設(shè)置一個case 分支,專門用于對該狀態(tài)進(jìn)行控制。分支,專門用于對該狀態(tài)進(jìn)行控制。 n學(xué)習(xí)學(xué)習(xí)doorFSM工程,如何編程實(shí)現(xiàn)有限狀態(tài)機(jī)。工程,如何編程實(shí)現(xiàn)有限狀態(tài)機(jī)。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第19頁頁 手工編寫狀態(tài)機(jī)手工編寫狀態(tài)機(jī) n在很長一段時期內(nèi),使用在很長一段時期內(nèi),使用switch語句一直是實(shí)現(xiàn)有限狀態(tài)機(jī)的唯一語句一直是實(shí)現(xiàn)有限狀態(tài)機(jī)的唯一 方法,甚至像編譯器這樣復(fù)雜的軟件系統(tǒng),大部分也都直接采用這方法,甚至像編譯器這樣復(fù)雜的軟件系統(tǒng),大

20、部分也都直接采用這 種實(shí)現(xiàn)方式。但之后隨著狀態(tài)機(jī)應(yīng)用的逐漸深入,構(gòu)造出來的狀態(tài)種實(shí)現(xiàn)方式。但之后隨著狀態(tài)機(jī)應(yīng)用的逐漸深入,構(gòu)造出來的狀態(tài) 機(jī)越來越復(fù)雜,這種方法也開始面臨各種嚴(yán)峻的考驗(yàn)。如果狀態(tài)機(jī)機(jī)越來越復(fù)雜,這種方法也開始面臨各種嚴(yán)峻的考驗(yàn)。如果狀態(tài)機(jī) 中的狀態(tài)非常多,或者狀態(tài)之間的轉(zhuǎn)換關(guān)系異常復(fù)雜,那么簡單地中的狀態(tài)非常多,或者狀態(tài)之間的轉(zhuǎn)換關(guān)系異常復(fù)雜,那么簡單地 使用使用switch語句構(gòu)造出來的狀態(tài)機(jī)將是不可維護(hù)的。語句構(gòu)造出來的狀態(tài)機(jī)將是不可維護(hù)的。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第20頁頁 doorFSM程序?qū)嵗绦驅(qū)嵗?(1)新建一個)新建一個Win32 Cons

21、ole Application的簡單應(yīng)用程序,并利的簡單應(yīng)用程序,并利 用用ClassWiard建立建立doorFSM類,用類,用doorFSM實(shí)現(xiàn)狀態(tài)機(jī)。實(shí)現(xiàn)狀態(tài)機(jī)。 (2)編寫)編寫doorFSM.h頭文件頭文件 (3)編寫)編寫doorFSM.cpp源程序源程序 添加狀態(tài)、事件、轉(zhuǎn)化函數(shù)等添加狀態(tài)、事件、轉(zhuǎn)化函數(shù)等 (4)添加測試程序)添加測試程序Test.cpp 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第21頁頁 DoorFSM類類 class DoorFSM public: enum Event Lock, Unlock, Open, Close; / Events protec

22、ted: void enterOpened(); void enterLocked(); void enterUnlocked(); void enterClosed(); public: enum States Closed, Unlocked, Locked, Opened; / states States doorState; public: DoorFSM() doorState = Opened; / Constructor virtual DoorFSM() / Destructor States currentState() return doorState; / Get cur

23、rent FSM state, returns current FSM state void processEvent( Event e ); / perform event static const char* eventName( Event e ); / Get symbolic name of an event static const char* stateName( States s );/ Get symbolic name of a state ; 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第22頁頁 doorFSM.cpp實(shí)現(xiàn)文件實(shí)現(xiàn)文件 nvoid DoorFSM:pro

24、cessEvent( Event e ) n n States yOld = doorState; n bool pass = false; n switch( yOld ) n /transitions n case Closed: n if( e = Open ) n /outcome actions n doorState = Opened; n pass = true; n n else if( e = Lock ) n /outcome actions n doorState = Locked; n pass = true; n n break; case Unlocked: if(

25、 e = Lock ) /outcome actions doorState = Locked; pass = true; else if( e = Open ) /outcome actions doorState = Opened; pass = true; break; case Locked: if( e = Unlock ) /outcome actions doorState = Unlocked; pass = true; break; 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第23頁頁 自動生成狀態(tài)機(jī)自動生成狀態(tài)機(jī) n為實(shí)用的軟件系統(tǒng)編寫狀態(tài)機(jī)并不是一件十分輕松的事情,特別

26、是為實(shí)用的軟件系統(tǒng)編寫狀態(tài)機(jī)并不是一件十分輕松的事情,特別是 當(dāng)狀態(tài)機(jī)本身比較復(fù)雜的時候尤其如此。人們開始嘗試開發(fā)一些工當(dāng)狀態(tài)機(jī)本身比較復(fù)雜的時候尤其如此。人們開始嘗試開發(fā)一些工 具來自動生成有限狀態(tài)機(jī)的框架代碼,而在具來自動生成有限狀態(tài)機(jī)的框架代碼,而在Linux下就有一個挺不下就有一個挺不 錯的選擇錯的選擇FSME(Finite State Machine Editor)。)。 nFSME是一個是一個基于基于Qt的有限狀態(tài)機(jī)工具的有限狀態(tài)機(jī)工具,它能夠讓用戶通過圖形化,它能夠讓用戶通過圖形化 的方式來對程序中所需要的狀態(tài)機(jī)進(jìn)行建模,并且還能夠自動生成的方式來對程序中所需要的狀態(tài)機(jī)進(jìn)行建模,并且還能夠自動生成 用用C+或者或者Python實(shí)現(xiàn)的狀態(tài)機(jī)框架代碼。實(shí)現(xiàn)的狀態(tài)機(jī)框架代碼。 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第24頁頁 可視化的可視化的FSME 2021-7-12通信軟件設(shè)計通信軟件設(shè)計第第25頁頁 狀態(tài)機(jī)建模狀態(tài)機(jī)建模 首先運(yùn)行首先運(yùn)行fsme命令命令 來啟動狀態(tài)機(jī)編輯器,然來啟動狀態(tài)機(jī)編輯器,然 后單擊工具欄上后單擊工具欄上 New 按鈕來創(chuàng)建一個新的狀態(tài)按鈕來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論