UML 教程
關鍵詞:
部署圖
,組件圖
,包圖
,類圖
,復合結構圖
,對象圖
,活動圖
,狀態機圖
,用例圖
,通信圖
,交互概述圖
,時序圖
,時間圖
簡介
UML 圖類型
UML 圖類型如下圖所示:

結構式建模圖
結構式建模圖(Structure diagrams)強調的是系統式的建模。結構圖定義了一個模型的靜態架構。它們通常被用來對那些構成模型的‘要素'建模,諸如:類,對象,接口和物理組件。另外,它們也被用來對元素間關聯和依賴關系進行建模。
行為式建模圖
行為式建模圖(Behavior diagrams)強調系統模型中觸發的事。行為圖用來記錄在一個模型內部,隨時間的變化,模型執行的交互變化和瞬間的狀態;並跟蹤系統在真實環境下如何表現,以及觀察系統對一個操作或事件的反應,以及它的結果。
UML 概念
UML 從來源中使用相當多的概念。我們將之定義於統一建模語言術語匯表。下面僅列代表性的概念。
- 對於結構而言 - 執行者,屬性,類,元件,接口,對象,包。
- 對於行為而言 - 活動(UML),事件(UML),消息(UML),方法(UML),操作(UML),狀態(UML),用例(UML)。
- 對於關系而言 - 聚合,關聯,組合,相依,廣義化(or 繼承)。
- 其他概念
- 構造型—這規范符號應用到的模型
- 多重性—多重性標記法與資料庫建模基數對應,例如:
1, 0..1, 1..*
部署圖
部署圖(Deployment Diagram)用於對系統的物理結構建模。部署圖將顯示系統中的軟件組件和硬件組件之間的關系以及處理工作的物理分布。

節點
節點既可以是硬件元素,也可以是軟件元素。它顯示為一個立方體,如下圖所示。

節點實例
圖可以顯示節點實例,實例與節點的區分是:實例的名稱帶下划線,冒號放在它的基本節點類型之前。實例在冒號之前可以有名稱,也可以沒有名稱。下圖顯示了一個具名的計算機實例。

節點構造型
為節點提供了許多標准的構造型,分別命名為 «cdrom», «cd-rom», «computer», «disk array», «pc», «pc client», «pc server», «secure», «server», «storage», «unix server», «user pc»。 並在節點符號的右上角顯示適當的圖標。

工件
工件是軟件開發過程中的產品。包括過程模型(如:用例模型,設計模型等),源文件,執行文件,設計文檔,測試報告,構造型,用戶手冊等等。
工件表示為帶有工件名稱的矩形,並顯示«artifact»關鍵字和文檔符號。

關聯
在部署圖的上下文聯系中,關聯代表節點間的聯系通道。下圖顯示了一個網絡系統的部署圖,描述了網絡協議為構造型和關聯終端的多重性,

作為容器的節點
節點可以包含其他元素,如組件和工件。下圖顯示了一個嵌入式系統某個部分的部署圖。描寫了一個被主板節點包含的可執行工件。

組件圖
組件圖(Component Diagram)描繪了組成一個軟件系統的模塊和嵌入控件。組件圖比類圖具有更高層次的抽象-通常運行時一個組件被一個或多個類(或對象)實現。它們象積木那樣使得組件能最終構成系統的絕大部分。

上圖演示了一些組件和它們的內部關系。裝配連接器(Assembly connectors)“連接”由"Product"和"Customer"的提供接口到由 "Order"指定的需求接口。 一個依賴關系映射了客戶相關的帳戶信息到“Order”需要的 "Payment"需求接口。
實際上,組件圖同包圖很相似,它們都有明確的界限,把元素分組到邏輯結構中。他們之間的不同是:組件圖提供了語義更豐富的分組機制,在組件圖中,所有的模型元素都是私有的,而包圖只顯示公有的成員。
表現組件
組件可表示為帶關鍵字 «component»的矩形類元;也可用右上角有組件圖標的矩形表示。

裝配連接器
裝配連接器在組件 “Component1”的需求接口和另一個組件 “Component2”的提供接口之間建立橋梁; 這個橋梁使得一個組件能提供另一個組件所需要的服務。

