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): 
     用來描述一個特定的對象全部可能的狀態,以及因爲各類事件的發生而引發的狀態之間的轉移和變化。
並非全部的類都須要畫狀態圖,有明確意義的狀態,在不一樣狀態下行爲有所不一樣的類才須要畫狀態圖。以下,
一個機器的狀態圖

技術分享

 

 

再如,CD Player的狀態圖

技術分享

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

技術分享

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

ntry/turnOn:當轉入該狀態時,作開燈動做。
do/blinkFivetimes:當處於該狀態時,燈閃爍5次。do活動是隻在狀態內出現的活動,不能附加到轉換上。
event poweroff/powerSupplySelf:當電源關閉事件發生時,用自備電源。
exit/turnOff:當轉出該狀態時,作關燈動做。
event selfTest/defer:當selfTest事件發生時,對象將延遲響應,到別的狀態中再處理,用defer這個特定動做表示延遲。

2.狀態圖的要素


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

3.狀態的類型

①按狀態過程分:

技術分享

②含有子狀態的狀態被稱爲組合或嵌套狀態

技術分享

組合狀態可使用「與」關係分解爲併發子狀態,或者經過「或」關係分解爲互相排斥的順序子狀態。兩種表示方法:
順序子狀態
若是一個組成狀態的子狀態對應的對象在其生命期內的任什麼時候刻都只能處於一個子狀態,即多個子狀態之間是互斥的,不能同時存在,這種子狀態稱爲順序子狀態。

技術分享
併發子狀態
有時組合狀態有兩個或者多個併發的子狀態機,此時稱組成狀態的子狀態爲併發子狀態。

技術分享

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

技術分享淺(shallow)歷史狀態, 只記住最外層組合狀態的歷史。


技術分享深(deep)歷史狀態, 能夠記住任意深度的組合狀態的歷史。

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

技術分享

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

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

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

技術分享

②轉換的類型

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

技術分享
外部轉移
自轉移

技術分享

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


四類主要事件:
?信號事件
?調用事件
?變化事件
?時間事件

①信號signer事件
對象之間經過發送信號和接收信號實現通訊。信號是一種異步機制。在計算機中,鼠標和鍵盤的操做均屬於此類事件。對於一個信號而言,對象通常都有相應的事件處理器,如onMouseClick()等。

②調用call事件
表示一個操做的調度。一個對象請求調用另外一個對象的操做
信號是一個異步事件,而調用事件通常是同步的。也就是說,當對象調用另外一對象的操做時,控制就從發送者傳送到接收者,該事件觸發轉換,完成操做後,接收者轉換到一個新的狀態,控制返還給發送者。

技術分享

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

技術分享

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

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

技術分享

6.狀態圖建模技術

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

二.活動圖

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

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

活動圖示例:

技術分享

2.活動圖的組成元素:


?活動(Activity)
?動做流(Action Flow)
?分支(Branch)與合併(Merge)
?分叉(Fork)和匯合(Join)
?泳道(Swimlane)
?對象流(Object Flow)

3.活動

活動(activity)表示的是某流程中的任務的執行,它能夠表示某算法過程當中語句的執行。活動在活動圖中表現爲一個由一系列動做組成的非原子的執行過程。


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

①動做狀態

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

技術分享

②活動狀態

活動狀態是可分解的,不是原子的,其工做的完成須要必定的時間。
可把動做狀態看做活動狀態的特例。 
活動狀態的表示圖標也是平滑的圓角矩形,並能夠在圖標中給出入口動做和出口動做等信息。

技術分享

4.動做流

全部動做狀態之間的轉換流稱之爲動做流。 
活動圖的轉換不須要特定事件的激發,一個動做狀態執行完後自動轉換到另一個狀態。
活動圖的轉換用帶箭頭的直線表示。
可用條件限制轉換。

技術分享

5.分支與合併

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

技術分享

6.分叉與匯合

分叉用於將動做流分爲兩個或者多個併發運行的分支,而匯合則用於同步這些併發分支,以達到共同完成一項事務的目的。
分叉能夠用來描述併發線程。
匯合表明兩個或多個併發控制流同步發生,當全部的控制流都達到匯合點後,控制才能繼續往下進行。

技術分享

7.泳道

泳道將活動圖中的活動化分爲若干組,並把每一組指定給負責這組活動的業務組織,一般爲對象。
泳道區分了負責活動的對象,明確地表示了哪些活動是由哪些對象進行的。
每一個活動只能明確地屬於一個泳道。
泳道用垂直實線繪出,垂直線分隔的區域就是泳道。在泳道上方能夠給出泳道的名字或對象(對象類)的名字,該對象(對象類)負責泳道內的所有活動。
泳道沒有順序,不一樣泳道中的活動既能夠順序進行也能夠併發進行,動做流和對象流容許穿越分隔線。

技術分享

8.活動的分解

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

技術分享

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

技術分享

9.活動圖的用途

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

①對系統工做流的建模

技術分享
②對工程組織過程建模

技術分享
③對算法流程建模

技術分享

10.活動圖建模技術


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

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

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

2.活動圖與狀態圖的區別:
①描述對象不一樣


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


②使用場合不一樣


       狀態圖:描述對象在其生命期中的行爲狀態變化;
       活動圖:描述過程的流程變化。

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

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

相關文章
相關標籤/搜索