全面認識UML狀態(tài)圖
本文和大家重點討論一下UML狀態(tài)圖的概念,UML狀態(tài)圖(StatechartDiagram)主要用于描述引起狀態(tài)轉(zhuǎn)移的事件(Event),以及因狀態(tài)轉(zhuǎn)移而伴隨的動作(Action)。
詳解UML建模中的UML狀態(tài)圖
一、UML狀態(tài)圖簡介(Briefintroduction)
UML狀態(tài)圖(StatechartDiagram)主要用于描述一個對象在其生存期間的動態(tài)行為,表現(xiàn)為一個對象所經(jīng)歷的狀態(tài)序列,引起狀態(tài)轉(zhuǎn)移的事件(Event),以及因狀態(tài)轉(zhuǎn)移而伴隨的動作(Action)。一般可以用狀態(tài)機對一個對象的生命周期建模,UML狀態(tài)圖用于顯示狀態(tài)機(StateMachineDiagram),重點在與描述UML狀態(tài)圖的控制流。如下圖例子,狀態(tài)機描述了門對象的生存期間的狀態(tài)序列,引起轉(zhuǎn)移的事件,以及因狀態(tài)轉(zhuǎn)移而伴隨的動作(Action)。
狀態(tài)有Opened、Closed、Locked。
事件有Open、Close、Lock和Unlock。
注意:
1、并不是所有的事件都會引起狀態(tài)的轉(zhuǎn)移,比如當(dāng)門是處于【Opened】狀態(tài),不能進行【Lock】事件。
2、轉(zhuǎn)移(Transition)有警備條件(guardcondition),比如只有doorWay->isEmpty條件滿足時,才會響應(yīng)事件。
二、UML狀態(tài)圖元素(StateDiagramElements)
1、狀態(tài)(States)
指在對象的生命周期中的某個條件或者狀況,在此期間對象將滿足某些條件、執(zhí)行某些活動活活等待某些事件。所有對象都有狀態(tài),狀態(tài)是對象執(zhí)行了一系列活動的結(jié)果,當(dāng)某個事件發(fā)生后,對象的狀態(tài)將發(fā)生變化。
狀態(tài)用圓角矩形表示
初態(tài)和終態(tài)(InitialandFinalStates)初態(tài)用實心圓點表示,終態(tài)用圓形內(nèi)嵌圓點表示。
2、轉(zhuǎn)移(Transitions)
轉(zhuǎn)移(Transitions)是兩個狀態(tài)之間的一種關(guān)系,表示對象將在源狀態(tài)(SourceState)中執(zhí)行一定的動作,并在某個特定事件發(fā)生而且某個特定的警界條件滿足時進入目標(biāo)狀態(tài)(TargetState)
事件標(biāo)記(Trigger):是轉(zhuǎn)移的誘因,可以是一個信號,事件、條件變化(achangeinsomecondition)和時間表達式。
警界條件(GuardCondition):當(dāng)警界條件滿足時,事件才會引發(fā)轉(zhuǎn)移(Transition)。
結(jié)果(Effect):對象狀態(tài)轉(zhuǎn)移后的結(jié)果。
3、動作(StateActions)
動作(Actions)是一個可執(zhí)行的原子操作,也就是說動作是不可中斷的,其執(zhí)行時間是可忽略不計的。
在上例中,對象狀態(tài)轉(zhuǎn)移后的結(jié)果顯示在轉(zhuǎn)移線上,如果目標(biāo)狀態(tài)有許多轉(zhuǎn)移,而且每個轉(zhuǎn)移有相同的結(jié)果,這時把轉(zhuǎn)移后的結(jié)果(Effect)展示在目標(biāo)狀態(tài)中(TargetState)更好一些,可以定義進入動作(EntryAction)和退出動作(ExitAction),如下圖
4、自身轉(zhuǎn)移(Self-Transitions)
狀態(tài)可以有返回自身狀態(tài)的轉(zhuǎn)移,稱之為自身轉(zhuǎn)移(Self-Transitions)
2S后,Pollinput事件執(zhí)行,轉(zhuǎn)移到自己狀態(tài)【W(wǎng)aiting】
5、組合狀態(tài)(CompoundStates)
嵌套在另外一個狀態(tài)中的狀態(tài)稱之為子狀態(tài)(sub-state),一個含有子狀態(tài)的狀態(tài)被稱作組合狀態(tài)(CompoundStates).如下圖,【CheckPIN】是組合狀態(tài),【EnterPIN】是子狀態(tài)。
6、進入節(jié)點(EntryPoint)
由于一些原因并不會執(zhí)行初始化(initialization),而是直接通過一個節(jié)點進入狀態(tài)【Ready】,則此節(jié)點稱之為進入節(jié)點(EntryPoint)
7、退出節(jié)點(ExitPoint)
8、歷史狀態(tài)(HistoryStates)
歷史狀態(tài)是一個偽狀態(tài)(Pseudostate),其目的是記住從組合狀態(tài)中退出時所處的子狀態(tài),當(dāng)再次進入組合狀態(tài),可直接進入這個子狀態(tài),而不是再次從組合狀態(tài)的初態(tài)開始。
如果是從狀態(tài)【Rinsing】突然停電(PowerCut)退出,,洗衣機停止工作進入狀態(tài)【PowerOff】,當(dāng)電力恢復(fù)時直接進入狀態(tài)【Running】。
9、并發(fā)區(qū)域(ConcurrentRegions)
UML狀態(tài)圖可以分為區(qū)域,而區(qū)域又包括退出或者當(dāng)前執(zhí)行的子狀態(tài)。說明組合狀態(tài)在某一時刻可以同時達到多個子狀態(tài)。如下圖剎車系統(tǒng),同時進入前剎車【ApplyingFrontBrakes】狀態(tài)和后剎車【ApplyingRearBrakes】狀態(tài)。
【編輯推薦】
- UML狀態(tài)圖及其組成元素簡介
- UML部署圖繪制及應(yīng)用說明
- 在回歸測試中UML狀態(tài)圖切片的應(yīng)用
- UML建模風(fēng)格 UML狀態(tài)圖表現(xiàn)形式解析
- UML圖形中UML狀態(tài)圖和組件圖用法實例解析