帶端口組件
使用端口的組件圖允許在它的環境指定一個服務和行為,同時這個服務和行為也是組件需要的。當端口進行雙向操作的時候,它可以指定輸入和輸出。下圖詳述了用於在線服務的帶端口組件,它有兩個提供接口 “order entry”和 “tracking”,也有 “payment” 需求接口。

包圖
包圖(Package Diagram)用來表現包和它所包含元素的組織。當用來代表類元素時,包圖提供了命名空間的可視化。包圖最常用的用途是用來組織用例圖和類圖,盡管它不局限於這些 UML 元素。
下面是一個包圖的例子。

包中的元素共享相同的命名空間,因此,一個指定命名空間的元素必須有唯一的名稱。
包可以用來代表物理或邏輯關系。選擇把類包括在指定的包里,有助於在同一個包里賦予這些類相同繼承層次。通常認為把通過復合相關聯的類,以及與它們相協作的類放在同一個包里。

在 UML2.5 中,包用文件夾來表示,包中的元素共享同一個命名空間,並且必須是可識別的,因此要有唯一的名稱或類型。包必須顯示包名,在附屬方框部分有選擇的顯示包內的元素。
- 包的合並 - 包之間的合並連接符«merge»定義了源包元素與目標包同名元素之間的泛化關系。源包元素的定義被擴展來包含目標包元素定義。當源包元素與目標包內沒有同名元素時,目標包元素的定義不受影響。
- 包的導入 - 導入連接符 «import»表明目標包的元素,在該例中是一個類 ,在源包中被引用要用非限定修飾名。源包的命名空間獲得目標類的接口,目標包的命名空間則不受影響。
- 嵌套連接符 - 源包和目標包間的嵌套連接符說明目標包完全包含源包。
類圖
類圖(Class Diagram)展示了面向對象系統的構造模塊。描繪了模型或部分模型的靜態視圖,顯示它包含的屬性和行為,而不是詳細描述操作的功能或完善方法。類圖最常用來表達多個類和接口之間的關系。泛化(Generalizations),聚合(aggregations)和關聯(associations)分別是類之間繼承,復合或應用,及連接的表現。
下面的圖顯示了類之間的聚合關系。弱聚合(淺色箭頭)表現在類 "Account" 使用 "AddressBook",但是不必要包含它的一個實例。強聚合(圖中的黑色箭頭)表示了目標類包含源類,例如,"Contact" 和 "ContactGroup"值被包含在 "AddressBook"中。

類(Classes)
類是定義對象所具有的屬性和行為的元素。行為用類能理解的合適消息和適合每條消息的操作來描述。 類中也可能定義約束,標記值,構造型。
類的標柱(Class Notation)
類用矩形表示。除類的名稱外,還可以選擇性地顯示屬性和操作。 分欄分別用來顯示類的名稱,屬性和操作。
在下面圖中,類的類名顯示在最上面的分欄,它下面的分欄顯示詳細屬性,如:"center" 屬性顯示初始化的值。最后面的分欄顯示操作,如: setWidth,setLength 和 setPosition 以及他們的參數。 屬性和操作名前的標注表示了該屬性或操作的可見性: 如果使用 "+"號,這個屬性或操作是公共的 ; "-" 號則代表這個屬性或操作是私有的。 "#"號是這個屬性或操作被定義為保護的," ~" 號代表包的可見性。

接口(Interfaces)
接口是實施者同意滿足的行為規范,是一種約定。實現一個接口,類必需支持其要求的行為,使系統按照同樣的方式,即公共的接口,處理不相關的元素。

接口有相似於類的外形風格,含有指定的操作,如下圖所示。如果沒有明確的詳細操作,也可以畫成一個圓環。當畫成圓環的時候,到這個環形標柱的實現連接沒有目標箭頭。

表(Tables)
表盡管不是基本 UML 的一部分,仍然是“圖型”能完成的實例用。在右上角畫一個表的小圖標來表示。表屬性用“圖型” «column»表示。 絕大多數表單有一個主鍵,是由一個或幾個字段組成的一個唯一的字碼組合加主鍵操作來訪問表格,主鍵操作“圖型”為«PK»。 一些表有一個或多個外鍵,使用一個或多個字段加一個外鍵操作,映射到相關表的主鍵上去,外鍵操作“圖型”為«FK»。

