一、簡介
有限狀態機是一種用來進行對象行為建模的工具,其作用主要是描述對象在它的生命周期內所經歷的狀態序列,以及如何響應來自外界的各種事件。有限狀態機(Finite State Machine或者Finite State Automata)是軟件領域中一種重要的工具,很多東西的模型實際上就是有限狀態機。有限狀態機(FSM)可以用作程序的控制結構。FSM對於那些基於輸入的在幾個不同的可選動作中進行循環的程序尤其合適。投幣售貨機就是FSM的一個好例子。在投幣售貨機的例子中,輸入是硬幣,輸出是待售商品,售貨機有"接受硬幣","選擇商品","發送商品"和"找零錢"等幾種狀態。它的基本思路是用一張表保存所有可能的狀態,並列出進入每個狀態時可能執行的所有動作,其中最後一個動作就是計算(通常在當前狀態和下一次輸入字符的基礎上,另外再經過一次表查詢)下一個應該進入的狀態。
狀態機特別適合描述那些有發生有先後順序,或者有邏輯規律的事情——其實這就是狀態機的本質。狀態機的本質就是對具有邏輯順序或時序規律事件的一種描述方法。這個論斷的最重要的兩個詞就是“邏輯順序”和“時序規律”,這兩點就是狀態機所要描述的核心和強項,換言之,所有具有邏輯順序和時序規律的事情都適合用狀態機描述。
在描述有限狀態機時,狀態、事件、轉換和動作是經常會碰到的幾個基本概念。
•狀態(State):指的是對象在其生命周期中的一種狀況,處於某個特定狀態中的對象必然會滿足某些條件、執行某些動作或者是等待某些事件。
•事件(Event):指的是在時間和空間上占有一定位置,並且對狀態機來講是有意義的那些事情。事件通常會引起狀態的變遷,促使狀態機從一種狀態切換到另一種狀態。
•轉換(Transition):指的是兩個狀態之間的一種關系,表明對象將在第一個狀態中執行一定的動作,並將在某個事件發生同時某個特定條件滿足時進入第二個狀態。
•動作(Action):指的是狀態機中可以執行的那些原子操作,所謂原子操作指的是它們在運行的過程中不能被其他消息所中斷,必須一直執行下去。
狀態機的基本要素有3 個,分別是:狀態、輸出和輸入。
1.狀態:也叫狀態變量。
2.輸出:輸出指在某一個狀態時特定發生的事件。
3.輸入:指狀態機中進入每個狀態的條件,有的狀態機沒有輸入條件,其中的狀態轉移較為簡單,有的狀態機有輸入條件,當某個輸入條件存在時才能轉移到相應的狀態。
根據狀態機的數量是否為有限個,可將狀態機分為有限狀態機(Finite State Machine,FSM)和無限狀態機(Infinite State Machine,ISM)。一般所涉及的狀態都是有限的,所以以後我們所說的狀態機都指有限狀態機,用FSM 表示。