UML 統一建模語言簡明教程 一看就懂

1. UML是什麼

UML,統一建模語言,是被廣泛認可的圖形化建模標準,它可以幫助開發人員在面向對象設計(OOAD)過程中標識元素、構建模塊、分析過程,並可以通過文檔來註明系統中的重要細節。

2. UML的適用領域

UM適用於系統開發過程中從需求規格描述到系統完成後測試的不同階段。

  • 需求分析
  • 設計
  • 編碼
  • 測試
  • 部署

3. UML中的四種主要關係

  1. 關聯關係(Association)
  2. 依賴關係(Dependency)
  3. 泛化(一般化)關係(Generalization)
    泛化指的是類之間的繼承關係
  4. 聚集關係(Aggregation)
    聚集指的是整體與部分之間的關係,在實體域對象之間很常見

4. UML中的兩類九種圖

靜態模型圖:描述系統的結構

1、 類圖;2、對象圖;3、組件圖;4、部署圖

動態模型圖:描述系統的行爲
1、用例圖;2、活動圖;3、時序圖;4、協作圖;5、狀態圖
在這裏插入圖片描述

4.1. 用例圖

用例圖是從軟件需求分析到最終實現的第一步,它是從客戶的角度來描述系統功能,讓不懂技術細節的客戶能夠直觀的理解系統的功能。

所謂用例,就是系統的一個功能,如下例所示,該用例圖顯示了該系統有兩個參與者(客戶、管理員)和三個用例(登錄、查詢、修改)。用例圖中的箭線則是參與者與用例之間的關係,下圖中的關係表示了:客戶可以使用登錄和程序用例,管理員可以使用登錄、程序和修改用例。
在這裏插入圖片描述

一張用例圖通常包含三個基本組件:

  1. 參與者(Actor)
    與系統打交道的人或其他系統即使用該系統的人或事物。在UML中參與者用人形圖標表示
  2. 用例(Use Case)
    代表系統的某項完整的功能。在UML中使用一個橢圓來表示
  3. 關係
    定義用例之間的關係。在UML中使用各種不同樣式的線條來表示。雖然關係有三種不同的類型(包含關係 Include,擴展關係 Extend,泛化關係 Generalization),但它們的共性都是從現有的用例中抽取出共同的信息,組成一個可重用的單獨用例。
4.1.1. 用例與用例之間的關係
4.1.1.1 包含關係

將一組跨越多個用例的相似功能包含用例進行封裝,以便多個基用例進行復用。包含關係可以用編程時的函數調用來類比。在UML中包含關係用虛線箭頭加“<<include>>",箭頭指向被包含的用例。

如下圖所示,該用例圖中的“查詢”、“登錄”用例都涉及查詢數據庫,因此封裝一個“數據庫查詢操作”用例供“查詢”和“登錄”兩個用例包含;“修改”、“刪除”用例都涉及修改數據庫,因此封裝一個“數據庫修改操作”用例供“修改”和“刪除”用例包含
在這裏插入圖片描述

4.1.1.2. 擴展關係

將基用例中一段相對獨立的非必需功能擴展用例進行封裝,從而使基用例行爲更簡練和流程更集中。擴展用例爲基用例添加新的行爲。在UML中擴展關係用虛線箭頭加"<<extend>>",箭頭指向被擴展的用例。

如下圖所示,該用例圖中“查詢”用例是基本用例,而“打印”和“導出”用例是相對獨立的非必需功能,也即,客戶在查詢時可以選擇打印和導出,也可以不選擇打印和導出。因此我們將“打印”和“導出”用例視爲“查詢”用例的擴展用例
在這裏插入圖片描述

4.1.1.3. 泛化關係(繼承關係)

泛化關係可以類比面嚮對象語言中的類繼承來理解。即子用例和父用例相似,但表現出更特別的行爲,子用例將繼承父用例的所有結構、行爲和關係,可以使用父用例的一段行爲,也可以重寫它。在UML中,泛化關係用一個實線空心三角箭頭從子用例指向父用例。

如下圖所示,參與者“管理員”可以使用“客戶註冊審批”用例和“客戶註銷審批”用例,這兩個用例都可以由一個父用例泛化而來,因此將“客戶註冊審批”用例、“客戶註銷審批”用例與“審批”用例之間的關係稱作泛化關係
在這裏插入圖片描述

4.2. 類圖

類圖是面向對象系統建模中最常用的圖,是定義其他圖的基礎,主要是用來顯示系統中的類、接口以及它們之間的關係。