關聯(Associations)
關聯表明兩個模型元素之間有關系,通常用在一個類中被實現為一個實例變量。連接符可以包含兩端的命名的角色,基數性,方向和約束。關聯是元素之間普通的關系。如果多於兩個元素,也可以使用菱形的關聯關系。當從類圖生成代碼時,關聯末端的對象將變成目標類中實例變量。見下圖示例 "playsFor" 將變成"Player"類中的實例變量。

泛化(Generalizations)
泛化被用來說明繼承關系。連接從特定類元到一般類元。泛化的含義是源類繼承了目標類的特性。下圖的圖顯示了一個父類泛化一個子類, 類“Circle”的一個實例將會有屬性 “ x_position”,“ y_position” , “radius” 和 方法 “display()”。 注意:類 "Shape" 是抽象的,類名顯示為斜體。

下圖顯示了與上圖相同信息的視圖。

聚合(Aggregations)
聚合通常被用來描述由更小的組件所構成的元素。聚合關系表示為白色菱形箭頭指向目標類或父類。
聚合的更強形式 -組合聚合(強聚合) - 顯示為黑色菱形箭頭,用來組合每次最大化的包含組件。如果一個組合聚合的父類被刪除,通常與他相關的所有部分都會被刪除,但是,如果一個部件從組合中去掉,將不用刪除整個組合。組合是可遷,非對稱的關系和遞歸的。
下面的圖示:顯示了弱聚合和強聚合的不同。“ address book” 由許多 “contacts” 和 “contact groups”組成。 “contact group” 是一個“contacts”的虛分組; “contact”可以被包含在不止一個 “ contact group”。 如果你刪除一個“ address book”,所有的 “contacts” 和 “contact groups” 也將會被刪除;如果你刪除“ contact group”, 沒有 “contacts”會被刪除。

關聯類(Association Classes)
關聯類是一個允許關聯連接有屬性和操作的構造。下面的示例:顯示了遠不止簡單連接兩個類的連接,如給“employee”分配項目。“ employee”在項目中所起的作用是一個復雜的實體,既有自身的也有不屬於“employee” 或 “project” 類的細節。 例如,“ employee”可以同時為幾個項目工作,有不同的職務頭銜和對應的安全權限。

依賴(Dependencies)
依賴被用來描述模型元素間廣泛的依賴關系。通常在設計過程早期顯示兩個元素之間存在某種關系,因為是初期而不能確定具體是什么關系,在設計過程末期,該繼承關系會被歸入已有構造型 (構造型 可以是實例化 «instantiate»,跟蹤 «trace»,導入 «import», 和其它的關系),或被替換成一個更明確類型的連接符。
跟蹤(Traces)
跟蹤關系是一種特殊化的依賴關系。連接模型元素或跨模型但是具有相同概念的模型元素集。跟蹤被經常用來追蹤需求和模型的變化。由於變化是雙向的,這種依賴關系的順序通常被忽略。這種關系的屬性可以被指定為單向映射,但跟蹤是雙向的,非正式的和很少可計算的。
實現(Realizations)
是源對象執行或實現目標,實現被用來表達模型的可跟蹤性和完整性-業務模型或需求被一個或多個用例實現,用例則被類實現,類被組件實現,等等。這種實現貫穿於系統設計的映射需求和類等,直至抽象建模水平級。從而確保整個系統的一張宏圖,它也反映系統的所有微小組成,以及約束和定義它的細節。實現關系用帶虛線的實箭頭表示。

嵌套(Nestings)
嵌套連接符用來表示源元素嵌套在目標元素中。下圖顯示“ inner class”的定義,盡管在 EA 中,更多地按照着他們在項目層次視圖中的位置來顯示這種關系。

復合結構圖
復合結構圖顯示類的內部結構,包括它與系統其他部分的交互點。也顯示各部分的配置與關系,這些部分一起執行類元的行為。
類元素已經在類圖部分被詳細地闡述,這部分用來說明類表現復合元素的方式,如:暴露接口,包含端口和部件。

部件
部件是代表一組(一個或多個)實例的元素,這組實例的擁有者是一類元實例,例如:如果一個圖的實例有一組圖形元素,則這些圖形元素可以被表示為部件,並可以對他們之間的某種關系建模。注意:一個部件可以在它的父類被刪除之前從父類中被去掉,這樣部件就不會被同時刪除了。
部件在類或組件內部顯示為不加修飾的方框。

