1. 程式人生 > >UML活動圖、狀態圖

UML活動圖、狀態圖

 本文主要介紹狀態圖和活動圖。

一.狀態圖


      狀態(state)是指在物件的生命期中的某個條件或狀況,在此期間物件將滿足某些條件、執行某些活動或等待某些事件。所有物件都具有狀態,狀態是物件執行了一系列活動的結果,當某個事件發生後,物件的狀態發生變化。

     狀態圖(statechart diagram): 
     用來描述一個特定的物件所有可能的狀態,以及由於各種事件的發生而引起的狀態之間的轉移和變化。
並不是所有的類都需要畫狀態圖,有明確意義的狀態,在不同狀態下行為有所不同的類才需要畫狀態圖。如下,
一個機器的狀態圖

image

再如,CD Player的狀態圖

image

1.狀態


一個狀態有以下幾個部分:狀態名(name)、進入/退出動作(entry/exit action)、內部轉移(internal transttion)、子狀態(substate)、延遲事件(dferred event)。
狀態可以細分為不同的型別,例如初態、終態、中間狀態、組合狀態、歷史狀態等。一個狀態圖只能有一個初態,但終態可以有一個或多個,也可以沒有終態。
中間狀態包括兩個區域:名字域和內部轉移域,如圖所示。其中內部轉移域是可選的。

image

橫線上面是名字域,下面是轉換域(可選)。

ntry/turnOn:當轉入該狀態時,做開燈動作。
do/blinkFivetimes:當處於該狀態時,燈閃爍5次。do活動是隻在狀態內出現的活動,不能附加到轉換上。
event poweroff/powerSupplySelf:

當電源關閉事件發生時,用自備電源。
exit/turnOff:當轉出該狀態時,做關燈動作。
event selfTest/defer:當selfTest事件發生時,物件將延遲響應,到別的狀態中再處理,用defer這個特定動作表示延遲。

2.狀態圖的要素


橢圓或圓角矩形:表示物件的一種狀態,橢圓內部填寫狀態名
箭頭:表示從箭頭出發的狀態可以轉換到箭頭指向的狀態
事件:引起狀態轉換的原因。事件名可在箭頭線上方標出
條件:事件名後加方括號,括號內寫狀態轉換條件
實心圓:初始狀態
內部實心的同心圓:最終狀態

3.狀態的型別

①按狀態過程分:

image

②含有子狀態的狀態被稱為組合或巢狀狀態

image

組合狀態可以使用“與”關係分解為併發子狀態,或者通過“或”關係分解為互相排斥的順序子狀態。兩種表示方法:
順序子狀態


如果一個組成狀態的子狀態對應的物件在其生命期內的任何時刻都只能處於一個子狀態,即多個子狀態之間是互斥的,不能同時存在,這種子狀態稱為順序子狀態。

image
併發子狀態
有時組合狀態有兩個或者多個併發的子狀態機,此時稱組成狀態的子狀態為併發子狀態。

image

歷史狀態是偽狀態, 其目的是記住從組合狀態中退出時所處的子狀態, 當再次進入組合狀態時, 可以直接進入這個子狀態, 而不是再從組合狀態的初態開始。

image淺(shallow)歷史狀態, 只記住最外層組合狀態的歷史。


image深(deep)歷史狀態, 可以記住任意深度的組合狀態的歷史。

CD Player,running狀態被打斷到power on狀態,再轉回到running狀態時,希望直接進入歷史狀態

image

4.轉移(Transition)
轉移是兩個狀態間的一種關係,表示物件將在當前狀態中執行動作,並在某個特定事件發生或某個特定的條件滿足時進入後繼狀態。 每個轉移只允許有一個事件觸發,一個事件只允許有一個動作。

①轉移的五要素(注意格式)

格式:事件(引數)[條件]/動作
▪源狀態
▪目標狀態
▪觸發事件
      -如果箭頭上不帶任何事件名,表示是一個自動轉換,當與源狀態相關的活動完成時就會自動觸發。
▪監護條件
▪動作

image

②轉換的型別

內部轉移:不導致狀態改變的轉移,不會執行entry和exit動作

image
外部轉移
自轉移

image

5.事件(Event)
事件是對一個時間和空間上佔有一定位置的有意義的事情的規格說明。事件觸發狀態的轉移。


四類主要事件:
▪訊號事件
▪呼叫事件
▪變化事件
▪時間事件

①訊號signer事件
物件之間通過傳送訊號和接收訊號實現通訊。訊號是一種非同步機制。在計算機中,滑鼠和鍵盤的操作均屬於此類事件。對於一個訊號而言,物件一般都有相應的事件處理器,如onMouseClick()等。

②呼叫call事件
表示一個操作的排程。一個物件請求呼叫另一個物件的操作
訊號是一個非同步事件,而呼叫事件一般是同步的。也就是說,當物件呼叫另一物件的操作時,控制就從傳送者傳送到接收者,該事件觸發轉換,完成操作後,接收者轉換到一個新的狀態,控制返還給傳送者。

image

③變化change事件
用關鍵字When,後面跟布林表示式
When(temperature>120)/alerm()
變化事件的意圖是要頻繁測試表達式,只要表示式由假變為真,事件就會發生。