其包含的主要元素有類、接口和關係(關聯關係、泛化關係、依賴關係、實現關係)。在類圖中也可以包含註釋和約束。

4.2.1. 類圖的圖符
圖符 名稱 描述
在這裏插入圖片描述 三欄從上往下依次用來表示類的名稱、屬性和操作
在這裏插入圖片描述在這裏插入圖片描述 接口 接口表示對類操作的抽象(兩種表示形式含義一致)
在這裏插入圖片描述 包用來表示一個類圖的集合
在這裏插入圖片描述 對象 對象表示類的一個實例
在這裏插入圖片描述 關聯 關聯用於表示類之間的聯繫,其特殊形式有:組成關聯和聚集關聯
在這裏插入圖片描述 組成關聯 組成關聯表示類之間是整體與部分的關係,且整體與部分共存亡
在這裏插入圖片描述 聚集關聯 聚集關聯表示類之間是整體與部分的關係
在這裏插入圖片描述 鏈接 鏈接用於表示類之間關聯關係的一個實例
在這裏插入圖片描述 泛化關係 泛化關係(繼承關係)用來表示一般元素與抽象元素之間的分類關係
在這裏插入圖片描述 依賴關係 依賴關係用來說明一個類或包的變化會引起依賴其的類或包的變化
在這裏插入圖片描述 註釋體 註釋體用於對UML實體進行文字說明
在這裏插入圖片描述 註釋鏈接 註釋鏈接用於鏈接註釋體和其註釋的UML實體
4.2.2. 類的表示

類是類圖的主要組件,由“類名”、“屬性”和“方法”組成,用三聯矩陣表示

數據類型

符號 表示
+ public
- private
# protected
~ package

如下例所示類圖:
在這裏插入圖片描述
用Java代碼可以實現爲:

package com.test.test;

public class Person {
	public int id;
	protected String name;
	private int age;
	String address;
	 
	public String getName(int id) {return null;}
	 
	public void show() {}
	
}
4.2.3. 類與類之間的關係
4.2.3.1. 泛化關係(繼承關係)

在UML中,泛化關係用來表示類與類接口與接口之間的繼承關係。在UML中泛化關係用一條實線空心箭頭由子類指向父類。

例如下面類圖所示,“猴子”類和“老虎”類繼承於“動物”類,也可以說“動物”類是“猴子”類和“老虎”類的父類
在這裏插入圖片描述

4.2.3.2. 實現關係

在UML中,實現關係用來表示類與接口之間的實現關係,用一條虛線空心箭頭由子類指向父類。

例如下面類圖所示,“UserDaoImpl”類實現了“UserDao”接口
在這裏插入圖片描述

4.2.3.3. 依賴關係

如果一個實體的改動會導致另一個實體也發生改變,則稱兩個類之間存在依賴。依賴指的是類與類之間的調用關係,表現爲成員變量方法的參數或者對靜態方法的調用。員工使用電腦進行工作。在UML;中用帶虛線的箭頭表示。

例如下面類圖所示,“飛機”類依賴“引擎”類,當“引擎”類發生改變時飛機類也會發生改變,用現實生活中的話來說,就是引擎的屬性以及工作狀態會影響飛機飛行的屬性和工作狀態。
在這裏插入圖片描述

4.2.3.4. 關聯關係

關聯關係是一種擁有關係,它使一個類知道另一個類的屬性和方法,例如老師與學生、學校與學生關聯。通過成員變量體現。

用帶普通箭頭的實心線,指向被擁有者。單向的關聯有一個箭頭,雙向的關聯可以有兩個箭頭或者沒有箭頭。

例如下面類圖所示,學校與學生是一對多的關係,因此關聯關係從學校指向學生;老師與學生是多對多的關係,因此關聯關係是雙向的。
在這裏插入圖片描述

關聯關係的多重性
關聯關係的多重性是指有多少對象可以參與該關聯,多重性可以用來表達一個取值範圍、特定值或無限定的範圍。

表示法 作用
0 表示0個對象
0…1 表示0或1個對象
0…n 表示0到n個對象
1…n 表示1到n個對象
1 表示1個對象
n 表示n個對象
* 表示許多個對象

例如下面的類圖,表示許多個老師與許多個學生相關聯
在這裏插入圖片描述

4.2.3.5. 聚合關係

聚合關係是關聯關係的一種,關聯和聚合在語法上一致,只通過具體的邏輯關係進行區分。

聚合關係是整體與部分的關係,且部分可以離開整體而單獨存在。在UML圖中用帶空心菱形的實心線,菱形指向整體。