端口
端口是類型化的元素,代表一個包含類元實例的外部可視的部分。端口定義了類元和它的環境之間的交互。端口顯示在包含它的部件,類或組合結構的邊緣上。端口指定了類元提供的服務,以及類元要求環境提供的服務。
端口顯示為所屬類元邊界指定的方框。

接口
接口與類相似,但是有一些限制,所有的接口操作都是公共和抽象的,不提供任何默認的實現。所有的接口屬性都必須是常量。然而,當一個類從一個單獨的超級類繼承而來,它可以實現多個接口。
當一個接口在圖中單列出來,它既可以顯示為類元素的方框,帶 «interface» 關鍵字和表明它是抽象的斜體名稱,也可以顯示為圓環。

注意:圓環標注不顯示接口操作。當接口顯示為類所有的接口,它們會被當作暴露接口引用。暴露接口可以定義為是提供的,還是需求的。提供接口確認包含它的類元提供指定接口元素定義的操作,可通過類和接口間實現的連接來定義。需求接口說明該類元能與其他類元進行通信,這些類元提供了指定接口元素所定義的操作。需求接口可通過在類和接口間建立依賴連接來定義。
提供接口顯示為“帶棒球體”,依附在類元邊緣。需求接口顯示為“帶棒杯體”,也是依附在類元邊緣。

委托
委托連接器用來定義組件外部端口和接口的內部工作方式。委托連接器表示為帶有 «delegate» 關鍵字的箭頭。它連接組件的外部約定,表現為它的端口,到組件部件行為的內部實現。

協作
協作定義了一系列共同協作的角色,它們集體展示一個指定的設計功能。協作圖應僅僅顯示完成指定任務或功能的角色與屬性。隔離主要角色是用來簡化結構和澄清行為,也用於重用。一個協作通常實現一個模式。
協作元素顯示為橢圓。

角色綁定
角色綁定連接器是一條從連接協作到所要完成該任務類元的連線。它顯示為虛線,並在類元端顯示作用名。

表現
表現連接器用於連接協作到類元來表示此類元中使用了該協作。顯示為帶關鍵字 «represents»的虛線箭頭。

發生
發生連接器用於連接協作到類元來表示此協作表現了(同原文)該類元;顯示為帶關鍵字«occurrence»的虛線箭頭。

對象圖
對象圖(Object Diagram)可以認為是類圖的特殊情形,是類圖元素子集,被用來及時強調在某些點,類的實例間的關系。這對理解類圖很有幫助。他們在構造上與類圖顯示沒有不同,但是反映出多樣性和作用。
類和對象元素
下面的圖顯示了類元素和對象元素外觀上的不同。注意:類元素包括三個部分,分別是名字欄,屬性欄和操作欄;對象元素默認為沒有分欄。名稱顯示也有不同:對象名稱有下划線,並可能顯示該對象實例化所用類元的名稱。

運行狀態
類元元素可以有任意數量的屬性和操作。在對象實例中不會被顯示出來。但可能定義對象的運行狀態,顯示特殊實例的屬性設置值。

類和對象圖示例
下圖是一個對象圖,其中插入了類定義圖。它例示如何用對象圖來測試類圖中任務多重性的方法。“car” 類對 “wheel” 類有“1 對多” 的多重性,但是如果已經選擇用“1 對 4” 來替代,那樣就不會在對象圖顯示“3 個輪子”的汽車。

活動圖
UML 中,活動圖用來展示活動的順序。顯示了從起始點到終點的工作流,描述了活動圖中存在於事件進程的判斷路徑。活動圖可以用來詳細闡述某些活動執行中發生並行處理的情況。活動圖對業務建模也比較有用,用來詳細描述發生在業務活動中的過程。
一個活動圖的示例如下所示。

下面描述組成活動圖的元素。
活動
活動是行為參數化順序的規范。活動被表示為圓角矩形,內含全部的動作,工作流和其他組成活動的元素。

動作
一個動作代表活動中的一個步驟。動作用圓角矩形表示。

動作約束
動作可以附帶約束,下圖顯示了一個帶前置條件和后置條件的動作。

控制流
控制流顯示一個動作到下一個動作的流。表示為帶箭頭實線

初始節點
一個開始或起始點用大黑圓點表示,如下圖。

結束節點
結束節點有兩種類型:活動結束節點和流結束節點。活動結束節點表示為中心帶黑點的圓環。

