UML——United Modeling Language, 統一模組化語言——是一種面向對象的可視化模組化語言。UML 采用了一組形象化的圖形(如類圖)符号作為模組化語言, 使用這些符号可以形象地描述系統的各個方面。UML 通過建立圖形之間的各種關系(如類與類之間的關系)來描述模型。
UML 中一共有 5類(9種)圖,包括用例圖、靜态圖(類圖、對象圖)、行為圖(狀态圖、活動圖)、互動圖(時序圖、協作圖)、實作圖(元件圖、部署圖)。其中的類圖是最重要的,還有就是用例圖和時序圖也是要求要掌握的。UML
中的關系主要包括 4 種:關聯關系(association)、依賴關系(dependency)、泛化關系(generalization)、實作關系(realization)。
1、用例圖
首先了解一下關于用例圖,用例圖(Use Case Diagram): 也稱為使用者模型圖, 是從軟體需求分析到最終實作的第一步, 它是從使用者的角度來描述系統功能。并指出各功能的執行者。用例圖包含 3 個基本元件:參與者(Actor), 用例(Use Case), 關系。

1.1參與者(Actor): 與系統互動的人或其他系統,即使用該系統的人或事物,在 UML 中參與者用人形圖示表示。
1.2用例(Use Case): 代表系統的某項完整的功能. 在 UML 中使用一個橢圓來表示。
1.3關系: 定義用例之間的關系 ------泛化關系, 包含關系、擴充關系。
1.31泛化關系:是表示同一業務目的(父用例)的不同技術實作(各個子用例). 在 UML 中, 用例泛化用一個三角箭頭從子用例指向父用例. 以下是某購物網站為使用者提供不同的支付方式。一個用例可以包含其他用例具有的行為, 并把它包含的用例行為作為自身行為的一部分。
1.32包含關系:在 UML 中包含關系用虛線箭頭加 “<<include>>”, 箭頭指向被包含的用例。
1.33擴充關系:如果在完成某個功能的時候偶爾會執行另外一個功能, 則用擴充關系表示.在 UML 中擴充關系用虛線箭頭加 “<<extend>>”, 箭頭指向被擴充的用例。
2、類圖
接下來就是關于類圖,類圖是面向對象系統模組化中最常用的圖. 是定義其他圖的基礎。類圖主要是用來顯示系統中的類, 接口以及它們之間的關系,即描述了系統的靜态結構。類圖包含的主要元素有類, 接口和關系。其中關系有關聯關系, 泛化關系, 依賴關系和實作關系。在類圖中也可以包含注釋和限制。
2.1類:是類圖的主要元件, 由 3 部分組成: 類名, 屬性和方法。在 UML 中, 類用矩形來表示, 頂端部分存放類的名稱, 中間部分存放類的屬性, 屬性的類型及值, 底部部分存放類的方法, 方法的參數和傳回類型。在 UML 中可以根據實際情況有選擇的隐藏屬性部分或方法部分或兩者都隐藏。在 UML 中, 共有類型有 “+” 表示, 私有類型用 “–” 表示, 保護類型用 “#” 表示. UML的工具開發商可以使用自己定義的符号表示不同的可見性。
2.2關系
2.21泛化關系:在 UML中用實線空心箭頭(由子類指向父類)圖形來表示類與類, 接口與接口之間的繼承關系. 泛化關系有時也稱為”is a kind of”關系。繼承還分單重繼承和多重繼承。單重繼承是一個子類繼承于一個父類;而多重繼承則是一個子類繼承于多個父類。
2.22實作關系:在 UML 中用虛線空心箭頭(由子類指向父類)圖形來表示類與接口之間的實作關系。
2.23依賴關系:對于兩個相對獨立的系統,當一個系統負責構造另一個系統的執行個體,或者依賴另一個系統的服務時,這兩個系統之間展現為依賴關系。依賴關系用虛線箭頭來表示。
2.24關聯關系:對于兩個相對獨立的系統,當一個系統的執行個體與另一個系統的一些特定執行個體存在固定的對應關系時,這兩個系統之間為關聯關系。關聯關系用實線箭頭來表示。這兩個是很容易混淆的,是以應該注意區分。當一個類處于關聯的某一端時, 該類就在這個關系中扮演一個特定的角色. 具體來說, 角色就是關聯關系中一個類對另一個類所表現的職責. 角色名稱是名詞或名稱短語。關聯關系的多重性是指有多少對象可以參與該關聯,
多重性可以用來表達一個取值範圍, 特定值, 無限定的範圍。
2.241聚合關系:是一種特殊的關聯. 它表示類間的關系是整體與部分的關系. 簡言之: 關聯關系中的一個類描述了一個較大的事物, 它由較小的事物組成。聚合關聯描述了 “has a” 的關系, 即整體對象擁有部分對象。整體和部分之間用空心菱形箭頭的連線連接配接, 箭頭指向整體。
2.242組合關系:是更強形式的聚合,組合關系中, 整件擁有部件的生命周期, 是以整件删除時, 部件一定會跟着删除. 而且, 多個整件不可以同時共享同一個部件。聚合關系中, 整件不會擁有部件的生命周期, 是以整件删除時, 部件不會被删除. 再者, 多個整件可以共享同一個部件。UML 中組成關系用實心的菱形實線表示。
單向關聯:隻在一個方向上可以導航的關聯稱為單向關聯. 用一條單向箭頭的實線表示。
雙向關聯:用一個帶箭頭的方向表示; 在兩個方向上都可以導航的關聯稱為雙向關聯, 用一條沒有箭頭的實線表示。
3、對象圖
對象圖與類圖極為相似,隻是它描述的是一個系統在某個時刻的靜态結構,而類圖描述所有可能的情況。包括對象、連接配接、包。
4、時序圖
下面就是關于時序圖,時序圖又叫做序列圖或順序圖,是用于描述對象之間的傳遞消息的時間順序, 即用例中的行為順序。當執行一個用例時, 時序圖中的每條消息對應了一個類操作或者引起轉換的觸發事件。在 UML 中, 時序圖表示為一個二維的關系圖, 其中, 縱軸是時間軸, 時間延豎線向下延伸. 橫軸代表在協作中各個獨立的對象。當對象存在時, 生命線用一條虛線表示, 消息用從一個對象的生命線到另一個對象的生命線的箭頭表示. 箭頭以時間的順序在圖中上下排列。在時序圖中下面的幾個概念是非常重要的:
4.1對象: 時序圖中對象使用矩形表示, 并且對象名稱下有下劃線. 将對象置于時序圖的頂部說明在互動開始時對象就已經存在了. 如果對象的位置不在頂部, 表示對象是在互動的過程中被建立的。
4.2生命線: 生命線是一條垂直的虛線. 表示時序圖中的對象在一段生命周期内的存在. 每個對象底部中心的位置都帶有生命線。
4.3消息: 兩個對象之間的單路通信. 從發送方指向接收方. 在時序圖中很少使用傳回消息。
4.4激活/鈍化: 時序圖可以描述對象的激活和鈍化. 激活表示該對象被占用已完成某個任務. 鈍化指對象處于空閑狀态, 等待消息. 在 UML 中, 對象的激活時将對象的生命線拓寬為矩形來表示的. 矩形稱為計劃條或控制期. 對象就是在激活條的頂部被激活的. 對象在完成自己的工作後被鈍化。
4.5對象的建立和銷毀: 在時序圖中, 對象的預設位置是在圖的頂部. 這說明對象在互動開始之前就已經存在了. 如果對象是在互動過程中建立的, 那麼就應該将對象放到中間部分. 如果要撤銷一個對象, 在其生命線終止點處放置 “×” 符号。
5、協作圖
又叫做合作圖,它可以看成類圖和順序圖的交集,協作圖模組化對象或者角色,以及它們彼此的通信方式。時序圖強調的是對象互動的時間順序,而協作圖則強調對象間的互動關系。
6.活動圖
接下來就是關于活動圖,在 UML 中, 活動圖本質上就是流程圖. 它用于描述系統的活動, 判定點和分支等。活動圖能夠示範出系統中哪些地方存在功能,以及這些功能和系統中其他元件的功能如何共同滿足用例圖模組化的商務需求。這兒也有以下幾個基本的概念:
6.1動作狀态:原子的, 不可中斷的動作, 并在此動作完成之後向另一個動作轉變. 在 UML 中動作狀态用圓角矩形表示, 動作狀态所表示的動作寫在圓角矩形内部。
6.2分支:在軟體系統中很常見。一般用于表示對象類所具有的條件行為. 用一個布爾型表達式的真假來判定動作的流向。條件行為用分支和合并表達.在活動圖中, 分支用空心小菱形表示. 分支包括一個入轉換和兩個帶條件的出轉換, 出轉換的條件應該是互斥的, 須保證隻有一條出轉換能夠被觸發。合并包含兩個帶條件的入轉換和一個出轉換。
6.3分叉與彙合: 分叉用來描述并發線程, 每個分叉可以有一個輸入轉換和兩個或多個輸出轉換. 每個轉換都可以是獨立的控制流. 彙合代表兩個或多個并發控制流同步發生, 當所有的控制流都達到彙合點後, 控制才能繼續往下進行. 每個彙合可以有兩個或多個輸入轉換和一個輸出轉換. 在 UML 中分叉和彙合用一條粗直線表示。
6.4泳道:是一個比較形象的概念,泳道将活動圖中的活動劃分為若幹組, 并将每一組指定給負責這組活動的業務組織. 泳道區分負責活動的對象, 明确地表示哪些活動是由哪些對象進行的. 每個活動指定明确地屬于一個泳道。在活動圖中, 泳道用垂直實線繪出, 垂直線分隔的區域即為泳道。
7、狀态圖
狀态圖可以捕獲對象、子系統和系統的生命周期。它是用來描述一個特定對象的所有可能狀态以及由于各種事件的發生而引起的狀态之間的轉移。一個狀态圖應該連接配接到所有具有清晰的可标志狀态和複雜行為的類;該圖可以确定類的行為以及該行為如何根據目前的狀态而變化,也可以展示哪些事件将會改變類的對象的狀态。
8、構件圖
構件圖又叫做元件圖,它是從軟體架構的角度來描述一個系統的主要功能,如子系統、類、包、構件。建構圖最重要的功能就是——複用。在構件圖中,構件是系統中遵從同一組接口且提供起實作的實體的、可替換的部分,它定義了良好的接口實作單元,它可以是一個檔案、産品、可執行檔案和腳本等。
9、部署圖
用來模組化系統的實體部署。例如計算機和裝置,以及它們之間是如何連接配接的。部署圖的使用者是開發人員、系統內建人員和測試人員。