UML 教程
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
開源的線上繪圖工具,特點是簡潔、清晰。
更多內容
本文已歸檔到: https://github.com/dunwu/notes