流結束節點表示為內部為叉號的圓環。

這兩種不同類型節點的區別為:流結束節點表明單獨的控制流的終點。活動結束終點是活動圖內所有控制流的結束。
對象和對象流
對象流是對象和數據轉遞的通道。對象顯示為矩形。

對象流顯示為帶箭頭的連接器,表明方向和通過的對象。

一個對象流在它的至少一個終端有一個對象。在上圖中,可以采用帶輸入輸出引腳的速記標柱表示。

數據存儲顯示為帶 «datastore» 關鍵字的對象。

判斷節點和合並節點
判斷節點和合並節點是相同標注:菱形。它們可以被命名。從判斷節點出來的控制流有監護條件,當監護條件滿足時,可以對流控制。下圖顯示了判斷節點和合並節點的使用。

分叉和結合節點
分叉和結合節點有同樣的標柱:垂直或水平條(方向取決於工作流從左到右,還是從上到下)。它們說明了控制的並發線程的起始和終點,下圖顯示他們的使用示例。

結合節點與合並節點不同之處在於:結合節點同步兩個輸入量,產生一個單獨的輸出量。來自結合節點的輸出量要接收到所有的輸入量后才能執行。合並節點直接將控制流傳遞通過。如果兩個或更多的輸入量到達合並節點。則它的輸出流指定的動作會被執行兩次或更多次。
擴展域
擴展域是會執行多次的結構活動域。輸入輸出擴展節點表示為一組“3 廂” ,代表多個選擇項。關鍵詞 "iterative", "parallel" 或 "stream"顯示在區域的左上角

異常處理器
異常處理器在活動圖中可以建模。

可中斷活動區
可中斷活動區環繞一組可以中斷的動作。在下面非常簡單的例子中: 當控制被傳遞到結束訂單 "Close Order" 動作,定單處理"Process Order" 動作會執行直到完成,除非"Cancel Request"取消請求中斷被接受,這會將控制傳遞給"Cancel Order"動作。

分割
一個活動分割顯示為垂直或水平泳道。在下圖中,分割被用來在活動圖中分隔動作,有在 "accounting department"中執行的,有在 "customer"中執行的。

狀態機圖
狀態機圖(state-machine-diagram)對一個單獨對象的行為建模,指明對象在它的整個生命周期里,響應不同事件時,執行相關事件的順序。
如下示例, 下列的狀態機圖顯示了門在它的整個生命周期里如何運作。

門可以處於以下的三種狀態之一: "Opened"打開狀態, "Closed"關閉狀態,或者"Locked"鎖定狀態。 它分別響應事件:“Open”開門, “Close”關門, “Lock”鎖門 和 “Unlock”解鎖。 注意:不是所有的事件,在所有的狀態下都是有效的。如:一個門打開的時候是不可能鎖定的,除非你關上門。並且,狀態轉移可能有附加監護條件:假設門是開的,如果“doorWay->isEmpty”(門是空的)被滿足,那么它只能響應關門事件。狀態機圖使用的語法和約定將在下面的部分進行討論。
狀態
狀態被表示為圓角矩形,狀態名寫在里面。

起始和結束狀態
初始狀態表示為實心黑圓環,可以標注名稱。結束狀態表示為中心帶黑點圓環,也可以被標注名稱。

轉移
一個狀態到下一個狀態的轉移表示為帶箭頭實線。轉移可以有一個“Trigger”觸發器,一個“Guard”監護條件和一個“effect”效果。如下所示:

"Trigger"觸發器是轉移的起因,它可以是某個條件下的一個信號,一個事件,一個變化或一個時間通路。"Guard"監護是一個條件,而且必須為真,以便於讓觸發器引起轉移。效果"Effect"是直接作用到對象上的一個動作,該對象具有做為轉移結果的狀態機。
狀態活動
在上面的狀態轉移示例中,一個效果與該轉移相關聯。如果目標狀態有多個轉移到達,並且每一個轉移都有相同的效果與它相關聯,那最好將該效果與目標狀態相關聯,而不與轉移相關聯。你可以通過為這個狀態定義初始動作來實現。下圖顯示了一個帶入口動作和出口動作的狀態。

