在uml中視圖主要分為兩類,一類主要描述結構性特征,使用靜態視圖來表示,一類描述行為型特征,使用動態視圖來表示。
靜態視圖
靜態視圖主要有三種,就是用來表達靜態事物的,描述事物的靜態結構,而不描述動態行為,將要介紹的包括用例圖,類圖和包圖。
1、用例圖
用例圖采用參與者和用例作為基本元素,以不同的視角展現系統的功能性需求,用例視圖是了解系統的第一個關口。前提條件是參與者和用例已經獲取了。但是常見的是,在一邊繪制用例圖一邊修改參與者和用例。
分類
一、業務用例視圖:使用業務主角和業務用例展現建模的結果,業務用例視圖展示了業務系統的功能性需求。比如一個借圖書的例子,從兩個視覺展示:業務用例實現視圖
業務用例實現視圖是展示業務用例有哪幾種實現方式的途徑,比如還是借閱圖書的業務用例,那么可以列出有3種用例。這時候我們使用業務對象和業務過程來實現這兩個實現的途徑,會發現有很多重疊和復用的對象,這些信息就是概念用例視圖的來源了。
概念用例視圖
概念用例視圖是用于展示從業務用例中經過分析分解出來的關鍵概念用例,并表示概念用例和業務用例之間的關系,一般來說有拓展、包含、精化的關系(可以看我上一篇,了解用例之間的關系)。
還是以我們借閱圖書業務的概念用例視圖為例,它表達的含義是借閱圖書業務必須經過檢查借閱證、接觸圖書、歸還圖書這三個關鍵業務單元,同時可能還需要繳納費用。系統用例視圖
這個是展示系統范圍的,對業務用例分析后得到的系統用例展現出來,可以表達從系統需求向業務需求的映射,保證過程的可追朔性。
它表達的含義主要是計算機系統將開發視圖列出的系統用例,但是手工的不能列入系統范圍。2、類圖
在UML中解決面向對象困難的方法源于面向對象方法中對于類的理解的三個層次的觀點: 概念層、說明層、實現層。在UML中,從開始的需求到最終的設計類,類圖也是圍繞這三點進行建模。
使用類圖建模是從概念層到說明層,再到實現層隨著抽象層次逐步降低而細化的過程。
概念層類圖
通常這個圖以領域進行建模,也就是業務實體來表達,類名稱通常會是問題領域中的實際事物的名稱。比如我們網上購物的實體圖,會分為幾個: 商品、訂單、支付卡、賬戶等構成,這幾個交互能完成網上購物的業務目標。說明層類圖
這個層次的類圖考察類的接口而不是實現,類圖中表達的類和類的關系應當是對問題領域在接口層次抽象的描述。我們只關心這些類,通過什么接口進行交互,然后完成了業務目標。
這個階段,類描述還非常粗略,是以分析類和分析模型來表示的,我們可以參考看下還是網上購物的說明層類圖,這視圖從計算機角度表達了,網上購物這個業務目標由哪些類來完成。實現層
實現層處在設計階段,這階段的類圖已經相當于偽代碼了,甚至使用工具可以直接生成可執行的代碼了。
3. 包圖
包圖一般用來展示高層次的概念。包也幾乎可以用在任何階段。
動態視圖(活動圖、狀態圖、協作圖)
動態視圖就是描述事物動態行為的,他不能獨立存在,必須指定一個靜態視圖或UML元素,說明在靜態視圖規定的事物結構下他們的行為。
4. 活動圖
活動圖是描述為了完成某一個目標需要做的活動以及這些活動的執行順序。UML中有兩個層面: 一種用于描述用例場景,一種用于描述對象交互。活動圖實際上描述的是業務流程。
用例活動圖
用例活動圖是最常見的。用例表達了參與者的一個目標,用例場景則描述了如何來達到這個目標,活動圖用來描述用例場景,也就是通常說的業務流程。
業務流程一般包括一個基本業務流程和多個備選業務流程,而業務流程則通過多個活動按照一定的條件和順序來推進,活動可以是手動執行的任務,也可以是自動執行的任務,每個活動完成一個工作單元。
我們來對幾個活動圖中的關鍵詞進行討論:
- 起始點
起始點標記業務流程的開始,一個活動圖或者說一個業務流程有且僅有一個起始點。
- 活動
活動是業務流程的一個執行單元,在UML中,活動被賦予了四個特定的事件。entry指進入活動時要執行的動作(或類方法),do指活動執行過程中要進行的動作。event事件指活動在執行中接收到的某個事件時執行的動作。exit指活動在退出時要執行的動作。
3.判斷
判斷根據某個條件進行決策,執行不同的流程(分支)。
- 同步
同步分為同步起始和同步匯合。同步起始表示從它開始多個支流并行執行,同步匯合表示多個支流同時到達后再執行后續動作。 -
結束點
組合活動可以用嵌套的活動來表示,不過比較復雜,不建議使用。
表示業務流程的終止。一個活動圖可以有一個或多個結束點。
6.基本流
表示最主要的、最頻繁使用的默認業務分支。
7.支流
表示不經常使用的,由某個條件觸發的,非默認的業務流程分支。
8.異常流
表示不正常的、不是業務目標期待的,容錯性的,發生意外情況的業務主流分支。
對象活動圖
用來表示對象的交互,比如查詢商品的對象交互圖。,使用這個來查詢對象的交互沒有那么清晰,比較活動圖主要是描述業務流程。
在活動圖中,我們可以清晰的看見執行的順序,但是不清楚誰在執行這些活動。因此就涉及到了泳道。
泳道
泳道,就像一個游泳運動員只能在一個泳道里進行比賽一樣,一個對象也只能在一個業務流程中擔任一個職責。泳道代表了一個特定的類、人、部門、層次等對象的職責區,這些對象在業務流程中負責執行的活動集合構成了他們的職責。
我們可以看下上面的圖加入泳道后的樣子。泳道最主要的用途是在分析用例場景時用來獲取角色職責。
活動圖的主要應用
活動圖主要應用于業務場景建模和用例場景建模:
業務場景建模: 在實際中,客戶的業務通常以業務流程的形式存在,從單個客戶的代表處得到的需求不足以說明業務的全貌。這時候,我們經常以業務主角作為泳道,以從業務主角處獲取的業務用例作為活動來編排活動圖。這種活動圖對我們獲取正確的業務用例和檢查已獲得的業務用例有著很好的幫助。
業務建模只是一種手段,在最終模型中可能不包括它,但在發現和定義業務初期能起很大的作用。
用例場景建模:在用例場景建模中,獲得業務目標后,得到了參與者的業務目標,我們通過用例場景來說明如何達到業務目標。我們經常以業務主角和業務工人作為泳道,以工作單元為活動來編排活動圖來描述用例場景,這種活動圖對我們獲得概念用例、角色和業務對象,建立領域模型有很好的幫助。
5. 活動圖
狀態圖用于對模型元素的動態行為進行建模,我們使用狀態圖來說明業務角色或業務實體可能存在的狀態---包括導致狀態轉換的事件和狀態轉換引起的操作。使用狀態圖來描述業務實體對象、分析類對象和設計類對象。以下是圖書業務實體的狀態圖。
圖中包含了一些關鍵元素:
1.初始狀態: 狀態圖的起始位置,不需要觸發。
-
狀態
參考活動圖的活動概念。
- 復合狀態: 具有子狀態的狀態稱為復合狀態,同樣包含一個初始狀態和終止狀態。
4.轉移: 指一個狀態因為滿足指定事件和條件,轉成另一種狀態。
5.事件: 特定的行為或動作。
6終止狀態: 對象的生命周期結束或狀態執行結束。
狀態圖通常只描述單個對象的行為,如果要描述對象間的交互,最好采用時序圖或協作圖。
6.時序圖
時序圖用于描述按時間排序的對象之間的交互模式。在時序圖中包含對象和主角實例以及他們如何交互的消息。時序圖描述了參與對象中所發生的事件,以及這些對象如何通過相互發送消息進行通信,可以為用例事件流的不同形式來制作時序圖。
我們在類圖中把類分為三個階段或者說層次: 概念層、說明層、設計層,分別對應業務建模階段、概念建模階段和設計建模階段,起始我們也可以根據這三個層次分別對業務實體對象、分析類對象和設計類對象繪制時序圖。這三個層次分別為業務模型時序圖、概念模型時序圖、設計模型時序圖。
業務模型時序圖
業務模型時序圖用于為領域模型中的業務實體交互建校,其目標是實現業務用例。在繪制業務實體時序圖之前,你應當已經繪制了業務用例實現過程的活動圖。
下面對使用到的一些UML元素做解釋:
1.對象:表示參與交互的對象,一個對象都帶有一條生命周期線,對象被激活(創建或者被引用時,生命周期線上會出現一個長條(會話),表示對象的存在。
2.生命周期線:生命周期線表示對象的存在,當對象被激活(創建或者被引用)時,生命周期線上出現會話,表示對象參與了這個會話。
3.消息:消息由一個對象的生命周期線指向另一個對象的生命周期線。
如果指向空白的生命周期線,將創建一個新的會話。
消息有許多不同的類型:
簡單消息,適用于大多數情況,表示一個交互。
返回消息,為原消息的返回體,而非新的消息,一般來說不需要為每個原消息都返回消息,一個是默認都有返回,另一方面返回太多會導致圖變得更復雜。
同步消息表示發出消息的對象將停止后續動作一直等到接收方消息響應。會阻塞,最為常用。
4.會話: 表示一次交互,在會話過程中所有對象共享一個上下文環境。
5.銷毀: 銷毀繪制在生命周期上,表示對象的終止。
最后在繪制業務模型時序圖時需要注意以下幾點:
1.時序圖以達到業務目標為準則
2.該階段盡量采用業務術語,因為處于業務階段。
概念模型時序圖
這個時序圖會采用分析類來繪制,目標同樣是實現業務用例的。依據業務模型場景來繪制,將業務模型場景用分析類重新繪制一遍,即保留業務需求又得到計算機的基本理念。繪制后如下圖所示:
設計模型時序圖
這個是使用設計類作為對象來繪制了。目標是實現概念模型中的某個事件流,一般以一個完整的交互為單位,消息會細致到方法級別。
但是實際工作中很少用到,工作量太大了。
時序圖和協作圖是可以互相轉換的,與協作圖不同的是,時序圖強調事件的發生順序,更方便于闡述事件流的過程,但是時序圖難以表達對象之間的關系。
7.協作圖
協作圖描述了對象間交互的一種模式,它通過對象之間的連接和他們的相互發送消息來顯示參與交互的對象。通過說明對象間如何通過交互發送消息來實現通信,可以為用例事件流的每一個變化形式制作一個協作圖。
協作圖的建模結果用于獲取對象的職責和接口,協作圖展示了對象之間的關系,使得更適用于對對象結構的理解,而時序圖更適合對調用順序的理解。本質上,兩者可以互換。
如果更在意對象間的結構關系可以使用協作圖,如果是執行順序可以使用時序圖。
同樣可以根據概念層、說明層和實現層對業務實體對象、分析類對象和設計類對象繪制協作圖。
同時在ROSE中提供了把時序圖直接轉化為協作圖的工具。在時序圖中,直接按F5建就可以直接切換完成。這時候再調整下圖元位置,就可以了。繪制一個時序圖,就可以同時得到協作圖。
業務模型協作圖
采用業務實體來繪制,目標也是實現業務用例場景。以下是一個案例:
分析下包含的元素:
對象: 表示參與協作的對象,對象可以指定他的類。
對象關聯: 連接兩個對象,表示兩者之間相互關聯。
Rose中定義了對象關聯的幾種可見屬性:
域可見,表示關聯的對象在交互域一直可見。
參數可見,表示關聯的對象僅在交互過程可見,他們是通過參數傳遞產生關聯。
消息: 與時序圖的消息的定義一樣。
消息序號: 表示消息傳遞的順序。
概念模型協作圖,目標是實現概念模型中的某個事件流,一般以一個完整交互為單位,消息細致到方法級別。
總結
靜態視圖表示事物的結構性觀點,而動態視圖表示事物的行為性觀點,一個好的建模,兩者缺一不可,互補。熟能生巧,只有多使用,才能多理解建模的真正本質和使用。