UML:統一建模語言(Unified Modeling Language)。在 UML 系統開發中有三個主要的模型:java
如下主要總結開發過程當中經常使用的類圖和時序圖,及類之間的各類關係。node
類圖使用類來描述系統的靜態結構,類圖包含類和它們之間的關係,它描述系統內所聲明的類,但它沒有描述系統運行時類的行爲。git
在UML類圖中,類通常由三部分組成:github
關聯關係(Association)是類與類之間最經常使用的一種關係,它是一種結構化關係,用於表示一個類對象與另外一個類對象之間有聯繫。併發
在 UML 類圖中,用實線鏈接有關聯的對象所對應的類。在實現關聯關係時,一般將一個類的對象做爲另外一個類的屬性。函數
類的關聯關係能夠是單向的,單向關聯用帶箭頭的實線表示。工具
public class Customer { private Address address; …… } public class Address { …… }
默認狀況下,關聯是雙向的。oop
public class Customer { private Product[] products; …… } public class Product { private Customer customer; …… }
在系統中可能會存在一些類的屬性對象類型爲該類自己,這種特殊的關聯關係稱爲自關聯。this
重數性關聯關係又稱爲多重性關聯關係(Multiplicity),表示一個類的對象與另外一個類的對象鏈接的個數。在 UML 中多重性關係能夠直接在關聯直線上增長一個數字表示與之對應的另外一個類的對象的個數。spa
表示方式 | 多重性說明 |
---|---|
1..1 | 表示另外一個類的一個對象只與一個該類對象有關係 |
0..* | 表示另外一個類的一個對象與零個或多個該類對象有關係 |
1..* | 表示另外一個類的一個對象與一個或多個該類對象有關係 |
0..1 | 表示另外一個類的一個對象沒有或只與一個該類對象有關係 |
m..n | 表示另外一個類的一個對象與最少m、最多n個該類對象有關係 (m<=n) |
聚合關係(Aggregation)表示一個總體與部分的關係。一般在定義一個總體類後,再去找出這個總體類的一些成員類,該總體類和成員類之間就造成了聚合關係。
在聚合關係中,成員類是總體類的一部分,即成員對象是總體對象的一部分,可是成員對象能夠脫離總體對象獨立存在。在 UML 中,聚合關係用帶空心菱形的直線表示。
public class Car { private Engine engine; public Car(Engine engine) { this.engine = engine; } public void setEngine(Engine engine) { this.engine = engine; } …… } public class Engine { …… }
組合關係(Composition)也表示類之間總體和部分的關係,可是組合關係中部分和總體具備統一的生存期。一旦總體對象不存在,部分對象也將不存在,部分對象與總體對象之間具備同生共死的關係。
在組合關係中,成員類是總體類的一部分,並且總體類能夠控制成員類的生命週期,即成員類的存在依賴於總體類。在UML中,組合關係用帶實心菱形的直線表示。
public class Head { private Mouth mouth; public Head() { mouth = new Mouth(); } …… } public class Mouth { …… }
依賴關係(Dependency)是一種使用關係,特定事物的改變有可能會影響到使用該事物的其餘事物,在須要表示一個事物使用另外一個事物時使用依賴關係。大多數狀況下,依賴關係體如今某個類的方法使用另外一個類的對象做爲參數。
在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
public class Driver { public void drive(Car car) { car.move(); } …… } public class Car { public void move() { ...... } …… }
泛化關係(Generalization)也就是繼承關係,也稱爲「is-a-kind-of」關係,泛化關係用於描述父類與子類之間的關係,父類又稱做基類或超類,子類又稱做派生類。在 UML 中,泛化關係用帶空心三角形的直線來表示。
實現關係(Realization)是類實現了接口,類中的操做實現了接口中所聲明的操做。在UML中,類與接口之間的實現關係用帶空心三角形的虛線來表示。
時序圖用於表示對象之間的交互,重點表示對象之間發送消息的時間順序。它以圖形化的方式描述了在一個用例或操做的執行過程當中對象如何經過消息相互交互,說明了消息如何在對象之間被髮送和接收以及發送的順序。時序圖容許直觀地表示出對象的生存期,在生存期內,對象能夠對輸入消息作出響應,還能夠發送信息。
一個複雜的時序圖能夠劃分爲幾個小塊,每個小塊稱爲一個交互片斷(Interaction Fragment)。每一個交互片斷由一個大方框包圍,在方框左上角的間隔區內標註該交互片斷的操做類型,該操做類型用操做符表示,經常使用的操做符包括:
開發過程當中須要繪製類圖和時序圖,經常使用的軟件有:StarUML,PowerDesigner 等,在線的有:ProcessOn。這裏我最經常使用的是 StarUML,由於它顏值高~~~
StarUML 是一款收費軟件,但它的破解頗有意思。在安裝 StarUML 的 www/license/node
目錄下,找到 LicenseManagerDomain.js,在校驗函數中直接返回用戶信息便可。
在繪製類之間的關係時,對應 UML 的工具以下圖所示:
其中實現的關係,要達到帶空心三角形的虛線表示,則不要使用這個 Interface Realization,而應該在 Composite Structure 目錄下找到 Realization 的工具。
在繪製時序圖的時候,會趕上選擇,循環等複雜的表示,StarUML 能夠利用組合片斷來完成。
本文發表於我的博客:http://lavnfan.github.io/,歡迎指教。