可以定義發生在事件上的動作或一直發生的動作。每一種類型的動作是可以定義任意數量的。
自轉移
一個狀態可能有一個返回到自身的轉移,如下圖。效果與轉移關聯是十分有幫助。

復合狀態
一個狀態機圖可以有子狀態機圖,如下圖所示:

可選擇不同方式顯示相同信息,如下圖所示:

上面版本的標注說明"Check PIN"的子狀態機圖顯示在單獨的圖中。
入口點
有時,你不想在正常的初始狀態進入子狀態機。例如下面的子狀態機,它通常從"初始化"狀態開始,但是如果因為某些原因,它不必執行初始化,可能靠轉移到指定的入口點來從 "Ready" 狀態開始。

下圖顯示了狀態機的上一層。

出口點
有與入口點相類似的方式,它可能也指定可選擇的出口點。下圖給出了主處理狀態執行后,所執行狀態的去向將取決於該狀態轉移時所使用的路徑。

選擇偽狀態
選擇偽狀態顯示為菱形,有一個轉移輸入,兩個或多個輸出。下圖顯示不管到達哪一個狀態,經過選擇偽狀態后的去向,取決於在偽狀態中執行時所選擇的消息格式。

連接偽狀態
連接偽狀態用來將多個狀態轉移鏈接在一起。一個單獨的連接偽狀態可以有一個或多個輸入和一個或多個輸出,監護可能應用於每一個轉移,連接是沒有語義的。連接可以把一個輸入轉移分成多個輸出轉移來實現一個靜態分支。與之對照的是選擇偽狀態實現一個動態條件分支。

終止偽狀態
進入終止偽狀態是指狀態機生命線已經終止。終止偽狀態表示為叉號。

歷史狀態
歷史狀態用來當狀態機中斷時,恢復狀態機之前狀態。下面例圖說明了歷史狀態的使用。這個例子是關於洗衣機的狀態機。
在這個狀態機中,當洗衣機運行時,它會按照"Washing" 到 Rinsing"再到"Spinning"來進行。如果電源被切斷 ,洗衣機會停止運行並進入"Power Off" 狀態。當電源恢復,運行狀態在"History State"符號處進入,表示它會從上次離開的地方恢復。
並發區
一個狀態可以被分成幾個不同的區,包含同時存在和執行的子狀態。下面的例子顯示狀態 "Applying Brakes", "front brake"和"rear brakes" 將同時獨立運作。注意使用了分叉和結合偽狀態而不是選擇和合並偽狀態。這些符號用來同步並發的線程。

用例圖
用例圖用來記錄系統的需求,它提供系統與用戶及其他參與者的一種通信手段。
執行者
用例圖顯示了系統和系統外實體之間的交互。這些實體被引用為執行者。執行者代表角色,可以包括:用戶,外部硬件和其他系統。執行者往往被畫成簡筆畫小人。也可以用帶«actor»關鍵字的類矩形表示。

在下圖中,執行者可以詳細的泛化其他執行者:

用例
用例是有意義的單獨工作單元。它向系統外部的人或事提供一個易於觀察的高層次行為視圖。 用例的標注符號是一個橢圓。

使用用例的符號是帶可選擇箭頭的連接線,箭頭顯示控制的方向。下圖說明執行者 "Customer"使用 "Withdraw"用例。

用途連接器(uses connector)可以有選擇性的在每一個端點有多重性值,如下圖,顯示客戶一次可能只執行一次取款交易。但是銀行可以同時執行許多取款交易。

用例定義
一個典型的用例包括:
- 名稱和描述 - 用例通常用一個動詞詞組定義,而且有一個簡短的文字說明。
- 需求 - 需求定義了一個用例必須提供給終端用戶的正式功能性需求。它們符合構造方法建立的功能性規范。一個需求是用例將執行一個動作或提供多個值給系統的約定或承諾。
- 約束 - 一個約束是一個用例運行的條件或限制。它包括:前置條件,后置條件和不變化條件 。前置條件指明了用例在發生之前需要符合的條件。后置條件用來說明在用例執行之后一些條件必須為"真"。不變化條件說明用例整個執行過程中該條件始終為"真"。
- 情形 - 情形是用例的實例在執行過程中,事件發生流程的形式描述。它定義了系統和外部執行者之間的事件指定順序。通常用文本方式來表示,並對應時序圖中的文字描述。
- 情形圖
- 附加信息
包含用例
用例可能包含其他用例的功能來作為它正常處理的一部分。通常它假設,任何被包含的用例在基本程序運行時每一次都會被調用。下面例子:用例“卡的確認”