例如下面的類圖中,“電腦”類和“磁盤”類是整體和部分的關係,“磁盤”類離開“電腦”類仍然可以存在(移動硬盤)。
在這裏插入圖片描述

4.2.3.6. 組成關係

是整體與部分的關係,但部分不能離開整體而單獨存在。組合關係是關聯關係的一種,是比聚合關係還要強的關係,它要求普通的聚合關係中代表整體的對象負責代表部分的對象生命週期。在UML圖中用帶實心菱形的實線,菱形指向整體

例如下面的類圖中,“公司”類和“部門”是整體和部分的關係,沒有“公司”類就不存在“部門”類。
在這裏插入圖片描述

4.2.4. 類圖的正向工程和逆向工程

正向工程:根據類圖類生成Java代碼。通常先分析、設計、產生UML圖,再根據UML圖編寫Java代碼。

逆向工程:在已有Java代碼的情況下,根據Java代碼來生成相應的類圖。

繪製類圖可以在軟件設計階段幫助開發者從靜態的角度去理解系統應該包含哪些類,以及類之間關係。實際上,很少把類圖畫得詳細到可以通過正向工程來直接生成Java代碼。繪製類圖時,通常只會把那些最關鍵的屬性和方法描述出來。

4.3. 對象圖

對象圖是類圖的一個實例,用於顯示系統執行時的一個快照,即在某一個時間點上系統的狀態。對象圖用帶下劃線的對象名稱來表示對象。

例如下面的圖中,“本田汽車:汽車”對象就是“汽車”類的一個實例
在這裏插入圖片描述

4.4. 組件圖

組件圖提供系統的物理視圖。它的用途是顯示系統中的軟件其他軟件組件(例如庫函數)的依賴關係

對於現代的大型應用程序而言,通常不只是單獨一個類或單獨一組類所能完成的,通常會由一個或多個可部署的組件組成。

例如,對Java程序而言,可複用的組件通常打包成一個JAR、WAR等文件;對C/C++應用而言,可複用的組件通常是一個函數庫,或者一個DLL (動態鏈接庫)文件。

系統中各組件通過功能組織在一起,用組件圖來建立系統中各組件之間的關係、設計系統的整體構架,通常在一個非常高的層次上顯示。

例如下面的組件圖表示了,“計算機”組件依賴於“CPU”、“硬盤”和“內存”三個組件
在這裏插入圖片描述
下面的業務流程組件圖反映了,“控制層”組件依賴於“業務邏輯層”組件完成操作,而“業務邏輯層”組件又依賴於“持久化層”組件完成操作
在這裏插入圖片描述

4.5. 部署圖

部署圖用於描述軟件系統如何部署硬件環境中。它的用途是顯示軟件系統不同的組件將在何處物理地運行,以及它們彼此之間如何通信。

因爲部署圖是對物理運行情況進行建模,所以系統的生產人員就可以很好地利用這種圖來安裝、部署軟件系統。

部署圖中的符號包括組件圖中所使用的符號元素,另外還增加了幾個符號,主要是增加了節點的概念

節點:指組件運行的環境。可以是軟件(操作系統、其他等)或硬件資源(計算機,其他硬
件)。
通信關聯:節點通過通信關聯建立彼此的關係,採用從節點到節點繪製實線來表示關聯。

例如下面的部署圖,表示了應用軟件應該部署的位置(應用服務器)、數據庫應該部署的位置(數據庫服務器),並且三個節點通過網絡相連接
在這裏插入圖片描述
下圖是一個更復雜一些的部署圖,它表示了,“學生終端”、“教師終端”、“管理員終端”三個節點可以通過局域網與“Tomcat服務器”中的兩個組件系統交互,而“Tomcat服務器”的數據又存儲在“數據庫服務器”中。
在這裏插入圖片描述

4.6. 包圖

包圖由包和包之間的關係組成。包的圖標就如同一個帶標籤的文件夾,它提供了一 種用於組織各種元素的分組機制,UML職工包與類的關係可以參考Java中package與class的關係。

在UML中,包用來對元素進行分組,併爲這些元素提供命名空間,包所擁有的或者引用的所有元素稱爲包的內容,包沒有實例。

例如下面的包圖,表示了業務處理流程的不同類在不同包中,例如“userAction”和“AdminAction”兩個類屬於Action包,並且“UserAction”類依賴於“Service”包中的“UserService”類進行處理
在這裏插入圖片描述

4.7. 時序圖