image

注意: 變化事件與監護條件的區別

④時間(time)事件
時間事件是指在絕對時間或在某個時間間隔內發生的事情所引起的事件。
例如到達某一時間或經過了某一時間段。用關鍵字When 或After表示。

image

6.狀態圖建模技術

建模步驟:
①找出適合用模型描述其行為的類。
②確定物件可能存在的狀態。
③確定引起狀態轉換的事件。
④確定轉換進行時物件執行的相應動作。
⑤對建模的結果進行相應的精化和細化。

二.活動圖

1. 活動圖的概念
       活動圖(activity diagram)是UML的動態檢視之一,用來描述事物或物件的活動變化流程。活動圖可看作狀態圖的特殊形式。特殊性在於活動圖中的一個活動結束後將立即進入下一個活動而不需要事件觸發活動的轉移。

      活動圖用於描述系統的工作流程和併發行為。活動圖被設計用於簡化描述一個過程或操作的工作步驟。例如,可以用活動圖對一個軟體的開發過程建模;還可以對諸如求Fibnacci數列第n個數的數值之類的操作進行建模。

活動圖示例:

image

2.活動圖的組成元素:


▪活動(Activity)
▪動作流(Action Flow)
▪分支(Branch)與合併(Merge)
▪分叉(Fork)和匯合(Join)
▪泳道(Swimlane)
▪物件流(Object Flow)

3.活動

活動(activity)表示的是某流程中的任務的執行,它可以表示某演算法過程中語句的執行。活動在活動圖中表現為一個由一系列動作組成的非原子的執行過程。


動作狀態(Action State)
活動狀態(Activity State)

①動作狀態

動作狀態是指執行原子的、不可中斷的動作,並在此動作完成後通過完成轉換轉向另一個狀態的狀態。 
動作狀態使用平滑的圓角矩形表示,動作狀態所表示的動作寫在圓角矩形內部。

image

②活動狀態

活動狀態是可分解的,不是原子的,其工作的完成需要一定的時間。
可把動作狀態看作活動狀態的特例。 
活動狀態的表示圖示也是平滑的圓角矩形,並可以在圖示中給出入口動作和出口動作等資訊。

image

4.動作流

所有動作狀態之間的轉換流稱之為動作流。 
活動圖的轉換不需要特定事件的激發,一個動作狀態執行完後自動轉換到另外一個狀態。
活動圖的轉換用帶箭頭的直線表示。
可用條件限制轉換。

image

5.分支與合併

分支一般用於表示物件類所具有的條件行為。
條件行為用分支和合並表達。 
一個分支有一個入轉換和兩個帶條件的出轉換,出轉換的條件應當是互斥的。
一個合併有兩個帶條件的入轉換和一個出轉換,合併表示從對應的分支開始的條件行為的結束。

image

6.分叉與匯合

分叉用於將動作流分為兩個或者多個併發執行的分支,而匯合則用於同步這些併發分支,以達到共同完成一項事務的目的。
分叉可以用來描述併發執行緒。
匯合代表兩個或多個併發控制流同步發生,當所有的控制流都達到匯合點後,控制才能繼續往下進行。

image

7.泳道

泳道將活動圖中的活動化分為若干組,並把每一組指定給負責這組活動的業務組織,通常為物件。
泳道區分了負責活動的物件,明確地表示了哪些活動是由哪些物件進行的。
每個活動只能明確地屬於一個泳道。
泳道用垂直實線繪出,垂直線分隔的區域就是泳道。在泳道上方可以給出泳道的名字或物件(物件類)的名字,該物件(物件類)負責泳道內的全部活動。
泳道沒有順序,不同泳道中的活動既可以順序進行也可以併發進行,動作流和物件流允許穿越分隔線。

image

8.活動的分解

一個活動可以分為若干個動作或子活動,這些動作和子活動本身可以組成一個活動圖。
一個不含內嵌活動或動作的活動稱之為簡單活動;一個嵌套了若干活動或動作的活動稱之
為組合活動,組合活動有自己的名字和相應的子活動圖。

image

一個包含子活動的活動和嵌套了子狀態的組合狀態類似,概念上也相對統一。

image

9.活動圖的用途

▪對系統工作流程建模
  工作流:是一個良好定義的動作序列,執行時將產生一個可觀察的值,或者產生一個個體或實體的物件。 
▪對工程組織過程建模
▪對演算法流程建模

①對系統工作流的建模

image
②對工程組織過程建模

image
③對演算法流程建模

image

10.活動圖建模技術


①識別要對其工作流描述的類或物件。
②確定工作流的初始狀態和終止狀態,明確工作流的邊界。
③對動作狀態或活動狀態建模。
④對動作流建模。
⑤對物件流建模。
⑥對建立的模型進行精化和細化

三.活動圖與狀態圖的比較

1.活動圖與狀態圖的相同點
   都是對系統的動態行為建模。

2.活動圖與狀態圖的區別:
①描述物件不同


       狀態圖:描述物件狀態及狀態之間的轉移;
       活動圖:描述從活動到活動的控制流。


②使用場合不同


       狀態圖:描述物件在其生命期中的行為狀態變化;
       活動圖:描述過程的流程變化。