用例可以被一個或多個用例包含。通過提煉通用的行為,將它變成可以多次重復使用的用例。有助於降低功能重復級別。
擴展用例
一個用例可以被用來擴展另一個用例的行為,通常使用在特別情況下。例如:假設在修改一個特別類型的客戶訂單之前,用戶必須得到某種更高級別的許可,然后“獲得許可”

擴展點 - 擴展用例的加入點被定義為擴展點。

系統邊界 - 它用來顯示用例在系統內部,執行者在系統的外部。

通信圖
通信圖,以前稱之為協作圖,是一種交互圖,所顯示消息與時序圖相似,但是它更側重於對象間的聯系。
在通信圖中,對象之間顯示關聯連接器。消息附加到這些關聯上,顯示短箭頭指向消息流的方向。消息的順序通過編號碼顯示。
下面的兩個圖用通信圖和時序圖分別顯示相同的信息。盡管我們可能從通信圖的編號碼得到消息順序,但它不是立即可見的。通信圖十分清楚的顯示了鄰近對象間全部完整的消息傳遞。


交互概述圖
一個交互概覽圖是活動圖的一種形式,它的節點代表交互圖。交互圖包含時序圖,通信圖,交互概覽圖和時間圖。 大多數交互概覽圖標注與活動圖一樣。例如:起始,結束,判斷,合並,分叉和結合節點是完全相同。並且,交互概覽圖介紹了兩種新的元素:交互發生和交互元素。
交互發生
交互發生引用現有的交互圖。顯示為一個引用框,左上角顯示 "ref" 。被引用的圖名顯示在框的中央。

交互元素
交互元素與交互發生相似之處在於都是在一個矩形框中顯示一個現有的交互圖。不同之處在內部顯示參考圖的內容不同。

將它們放在一起
所有的活動圖控件,都可以相同地被使用於交互概覽圖,如:分叉,結合,合並等等。它把控制邏輯放入較低一級的圖中。下面的例子就說明了一個典型的銷售過程。子過程是從交互發生抽象而來。

時序圖
時序圖是交互圖的一種形式,它顯示對象沿生命線發展,對象之間隨時間的交互表示為從源生命線指向目標生命線的消息。時序圖能很好地顯示那些對象與其它那些對象通信,什么消息觸發了這些通信,時序圖不能很好顯示復雜過程的邏輯。
生命線
一條生命線在時序圖中代表一個獨立的參與者。表示為包含對象名的矩形,如果它的名字是"self",則說明該生命線代表控制帶時序圖的類元。

有時,時序圖會包含一個頂端是執行者的生命線。這情況說明掌握這個時序圖的是用例。健壯圖中的邊界,控制和實體元素也可以有生命線。

消息
消息顯示為箭頭。消息可以完成傳輸,也可能丟失和找回,它可以是同步的,也可以是異步的,即可以是調用,也可以是信號。在下圖中,第一條消息是同步消息(標為實箭頭)完成傳輸,並隱含一條返回消息。第二條消息是異步消息 (標為實線箭頭),第三條是異步返回消息(標為虛線)。

執行發生
向下延伸的細條狀矩形表示執行事件或控制焦點的激活。在上圖中有三個執行事件。第一個是源對象發送兩條消息和收到兩條回復。第二個是目標對象收到一條同步消息並返回一條回復。第三個是目標對象收到一條異步消息並返回一條回復。
內部通信
內部消息表現為一個操作的遞歸調用,或一個方法調用屬於同一個對象的其他方法。顯示為生命線上執行事件的嵌套控制焦點。

迷路消息和拾取消息
迷路消息是那些發送了卻沒有到達指定接收者,或者到達的接收者不再當前圖中。拾取消息是收到來自那些未知的發送者,或者來自沒有顯示在當前圖的發送者的消息。它們都表明是去往或來自一個終點元素。

生命線開始與結束
生命線可以在時序圖時間刻度范圍內創建和銷毀,在下面的例子中,生命線被停止符號(叉號)終止。在前面的例子中,生命線頂端的符號(Child)顯示在比創建它的對象符號(parent)沿頁面要低的位置上。下圖顯示創建和終止對象。