用於描述對象之間消息傳遞(方法調用)時間順序,是顯示對象之間交互的圖,這些對象按調用的時間順序排列,概括一下就是:時序圖顯示的是參與交互的對象及其對象之間消息交互的順序。

4.7.1. 時序圖的建模元素
  • 對象(Actor)
    時序圖中對象使用矩形表示,對象名稱帶下劃線。將對象置於時序圖的頂部說明在交互開始時對象就已經存在了。如果對象的位置不在頂部,表示對象是在交互的過程中被創建的。
  • 生命線(LifeLine)
    生命線是一條垂直的虛線,表示時序圖中的對象在一段生命週期內的存在。每個對象底部中心的位置都有生命線。
  • 控制焦點(Focus of Control)
  • 消息(Message)
    兩個對象之間從發送方指向接收方的單路通信。在時序圖中很少使用返回消息(返回消息使用虛線表示)。

在這裏插入圖片描述

4.8. 協作圖(合作圖)

協作圖是一種交互圖。與時序圖不同,協作圖表達對象間的交互過程及對象間的關聯關係,而時序圖主要側重於對象間消息傳遞在時間上的先後關係

時序圖與協作圖都表示對象之間的交互作用,只是它們的側重點有所不同:

  • 時序圖描述了交互過程中的時間順序,但沒有明確地表達對象之間的關係。
  • 協作圖描述了對象之間的關係,但時間順序必須從順序號獲得。

時序圖和協作圖的語義是等價的,可以相互轉換,而不丟失任何信息。

一個協作圖樣例如下所示,只需按照箭頭順序看協作圖即可瞭解工作流程
在這裏插入圖片描述

4.9. 活動圖

活動圖本質上就是流程圖,它用於描述系統的活動,判定點和分支等。流程圖在生活中很常見,例如做PPT的時候常常會用到流程圖。

活動圖中的菱形框是判斷標誌,表示條件轉移。活動圖對錶示併發很有用。在活動圖中使用一個稱爲同步條的水平粗線可以將一條轉移分爲多個併發執行的分支,或將多個分支合爲一條轉移。此時,只有輸入的轉移全部有效才能執行後面的活動。

4.9.1. 活動圖的圖符
圖符 名稱 描述
在這裏插入圖片描述 起點 在一個活動圖中表示所有活動的起點(有且僅有一個)
在這裏插入圖片描述 終點 在一個活動圖中表示活動的終點(至少有一個)
在這裏插入圖片描述 活動 表示活動圖中的一個具體的不可再分的活動
在這裏插入圖片描述 組合活動 表示活動圖中的一個可再分的活動(一般用另一張活動圖描述)
在這裏插入圖片描述 對象 若與信號流相連,表示它是與活動圖中的對象進行交互(收發信號)的其他對象;若與數據流相連,表示它是活動的輸入或輸出
在這裏插入圖片描述 泳道 用於對活動圖中的活動進行分組(類似包),同一組活動由一個或多個對象負責完成。
在這裏插入圖片描述 條件判斷 表示活動流程中的判斷,通常有多個信息流從它引出,表示判斷後的不同活動分支
在這裏插入圖片描述 同步條 表示活動之間的同步。一般有一個或多個信息流向它引入和從它引出,表示引入的信息流同時到達,引出的信息流被同時觸發
在這裏插入圖片描述 信號發送 表示在某個活動轉移發生時向某個對象發送一個信號,等價於信息流上的發送子句
在這裏插入圖片描述 信號接收 表示信號的接收,是某個活動轉移的必要條件。等價於信息流上的事件標識.

一個簡單的流程圖示例,該圖中有兩個泳道“客戶端”和“系統”,客戶端需要完成“輸入登錄數據”活動,其他活動由系統完成。
在這裏插入圖片描述

4.10. 狀態圖

狀態圖是通過建立對象的生存週期模型來描述對象隨時間變化動態行爲

4.10.1. 狀態圖的圖符
圖符 名稱 描述
在這裏插入圖片描述 初態 狀態圖的起始點
在這裏插入圖片描述 中間狀態 表示對象的一種狀態
在這裏插入圖片描述 複合狀態 表示對象的複合狀態,可化爲多個子狀態,用"或"和"與"兩種關係相連
在這裏插入圖片描述 終態 狀態圖的終點
在這裏插入圖片描述 條件判斷 表示對象不同狀態的條件分支轉移

例如下面的狀態圖,一個空對象通過new指令由初態轉變爲臨時狀態,然後通過save()指令進入持久化狀態,在通過close()指令轉變爲遊離狀態,最後通過finish()指令進入終態,結束生命週期。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章