UML基礎(chǔ) UML狀態(tài)機圖概述
本文和大家重點討論一下UML狀態(tài)機圖的概念,UML狀態(tài)機圖中狀態(tài)是給定類的對象的一組屬性值,這組屬性值對所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。
UML狀態(tài)機圖概述
UML狀態(tài)機圖通過對類對象的生存周期建立模型來描述對象隨時間變化的動態(tài)行為。每一個對象都被看作是通過對事件進行探測并做出回應(yīng)來與外界其他部分通信的獨立的實體。事件表示對象可以探測到的事物的一種運動變化—如接受到從一個對象到另一個對象的調(diào)用或信號、某些值的改變或一個時間段的終結(jié)。任何影響對象的事物都可以是事件,真實世界所發(fā)生的事物的模型通過從外部世界到系統(tǒng)的信號來建造的。
狀態(tài)是給定類的對象的一組屬性值,這組屬性值對所發(fā)生的事件具有相同性質(zhì)的反應(yīng)。換而言之,處于相同狀態(tài)的對象對同一事件具有同樣方式的反應(yīng),所以當給定狀態(tài)下的多個對象當接受到相同事件時會執(zhí)行相同的動作,然而處于不同狀態(tài)下的對象會通過不同的動作對同一事件做出不同的反應(yīng)。例如,當自動答復(fù)機處于處理事務(wù)狀態(tài)或空閑狀態(tài)時會對取消鍵做出不同的反應(yīng)。
狀態(tài)機用于描述類的行為,但它們也描述用例、協(xié)作和方法的動態(tài)行為。對這些對象方面而言,一個狀態(tài)代表了執(zhí)行中的一步。我們通常用類和對象來描述狀態(tài)機,但是它也可以被其他元素所直接應(yīng)用。
狀態(tài)機
UML狀態(tài)機圖中狀態(tài)機是展示狀態(tài)與狀態(tài)轉(zhuǎn)換的圖。通常一個狀態(tài)機依附于一個類,并且描述一個類的實例對接受到的事件所發(fā)生的反應(yīng)。狀態(tài)機也可以依附于操作、用例和協(xié)作并描述它們的執(zhí)行過程。
狀態(tài)機是一個類的對象所有可能的生命歷程的模型。對象被孤立地從系統(tǒng)中抽出和考察,任何來自外部的影響被概述為事件。當對象探測到一個事件后,它依照當前的狀態(tài)做出反應(yīng),反應(yīng)包括執(zhí)行一個動作和轉(zhuǎn)換到新狀態(tài)。狀態(tài)機可以構(gòu)造成繼承轉(zhuǎn)換,也能夠?qū)Σl(fā)行為建立模型。
狀態(tài)機是一個對象的局部視圖,一個將對象與其外部世界分離開來并獨立考查其行為的圖。利用狀態(tài)機可以精確地描述行為,但不適合綜合理解系統(tǒng)執(zhí)行操作。如果要更好地理解整個系統(tǒng)范圍內(nèi)的行為產(chǎn)生的影響,那么交互視圖將更有用些。然而,狀態(tài)機有助于理解如用戶接口和設(shè)備控制器這樣的控制機。
組成狀態(tài)
一個簡單狀態(tài)沒有子結(jié)構(gòu),只帶有一組轉(zhuǎn)換和可能的入口和出口動作。UML狀態(tài)機圖的組成狀態(tài)是一個被分解成順序的或并發(fā)的子狀態(tài)的狀態(tài)。表6–4列出了各種狀態(tài)。
表6–4狀態(tài)的種類
將狀態(tài)分解成互斥的子狀態(tài)是對狀態(tài)的一種專門化處理。一個外部狀態(tài)被細分成多個內(nèi)部子狀態(tài),每一個子狀態(tài)都繼承了外部狀態(tài)的轉(zhuǎn)換。在某一時間只有一個子狀態(tài)處于激活狀態(tài)。外部狀態(tài)表達了每一個內(nèi)部狀態(tài)都具有的條件。
進入或離開一個組成狀態(tài)的轉(zhuǎn)換會引起入口動作或出口動作的執(zhí)行。如果有多個組成狀態(tài),跨越多個層次的轉(zhuǎn)換會引起多重入口動作(最外層最先執(zhí)行)和出口動作(最內(nèi)層最先執(zhí)行)的執(zhí)行。如果轉(zhuǎn)換帶有動作,那么這個動作在入口動作執(zhí)行后,出口動作執(zhí)行前執(zhí)行。#p#
組成狀態(tài)也可能在其內(nèi)部具有一個初始狀態(tài)。組成狀態(tài)邊界上的轉(zhuǎn)換隱含為初始狀態(tài)上的轉(zhuǎn)換。一個新對象起始于它的最外層的初始狀態(tài)。如果一個對象到達了它最外層狀態(tài)的終止狀態(tài),那么該對象將被銷毀。初始狀態(tài)、終止狀態(tài)、入口動作和出口動作封裝了狀態(tài)的定義,使狀態(tài)的定義與進出狀態(tài)的轉(zhuǎn)換無關(guān)。
圖6–5展示了一個狀態(tài)的順序分解,其中包括一個初始狀態(tài)。這是售票系統(tǒng)的狀態(tài)機模型。
圖6-5狀態(tài)機
UML狀態(tài)機圖將一個狀態(tài)分解成并發(fā)的多個子狀態(tài)代表相互獨立的并行處理過程。當進入一個并發(fā)超狀態(tài)時,控制線程的數(shù)目增加;當離開一個并發(fā)超狀態(tài)時,控制線程的數(shù)目減少對于每一個狀態(tài)而言,并發(fā)通常依靠不同的對象實現(xiàn),但是,并發(fā)子狀態(tài)還可以代表一個單獨狀態(tài)內(nèi)部的邏輯并發(fā)關(guān)系。圖6–6展示了選修一門大學課程的并發(fā)分解。
圖6–6帶有并發(fā)組成狀態(tài)的狀態(tài)機
圖6–7子機器狀態(tài)
通常,可以在一個狀態(tài)機中使用其他狀態(tài)機的一部分,這種可重用性會帶來一些方便。UML狀態(tài)機圖中狀態(tài)機可以命名,并可以用名字引用其他一個或多個狀態(tài)機。目標狀態(tài)機是一個子機器,引用這個子機器的狀態(tài)叫做子機器引用狀態(tài)。它的含義是在需要引用的地方用一個狀態(tài)機來替換原有內(nèi)容。一個狀態(tài)機可以包含一個活動,即可以包含一個處理過程或一個需要消耗時間才能完成的持續(xù)過程或是可以被中斷的事件,而子機器不能圖6-7演示了子機器的引用。
進入一個子機器引用狀態(tài)的轉(zhuǎn)換會激活目標子機器的初始狀態(tài)。要進入其他狀態(tài)的子機器,需要在子機器引用狀態(tài)中安置一個或多個樁狀態(tài)。樁狀態(tài)用于在子機器中標識狀態(tài)。
【編輯推薦】
- UML狀態(tài)機圖繪制方法及其應(yīng)用說明
- UML構(gòu)件圖的設(shè)計步驟和應(yīng)用說明
- UML建模工具EA與Rose比較摘錄
- 解析用Visio畫UML圖的基本操作和幾種小技巧
- 六種UML圖關(guān)系的表示及在代碼中體現(xiàn)