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

附:IBM.Rational.Rose.Enterprise.v7.0破解版下載

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

原文地址:https://www.cnblogs.com/jingwhale/p/4230235.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM