一次搞懂建模語言UML

  • 2019 年 10 月 3 日
  • 筆記

Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,它是一個支持模型化和軟件系統開發的圖形化語言,為軟件開發的所有階段提供模型化和可視化支持,包括由需求分析到規格,到構造和配置。

  • UML分類
    (1)靜態模型(系統結構): 用例圖、類圖、對象圖、構件圖、部署圖
    (2)動態模型(系統行為):狀態圖、活動圖、順序圖、協作圖
  • UML中有4種事務:
    (1)結構事務:名詞、靜態部分、物理元素。

image.png

  • (2)行為事務:動詞、動態部分、行為。
    image.png

  • (3)分組事務:包。
    image.png

  • (4)注釋事務:註解。
    image.png

用例圖:

用例圖是指由參與者(Actor)、用例(Use Case),邊界以及它們之間的關係構成的用於描述系統功能的視圖。用例圖(User Case)是外部用戶(被稱為參與者)所能觀察到的系統功能的模型圖。用例圖是系統的藍圖,用於需求分析階段。用例圖呈現了一些參與者,一些用例,以及它們之間的關係,主要用於對系統、子系統或類的功能行為進行建模。
用例圖1

用例圖2

用例之間的關係
(1)包含 (include) 關係
父用例包含子用例,父用例執行,子用例必然被執行
當兩個或多個用例中共用一組相同的動作,這時可以將這組相同的動作抽出來作為一個獨立的子用例,供多個基用例所共享。因為子用例被抽出,基用例並非一個完整的用例,所以include關係中的基用例必須和子用例一起使用才夠完整,子用例也必然被執行。include關係在用例圖中使用帶箭頭的虛線表示(在線上標註<>),箭頭從基用例指向子用例。

image.png

(2)擴展(extend)關係
子用例擴展父用例,復用執行,子用例不一定執行
是對基用例的擴展,基用例是一個完整的用例,即使沒有子用例的參與,也可以完成一個完整的功能。 extend關係在用例圖中使用帶箭頭的虛線表示(在線上標註<>),箭頭從子用例指向基用例。

image.png

圖例:用戶如果如期還書,則還書業務就結束了,如果超期了,才會有罰款的業務,罰款不是必須,所以是擴展關係。

類圖

image.png

類圖(Class diagram)展現了一組對象、接口、協作和它們之間的關係。類圖是靜態視圖。
類圖中包括:
(1)類
(2)接口
(3)協作
(4)依賴、泛化和關聯關係

使用類圖的場景:
(1)對系統的靜態設計建模
(2)對簡單的協作建模
(3)對邏輯數據庫模式建模

類的分類:

(1) 實體類:實體類對應系統需求中的每個實體,它們通常需要保存在永久存儲體中,一般使用數據庫表或文件來記錄,實體類既包括存儲和傳遞數據的類,還包括操作數據的類。實體類來源於需求說明中的名詞,如學生、商品等。

(2) 控制類:控制類用於體現應用程序的執行邏輯,提供相應的業務操作,將控制類抽象出來可以降低界面和數據庫之間的耦合度。控制類用於對一個或幾個用例所特有的控制行為進行建模。控制對象(控制類的實例)通常控制其他對象,因此它們的行為具有協調性質。控制類將用例的特有行為進行封裝

(3) 邊界類:邊界類用於對外部用戶與系統之間的交互對象進行抽象,主要包括界面類,如對話框、窗口、菜單等。

類圖中的關係:

  • 依賴(Dependency)


是一種使用的關係, 即一個類的實現需要另一個類的協助, 所以要盡量不使用雙向的互相依賴。可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關係就是依賴。在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

  • 泛化(Generalization)

也就是繼承關係的反關係,用於描述父類與子類之間的關係,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關係用帶空心三角形的直線來表示。
子類繼承自父類,父類是子類的泛化。

  • 關聯(Association)

    關聯關係

是一種擁有的關係, 它使一個類知道另一個類的屬性和方法;如:老師與學生,丈夫與妻子。
關聯是類之間的結構關係,它描述了一組鏈,鏈是對象之間的連接。兩個類之間可以有多個由不同角色標識的關聯。關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。

(1) 雙向關聯。默認情況下,關聯是雙向的。

(2) 單向關聯
(3)自關聯
(4)多重關聯

  • 聚合(Aggregation)


    聚合是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬於多個整體對象,也可以為多個整體對象共享在UML中,聚合關係用帶空心菱形的直線表示。例如:汽車發動機(Engine)是汽車(Car)的組成部分,但是汽車發動機可以獨立存在,因此,汽車和發動機是聚合關係,如圖所示

  • 組合(Composition)

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束。在UML中,組合關係用帶實心菱形的直線表示。

  • 實現(Realization)

是用來規定接口和實現接口的類或者構建結構的關係,接口是操作的集合,而這些操作就用於規定類或者構建的一種服務。
接口之間也可以有與類之間關係類似的繼承關係和依賴關係,但是接口和類之間還存在一種實現關係(Realization),在這種關係中,類實現了接口,類中的操作實現了接口中所 聲明的操作。在UML中,類與接口之間的實現關係用帶空心三角形的虛線來表示。例如:定義了一個交通工具接口Vehicle,包含一個抽象操作move(),在類Ship和類Car中都實現了該move()操作,不過具體的實現細節將會不一樣,如圖所示:

對象圖

對象圖(ObjectDiagram) 展現了某一時刻一組對象以及它們之間的關係,描述了在類圖中所建立的事物的實例的靜態快照。

交互圖

交互圖表現為序列圖、通信圖、交互概覽圖和計時圖。用於動態建模。

序列圖

序列圖強調消息時間順序的交互

通信圖

通信圖(協作圖)強調接收和發送信息的對象的結構組織的交互
對象:圖中的矩形元素即為對象,其中冒號前面部分為對象名,後面為類名,表示類的一個實例。
鏈接:用兩個對象之間的單一線條表示,用來在通信圖中關聯對象,目的是讓消息在不同系統對象之間傳遞。可以理解鏈接是公路,消息是車。
消息:通信圖中對象之間通信的方式。


交互概覽圖

交互概覽圖強調控制流的交互圖

計時圖

計時圖適合嵌入式系統建模的交互圖

狀態圖

用來描述一個特定的對象所有可能的狀態,以及由於各種事件的發生而引起的狀態之間的轉移和變化。用於對系統的動態方面建模。

活動圖

將進程或其他計算的結構展示為計算內部一步步的控制流和數據流,主要用來描述系統的動態視圖。活動圖在本質上是一種流程圖。活動圖着重表現從一個活動到另一個活動的控制流,是內部處理驅動的流程。
活動圖主要描述行為的動作,
狀態圖主要描述行為的結果。


構件圖

使用構件圖的思想是復用。就像是我們蓋房子,當房子的大體框架建好之後,剩下的門和窗戶傢具之類的直接拿來安裝上即可,不需要再從新製作,直接拿來複用的思想。這些門和窗戶就相當於一個個的構件。
構件有一下幾種類型:
(1)部署構件:dll文件、exe文件、com+對象、CORBA對象、EJB、動態Web頁和數據庫表等。
(2)工作產品構件:源代碼文件、數據文件等
(3)執行構件:系統執行後得到的構件。

部署圖

表示系統中軟件和硬件的物理架構。
從部署圖中,可以了解到軟件和硬件組件之間的物理關係以及處理節點的組件分佈情況。使用部署圖可以顯示運行時系統的結構,同時還傳達構成應用程序的硬件和軟件元素的配置和部署方式。

包圖

在 UML 中用類似於文件夾的符號表示的模型元素的組合。包圖是一種維護和描述系統總體結構的模型的重要建模工具,通過對包中各個包以及包之間關係的描述,展現出系統的模塊與模塊之間的依賴關係。
包圖的作用:包圖可以描述需求,設計的高階概況;包圖通過合理規劃自身功能反應系統的高層架構,在邏輯上將系統進行模塊化分解;包圖最終是組織源碼的方式。
一個包圖可以由任何一種UML圖組成,通常是UML用例圖或是UML類圖。
包被描述成文件夾,可以用於UML任何一種的圖上。
包圖只是把某些類放在一個包中,因此可以看做是類圖的一種。