2011-09-13 78 views

回答

1

我喜歡在軟件

  Start 

      | 

     =Initial= <--------------------------------- 
    --------------         | 
    | Transition 1 | --------->  =State 2=  | 
    --------------    --------------- | 
    | Transition 2 | ------- | Transition | --| 
    --------------  |  --------------- | 
          |      | 
          |      | 
          |      | 
          --->  =State 3=  | 
           --------------- | 
           | Transition | --- 
           --------------- 

可視化FSM在這個場景中Initial國家將在一些路徑則可以過渡到Transition 1Transition 2執行的這種方式。 Transition 1開始State 2Transition 2開始State 3Initial狀態可以發出一個事件,說明它將進行轉換Transition 1,然後您的框架可以執行該轉換。

你還會注意到我沒有在這個FSM中結束。你需要一個結束或閉環。

+0

好的謝謝你的答案 – codablank

2

狀態機有許多不同的定義和模型。

在硬件設計中,他們談論米利機·摩爾機,它的不同之處,其中的各種有線引回輸入...

在軟件,FSM的都不太嚴格的定義。整個計算機在某種意義上是一個大型的狀態機。很多代碼將狀態機實現爲簡單的switch語句,並且可能也可能不會將事件發佈給自己。

軟件狀態機的一個流行的定義是UML狀態機(這是很好的,因爲它帶有一個喜愛的圖像格式,也。)http://en.wikipedia.org/wiki/UML_state_machine

UML狀態機可以有一個入口()動作和退出()每個州的行動。根據實施情況,您可以讓這些操作發佈其他事件。

那麼,「FSM能否觸發一個轉換」?取決於定義或實現。一般來說,當然!

+0

那麼,在一個UML狀態機中,狀態的內部轉換可以觸發一個事件? – codablank

+0

任何「操作」都可以發佈事件... 或使用內部轉換。 –

3

從計算理論的角度來看,「純」有限狀態機的唯一功能是將輸入字符串轉換爲N中的一個(在大多數插圖中,它是一對一的(accept vs拒絕)選擇,但N個工作的較大有限值在概念上是相同的)。兩個純粹的有限狀態機是等價的,如果對於任何輸入字符序列,它們將返回相同的N中的結果。從純粹的有限狀態機升級是一個有限狀態轉換器,其中每個邊緣可以導致任意數量的字符被髮送到輸出流,這對任何未來的狀態轉換都沒有影響。如果對於任何輸入字符序列它們將生成相同的輸出字符序列並且將返回相同的N中的結果,那麼兩個這樣的機器是等價的。給定兩個純有限狀態機或兩個純有限狀態轉換器,可以在合理的有界時間內確定它們是否相等(如果兩個換能器(其中較小的換能器具有N個狀態)將產生相同的序列任何輸入序列的輸出最多爲2N個字符,它們將爲任何長度的輸入序列的任何輸入序列生成相同的輸出序列)。如果狀態機被允許產生可以影響其輸入的「事件」,則可以使用相同的方法,但是如果兩臺機器產生完全相同的事件序列並且假定輸入的所有組合被假定爲無論發生什麼事件都是可能的。另一方面,如果某種類型的事件可能以某種方式影響狀態機的輸入,但對機器的用戶不感興趣,或者某些事件序列意味着某些輸入序列不可能發生,可能非常困難(或者甚至基本上不可能)確定用戶不關心的兩種機器是否以用戶不關心的方式相同。

其觸發影響其輸入事件狀態機往往在現實世界中是有用的,但這樣的機器不能使用適用於簡單的機器的方法進行分析。實際上,輸出和輸入之間的聯繫需要被視爲狀態機的一部分;許多這樣的連鎖機制具有許多狀態,這些狀態完全使它們所連接的DFA中的潛在狀​​態的數量變小(如果它有限制的話)。