UML之状态图
UML之狀態(tài)圖
? ? ? ? ? 狀態(tài)圖——Statechart Diagram
? ? ? ? ??描述一個實(shí)體基于事件反應(yīng)的動態(tài)行為,顯示了該實(shí)體如何根據(jù)當(dāng)前所處的狀態(tài)對不同的事件做出反應(yīng)的。
? ? ? ? ??通常我們創(chuàng)建一個UML狀態(tài)圖是為了以下的研究目的:研究類、角色、子系統(tǒng)、或組件的復(fù)雜行為。
? ? ? ? ??狀態(tài)圖用于顯示狀態(tài)機(jī)(它指定對象所在的狀態(tài)序列)、使對象達(dá)到這些狀態(tài)的事件和條件、以及達(dá)到這些狀態(tài)時所發(fā)生的操作。
? ? ? ? ??狀態(tài)的概念
? ? ? ? ??狀態(tài)是對象執(zhí)行某項(xiàng)活動或等待某個事件時的條件,對象可能會在有限的時間長度內(nèi)保持某一狀態(tài)。
? ? ? ? ??狀態(tài)的特征
? ? ? ? ??名稱:將一個狀態(tài)與其他狀態(tài)區(qū)分開來的文本字符串,狀態(tài)也可能是匿名的,這表示它沒有名稱。
? ? ? ? ??進(jìn)入、退出操作:在進(jìn)入和退出狀態(tài)時所執(zhí)行的操作。
? ? ? ? ??內(nèi)部轉(zhuǎn)移:在不使?fàn)顟B(tài)發(fā)生變更的情況下進(jìn)行的轉(zhuǎn)移。
? ? ? ? ??子狀態(tài):狀態(tài)的嵌套結(jié)構(gòu),包括不相連的(依次處于活動狀態(tài)的)或并行的(同時處于活動狀態(tài)的)子狀態(tài)。
? ? ? ? ??延遲的事件:未在該狀態(tài)中處理但被延遲處理(即列隊(duì)等待由另一個狀態(tài)中的對象來處理)的一系列事件。
? ? ? ? ??轉(zhuǎn)移的概念
? ? ? ? ??轉(zhuǎn)移是兩個狀態(tài)之間的關(guān)系,它表示當(dāng)發(fā)生指定事件并且滿足指定條件時,第一個狀態(tài)中的對象將執(zhí)行某些操作并進(jìn)入第二個狀態(tài)。當(dāng)發(fā)生這種狀態(tài)變更時,即“觸發(fā)”了轉(zhuǎn)移。
? ? ? ? ??在觸發(fā)轉(zhuǎn)移之前,可認(rèn)為對象處于“源”狀態(tài);在觸發(fā)轉(zhuǎn)移之后,可認(rèn)為對象處于“目標(biāo)”狀態(tài)。
? ? ? ? ??轉(zhuǎn)移的特征
? ? ? ? ??源狀態(tài):轉(zhuǎn)移所影響的狀態(tài);如果對象處于源狀態(tài),當(dāng)對象收到轉(zhuǎn)移的觸發(fā)事件并且滿足警戒條件(如果有)時,就可能會觸發(fā)輸出轉(zhuǎn)移。
? ? ? ? ??事件觸發(fā)器:使轉(zhuǎn)移滿足觸發(fā)條件的事件。
? ? ? ? ??當(dāng)處于源狀態(tài)的對象收到該事件時(假設(shè)已滿足其警戒條件),就可能會觸發(fā)轉(zhuǎn)移。
? ? ? ? ??警戒狀態(tài):一種布爾表達(dá)式。
? ? ? ? ??在接收到事件觸發(fā)器而觸發(fā)轉(zhuǎn)移時,將對該表達(dá)式求值;如果該表達(dá)式求值結(jié)果為True,則說明轉(zhuǎn)移符合觸發(fā)條件;如果該表達(dá)式求值結(jié)果為False,則不觸發(fā)轉(zhuǎn)移。如果沒有其他轉(zhuǎn)移可以由同一事件來觸發(fā),該事件就將被丟棄。
? ? ? ? ??操作:可執(zhí)行的、不可分割的計(jì)算過程,該計(jì)算可能直接作用于擁有狀態(tài)機(jī)的對象,也可能間接作用于該對象可見的其他對象。
? ? ? ? ??目標(biāo)狀態(tài):在完成轉(zhuǎn)移后被激活的狀態(tài)。
? ? ? ? ??注意:一個轉(zhuǎn)移可能有多個源狀態(tài),在這種情況下,它將呈現(xiàn)為一個從多個并行狀態(tài)出發(fā)的結(jié)合點(diǎn);一個轉(zhuǎn)移也可能有多個目標(biāo)狀態(tài),在這種情況下,它將呈現(xiàn)為一個到多個并發(fā)狀態(tài)的叉形圖。
?
總結(jié)