統一建模語言(Unified Modeling Language,UML)中各種視圖並沒有明顯的概念區別。
在最上一層,視圖被划分為三個視圖域:結構,動態行為,模型管理。
結構主要描述了系統中的結構成員及其相互關系。結構元素包括類,用例,構件和節點。結構元素為研究系統的動態行為奠定了基礎。結構視圖包括靜態視圖,用例視圖和實現視圖。
動態行為描述了系統隨時間變化的行為。行為用從靜態視圖中抽取出來的系統的瞬間值變化來描述。動態行為視圖包括狀態機視圖,活動視圖和交互視圖。
模型管理說明了模型的分層組織結構。包是模型的基本組織單元。特殊的包還包括模型和子系統。模型管理視圖跨越了其他視圖並根據系統的開發和配置組織這些視圖。
UML還有多種具有擴展能力的組件,這些擴展能力有限但很有用。這些組件包括約束,構造型和標記值,適用所有的視圖元素。
UML的視圖表,如下:
主要域 | 視圖 | 圖 | 主要概念 |
結構 | 靜態視圖 | 類圖 | 類、關聯、泛化、依賴關系、實現、接口 |
用例視圖 | 用例圖 | 用例、參與者、關聯、擴展、包括、用例泛化 | |
實現視圖 | 構件圖 | 構件、接口、依賴關系、實現 | |
部署視圖 | 部署圖 | 節點、構件、依賴關系、位置 | |
動態 | 狀態機視圖 | 狀態機圖 | 狀態、事件、轉換、動作 |
活動視圖 | 活動圖 | 狀態、活動、完成轉換、分叉、結合 | |
交互圖 | 順序圖 | 交互、對象、消息、激活 | |
協作圖 | 協作、交互、協作角色、消息 | ||
模型管理 | 模型管理視圖 | 類圖 | 包、子系統、模型 |
可擴展性 | 所有 | 所有 | 約束、構造型、標記值 |
一、靜態視圖
它對應用領域中的概念和系統實現有關的內部概念建模。它因為不描述與時間有關的系統行為被稱作靜態視圖。靜態視圖主要由類以及類之間的相互關系組成,這些關系包括:關聯,泛化和各種依賴關系,如何使用和實現關系。類是應用領域或應用解決方案中概念的描述。類圖是以類為中心組織的,類圖中的其他元素或屬於某個類或與類相關聯。靜態視圖用類圖來實現,正因為他以類為中心,所以稱其為類圖。下面是個類圖的例子:
私下里覺得這張圖很復雜,尤其是不知道這張圖是用來干什么的時候!
二:用例視圖
用例視圖被稱為參與者的外部用戶所能觀察到的系統功能模型圖。用例是系統中的一個功能單元,可以描述為參與者與系統之間的一次交互。用例模型的用途是列出系統的用例和參與者,並顯示了哪個參與者參與了哪個用例的執行。下面是個用例視圖的例子:
個人觀點,這個圖很傻,不過還是很有意思的,最起碼能夠顯示正常開發中各個參與者的活動情況。
三:交互視圖
交互視圖描述了執行系統功能的各個角色之間相互傳遞信息的順序關系。交互視圖顯示跨越了多個對象的系統控制流程。交互視圖可用兩種視圖來表示:順序圖和協作圖,它們各有不同的側重點。
1:順序圖
順序圖描述的是一個事務的流程,這個流程和面向過程編程中的順序結構是一樣的,從上到下。下面是一個圖例:
這個圖讓我想起很久很久以前沒有ajax時候的網絡服務,就是一直用同步的方式操作,不堪回首!
2:協作圖
協作圖是對在一次交互中有意義的對象和對象間的鏈建模,對象和關系只有在交互的語境中才有意義。協作圖用幾何排列來表示交互作用中的各角色。附在類元角色上的箭頭表示消息,消息的發生順序用編號數字表示。下面是一個協作圖圖例:
這個圖有個特點,與順序圖不一樣,它展示了參數,方法名稱,不是基於時間序列,是基於邏輯序列。
四:狀態機視圖
狀態機視圖是一個類對象可能經歷的的所有歷程的模型圖。狀態機由對象的各個狀態和連接這些狀態的轉換組成。每個狀態對一個對象在其生命周期中滿足某種條件的一段時間段建模。當一個事件發生時觸發狀態的轉換,從一個狀態轉化為另一個狀態。下面是一個圖例:
這個狀態機我認為最好參考一下設計模式里面的狀態模式,狀態模式的實現就是這個狀態圖的代碼描述。
五:活動視圖
活動視圖是狀態機的一種變體,用來描述執行算法的工作流程中涉及到的活動。活動狀態代表了一個活動:一個工作流執行步驟或一個操作的執行。活動圖描述了一組順序的或並發的活動。活動視圖用活動來體現。下面是一個圖例:
這個與狀態機還是有很大的變化的,它是一個線性的執行步驟,狀態機是一種環形觸發的情況。狀態機是每種情況很復雜,有一定觸發狀態存在於其中。活動圖可能沒有這些,但是符合現實的工作流程。
六:物理視圖
物理視圖對應自身的結構實現建模,圖中的類將會映射稱為物理結構中的節點。物理視圖分為實現視圖和部署視圖。實現視圖為系統中的構件建模,以及構件之間的依賴關系,通過對依賴關系修改評估對系統可能帶來的影響。下面是一個實現視圖的圖例:
這個圖很有意思吧,剛開始我還以為是電路板之類的圖呢。接下來是一個部署圖,仔細找找區別:
六:模型管理視圖
它是對模型自身組織的建模。模型是從某一觀點以一定精確度對系統所進行的完整性描述。下面是一個圖例:
這樣的系統圖看着非常的不錯,很容易理解和接受。
七:擴展組件
組件作為一種提供特定功能的模型存在,包含約束,構造型和標記值。約束是用某種形式化的語言或者自然語言表達的語義關系的文字說明。構造型是指建模者設計的新的模型元素,但是它要在已有的UML模型基礎上。標記值是附加到任何模型元素上的命名的信息塊。下面是例圖:
八:各種視圖之間的關系
九:個人學習經驗分享
有些東西是很簡單的,關鍵是沒有了去學習的動力,沒有了自己前進的方向。我一直覺得能夠只需要背誦下來的東西是最簡單,需要理解並推陳出新的是最難的。每一次推陳出新都是自己能力進步的體現,要不進步也太平凡了,不值得自己去歡呼雀躍了。學習,哪怕是僅僅只是源於對一句話的感悟,也是進步。