時間和期限約束
消息默認顯示為水平線。因為生命線顯示為沿屏幕向下的時間通道,所以當給實時系統建模,或是有時間約束的業務過程建模,考慮執行動作所需時間長度是很重要的。因此可以給消息設置一個期限約束,這樣的消息顯示為下斜線。

復合片段
如前面所說,時序圖不適合表達復雜的過程邏輯。在一種情況下,有許多機制允許把一定程度的過程邏輯加入到圖中,並把它們放到復合片段的標題下。復合片段是一個或多個處理順序被包含在一個框架中,並在指定名稱的環境下執行。片段可以是:
- 選擇性片段 (顯示 “alt”) 為 if…then…else 結構建模。
- 選項片段 (顯示 “opt”) 為 "switch"(開關) 結構建模。
- 中斷片段對被處理事件的可選擇順序建模,而不是該圖的其他部分。
- 並行片段(顯示 “par”) 為並發處理建模。
- 弱順序片段 (顯示 “seq”) 包含了一組消息,這組消息必須在后繼片段開始之前被處理。但不會把片段內消息的先后順序強加到不共享同一條生命線的消息上。
- 嚴格順序片段 (顯示 “strict”) 包含了一系列需要按照給定順序處理的消息。
- 非片段 (顯示 “neg”) 包含了一系列不可用的消息。
- 關鍵片段 具有關鍵部分。
- 忽略片段 聲明一個沒有意義的消息,如果它出現在當前上下文中。
- 考慮片段與忽略片段相反,不包含在考慮片段內的消息都應該被忽略。
- 斷言片段 (顯示 “assert”)標明任何沒有顯示為聲明操作數的順序都是無效的。
- 循環片段 包含一系列被重復的消息。
下圖顯示的是循環片段:

這也是一個類似於復合片段的交互發生。 交互發生被其他圖參考,顯示為左上角帶"ref",將被參考圖名顯示在方框的中間。
門
門是連接片段內消息和片段外消息的連接點。 在 EA 中,門顯示為片段框架上的小正方形。作用為時序圖與頁面外的連接器。 用來表示進來的消息源,或者出去消息的終點。下面兩個圖顯示它們在實踐中的使用。注意:" top level diagram"中的門用消息箭頭指向參考片段,在這里沒有必要把它畫成方塊。


部分分解
一個對象可以引出多條生命線,使得對象內部和對象之間的消息顯示在同一圖上。

狀態常量/延續
狀態常量是生命線的約束,運行時始終為"真"。顯示為兩側半圓的矩形,如下圖:

延續雖與狀態常量有同樣的標注,但是被用於復合片段,並可以延伸跨越多條生命線。
時間圖
UML 時間圖被用來顯示隨時間變化,一個或多個元素的值或狀態的更改。也顯示時控事件之間的交互和管理它們的時間和期限約束。
狀態生命線
狀態生命線顯示隨時間變化,一個單項狀態的改變。不論時間單位如何選擇,X 軸顯示經過的時間,Y 軸被標為給出狀態的列表。狀態生命線如下所示:

值生命線
值生命線顯示隨時間變化,一個單項的值的變化。X 軸顯示經過的時間,時間單位為任意,和狀態生命線一樣。平行線之間顯示值,每次值變化,平行線交叉。如下圖所示。

將它們放在一起
狀態和值的生命線能疊加組合。它們必須有相同的 X 軸。 消息可以從一個生命線傳遞到另一個。每一個狀態和值的變換能有一個定義的事件,一個時間限制是指一個事件何時必須發生,和一個期限限制說明狀態或值多長時間必須有效。一旦這些已經被應用,其時間圖可能顯示如下。

UML 工具
UML 工具非常多,到底哪種工具好,真的是仁者見仁智者見智。這里列舉一些我接觸過的 UML 工具:
億圖
國內開發的、收費的繪圖工具。圖形模板、素材非常全面,樣式也很精美,可以導出為 word、pdf、圖片。

Visio
Office 的繪圖工具,特點是簡單、清晰。

StarUML
樣式精美,功能全面的 UML 工具。

Astah
樣式不錯,功能全面的繪圖工具。

ArgoUML
UML 工具。

ProcessOn
在線繪圖工具,特點是簡潔、清晰。
drawio
開源的在線繪圖工具,特點是簡潔、清晰。