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

UML狀態圖和活動圖

      統一建模語言UML(Unified Modeling Language)是非專利的第三代建模和規約語言。UML是一種開放的方法,用於說明、視覺化、構建和編寫一個正在開發的、面向物件的、軟體密集系統的製品的開放方法。UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟體架構層次已經被驗證有效。

      UML定義了5類,10種模型圖:

1.用例圖:從使用者角度描述系統功能,並指各功能的操作者。 2.靜態圖:包括類圖,包圖,物件圖。    類圖:描述系統中類的靜態結構    包圖:是包和類組成的,表示包與包之間的關係,包圖描述系統的分層結構    物件圖:是類圖的例項 3.行為圖:描述系統動態模型和物件組成的交換關係。包括狀態圖和活動圖    活動圖:描述了業務實現用例的工作流程    狀態圖:是描述狀態到狀態控制流,常用於動態特性建模 4.互動圖:描述物件之間的互動關係    順序圖:物件之間的動態合作關係,強調物件傳送訊息的順序,同時顯示物件之間的互動    合作圖:描述物件之間的協助關係 5.實現圖:    配置圖:定義系統中軟硬體的物理體系結構

      UML的目標是以面向物件圖的方式來描述任何型別的系統,具有很寬的應用領域。其中最常用的是建立軟體系統的模型,但它同樣可以用於描述非軟體領域的系統,如機械系統、企業機構或業務過程,以及處理複雜資料的資訊系統、具有實時要求的工業系統或工業過程等。總之,UML是一個通用的標準建模語言,可以對任何具有靜態結構和動態行為的系統進行建模。

      此外,UML適用於系統開發過程中從需求規格描述到系統完成後測試的不同階段。在需求分析階段,可以用用例來捕獲使用者需求。通過用例建模,描述對系統感興趣的外部角色及其對系統(用例)的功能要求。分析階段主要關心問題域中的主要概念(如抽象、類和物件等)和機制,需要識別這些類以及它們相互間的關係,並用UML類圖來描述。為實現用例,類之間需要協作,這可以用UML動態模型來描述。在分析階段,只對問題域的物件(現實世界的概念)建模,而不考慮定義軟體系統中技術細節的類(如處理使用者介面、資料庫、通訊和並行性等問題的類)。這些技術細節將在設計階段引入,因此設計階段為構造階段提供更詳細的規格說明。

      程式設計(構造)是一個獨立的階段,其任務是用面向物件程式語言將來自設計階段的類轉換成實際的程式碼。在用UML建立分析和設計模型時,應儘量避免考慮把模型轉換成某種特定的程式語言。因為在早期階段,模型僅僅是理解和分析系統結構的工具,過早考慮編碼問題十分不利於建立簡單正確的模型。

      UML模型還可作為測試階段的依據。系統通常需要經過單元測試、整合測試、系統測試和驗收測試。不同的測試小組使用不同的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.活動圖與狀態圖的區別:①描述物件不同

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

②使用場合不同

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

四.UML畫圖專業工具IBM.Rational.Rose.Enterprise

轉載需註明轉載字樣,標註原作者和原博文地址。