UML 狀態(tài)圖是圖表本身的名稱,主要用于描述對象具有的各種狀態(tài)、狀態(tài)之間的轉(zhuǎn)換過程以及觸發(fā)狀態(tài)轉(zhuǎn)換的各種事件和條件。
UML 狀態(tài)圖描述了一個狀態(tài)機,可以被定義為一臺機器,它定義了一個對象,這些狀態(tài)控制外部或內(nèi)部事件的不同狀態(tài)。
狀態(tài)機由狀態(tài)、轉(zhuǎn)換、事件、活動和動作五部分組成。
UML 狀態(tài)圖可以捕獲對象、子系統(tǒng)和系統(tǒng)的生命周期,可以告知一個對象可以擁有的狀態(tài),并且事件(如消息的接收,時間的流逝、錯誤、條件為真等)會怎樣隨著時間的推移來影響這些狀態(tài)。一個狀態(tài)圖應(yīng)該連接到所有具有清晰的可標(biāo)志狀態(tài)和復(fù)雜行為的類;該圖可以確定類的行為以及該行為如何根據(jù)當(dāng)前的狀態(tài)而變化,也可以展示哪些事件將會改變類的對象的狀態(tài)。
狀態(tài)圖主要是為了模擬響應(yīng)系統(tǒng)。
以下是使用狀態(tài)圖的主要目的:
為了模擬系統(tǒng)的動態(tài)環(huán)節(jié)。
反應(yīng)系統(tǒng)模型生命周期。
一個對象來描述不同的狀態(tài),在其生命周期的時間。
定義一個狀態(tài)機模型狀態(tài)的對象。
狀態(tài)圖是用來描述不同的對象在其生命周期的狀態(tài)。因此,強調(diào)的是一些內(nèi)部或外部事件的狀態(tài)發(fā)生變化時,這些對象的狀態(tài)要重要的分析和準(zhǔn)確的貫徹落實。
狀態(tài)圖描述的狀態(tài)是非常重要的。對象的狀況,當(dāng)發(fā)生特定事件時,可以被確定為狀態(tài)。
繪制狀態(tài)圖之前,我們必須明確以下幾點:
識別對象,以進(jìn)行分析。
識別狀態(tài)。
識別的事件。
一個狀態(tài)圖(Statechart Diagram)本質(zhì)上就是一個狀態(tài)機,或者是狀態(tài)機的特殊情況,它基本上是一個狀態(tài)機中元素的一個投影,這也就意味著狀態(tài)圖包括狀態(tài)機的所有特征。
狀態(tài)圖描述了一個實體基于事件反映的動態(tài)行為,顯示了該實體是如何根據(jù)當(dāng)前所處的狀態(tài)對不同的事件作出反應(yīng)的。
在UML中,狀態(tài)圖由表示狀態(tài)的節(jié)點和表示狀態(tài)之間轉(zhuǎn)換的帶箭頭的直線組成。狀態(tài)的轉(zhuǎn)換由事件觸發(fā),狀態(tài)和狀態(tài)之間由轉(zhuǎn)換箭頭連接。每一個狀態(tài)圖都有一個初始狀態(tài)(實心圓),用來表示狀態(tài)機的開始。還有一個中止?fàn)顟B(tài)(半實心圓),用來表示狀態(tài)機的終止。狀態(tài)圖主要由元素狀態(tài)、轉(zhuǎn)換、初始狀態(tài)、中止?fàn)顟B(tài)和判定等組成,一個簡單的狀態(tài)圖如下:
1.狀態(tài):狀態(tài)用于對實體在其生命周期中的各種狀況進(jìn)行建模,一個實體總是在有限的一段時間內(nèi)保持一個狀態(tài)。狀態(tài)由一個帶圓角的矩形表示,狀態(tài)的描繪素應(yīng)該包括名稱、入口和出口動作、內(nèi)部轉(zhuǎn)換和嵌套狀態(tài)。如下圖,為一個簡單狀態(tài):
2.轉(zhuǎn)換:在UML的狀態(tài)建模機制中,轉(zhuǎn)換用帶箭頭的直線表示,一端連接源狀態(tài),箭頭指向目標(biāo)狀態(tài)。轉(zhuǎn)換還可以標(biāo)注與此轉(zhuǎn)換相關(guān)的選項,如事件、監(jiān)護(hù)條件和動作等,如下圖所示。注意:如果轉(zhuǎn)換上沒有標(biāo)注觸發(fā)轉(zhuǎn)換的事件,則表示此轉(zhuǎn)換自動進(jìn)行。
在狀態(tài)轉(zhuǎn)換機制中需要注意的五個概念如下:
3.初始狀態(tài):每個狀態(tài)圖都應(yīng)該有一個初始狀態(tài),它代表狀態(tài)圖的起始位置。初始狀態(tài)是一個偽狀態(tài)(一個和普通狀態(tài)有連接的假狀態(tài)),對象不可能保持在初始狀態(tài),必須要有一個輸出的無觸發(fā)轉(zhuǎn)換(沒有事件觸發(fā)器的轉(zhuǎn)換)。通常初始狀態(tài)上的轉(zhuǎn)換是無監(jiān)護(hù)條件的,并且初始狀態(tài)只能作為轉(zhuǎn)換的源,而不能作為轉(zhuǎn)換的目標(biāo)。在UML中,一個狀態(tài)圖只能有一個初始狀態(tài),用一個實心圓表示。
4.終止?fàn)顟B(tài):終止?fàn)顟B(tài)是一個狀態(tài)圖的終點,一個狀態(tài)圖可以擁有一個或者多個終止?fàn)顟B(tài)。對象可以保持在終止?fàn)顟B(tài),但是終止?fàn)顟B(tài)不可能有任何形式的和觸發(fā)轉(zhuǎn)換,它的目的就是為了激發(fā)封裝狀態(tài)上的轉(zhuǎn)換過程的結(jié)束。因此,終止?fàn)顟B(tài)只能作為轉(zhuǎn)換的目標(biāo)而不能作為轉(zhuǎn)換的源,在UML中,終止?fàn)顟B(tài)用一個含有實心圓的空心圓表示。
5.判定:活動圖和狀態(tài)圖中都有需要根據(jù)給定條件進(jìn)行判斷,然后根據(jù)不同的判斷結(jié)果進(jìn)行不同轉(zhuǎn)換的情況。實際就是工作流在此處按監(jiān)護(hù)條件的取值發(fā)生分支,在UML中,判定用空心菱形表示。
狀態(tài)圖的作用主要體現(xiàn)在以下幾個方面。
總之一個簡潔完整的狀態(tài)圖可以幫助一個設(shè)計者不遺漏任何事情,最大程度地避免程序中錯誤的發(fā)生。
更多建議: