UML 類圖真的很重要,十分鐘帶你掌握!
在日常開發(fā)中,我們經(jīng)常會通過 UML 圖形化的方式,幫助開發(fā)人員和業(yè)務分析師進行需求分析、系統(tǒng)設計和文檔編制,這篇文章,我們將來重點分析 UML 類圖。
什么是UML?
UML,Unified Modeling Language 統(tǒng)一建模語言,它是可視化軟件系統(tǒng)設計的標準方法,UML 是一種經(jīng)典的建模語言,包含了系統(tǒng)論、工程思想,以及架構學的元素。
UML 包含多種圖表,用于表示系統(tǒng)的不同方面,以下是主要的 UML 圖表類型:
- 用例圖(Use Case Diagram):描述系統(tǒng)功能及其與外部實體(如用戶或其他系統(tǒng))的交互。
- 類圖(Class Diagram):描述系統(tǒng)的靜態(tài)結構,包括類、屬性、方法及類之間的關系。
- 對象圖(Object Diagram):展示特定時刻系統(tǒng)中對象的實例及其關系,通常是類圖的實例化。
- 順序圖(Sequence Diagram):顯示對象之間按時間順序進行的交互,強調(diào)消息的發(fā)送和接收。
- 通信圖(Communication Diagram):又稱協(xié)作圖,展示對象之間的交互,強調(diào)對象之間的連接和消息流。
- 狀態(tài)圖(State Diagram):描述對象在其生命周期中所經(jīng)歷的狀態(tài)變化及狀態(tài)之間的轉移。
- 活動圖(Activity Diagram):描述系統(tǒng)中的活動流程,強調(diào)并行和分支控制流。
- 組件圖(Component Diagram):描述系統(tǒng)的物理組件及其相互關系,通常用于顯示代碼結構。
- 部署圖(Deployment Diagram):描述系統(tǒng)的物理部署架構,包括硬件節(jié)點及其之間的通信關系。
- 包圖(Package Diagram):組織類和其他模型元素,展示系統(tǒng)的包及其依賴關系。
- 定時圖(Timing Diagram):描述對象狀態(tài)或條件隨時間變化的圖表,常用于實時系統(tǒng)建模。
什么是 UML 類圖?
UML Class Diagram(UML 類圖),它是 UML 中使用最廣泛的一種,提供了面向對象系統(tǒng)的靜態(tài)視圖,展示了它的類、屬性、方法以及對象之間的關系。
在本文中,我們將探討 UML 類圖的構建塊、如何表示它們、不同類型的類關系,并為每種表示形式提供真實世界的示例。
UML 類圖的組成
UML 類圖由以下構建基塊組成:
- Class(類)
- Attributes(屬性)
- Methods(方法)
- Interfaces(接口)
- Abstract Class(抽象類)
- Enumeration(枚舉)
1.Class
類是定義對象的屬性和行為的藍圖或模板。
如下示例,有一個 BankAccount 類以及用 UML 類圖表示方式:
public class BankAccount {
private String accountNumber;
protected double balance;
public void deposit(double amount) {
this.balance = amount;
}
public void withdraw(double amount) {
balance += amount;
}
private void updateBalance(double amount) {
balance += amount;
}
String getAccountInfo() {
return accountNumber;
}
}
類表示為矩形,分為三個區(qū)間:
- 頂部:表示類的名稱,類的唯一標識符(例如,BankAccount);
- 中間:表示與類關聯(lián)的屬性或數(shù)據(jù)(例如,accountNumber、balance);
- 底部:表示類對象可以執(zhí)行的方法(例如,deposit()、updateBalance());
可見性標記:可見性標記指示類中屬性和方法的可訪問權限,可見性通常有以下 4種:
- + (Public):可以從任何類訪問屬性或方法。
- - (Private):屬性或方法只能在同一類中訪問。
- # (Protected):屬性或方法在同一類及其子類中是可訪問的。
- ~(Package):屬性或方法在同一包中是可訪問的。
2.Attributes
UML 類圖中的屬性表示類的屬性或數(shù)據(jù)字段。
屬性的定義通常為下面的形式:
- username : String
- -:代表屬性的訪問權限。
- username:代表屬性的名稱。
- String:代表屬性的數(shù)據(jù)類型。
如下示例,有一個 Person類,以及用 UML 類圖表示方式:
public class Person {
private String name;
protected int age;
public String email;
String phoneNumber = "187xxxx1234";
}
2.Methods
UML 類圖中的方法(或操作)表示類可以執(zhí)行的功能或行為。
屬性的定義通常為下面的形式:
+ sum(int a, int b): int
- +,代表屬性的訪問權限;
- sum:代表方法的名稱;
- (int a, int b),代表參數(shù)列表,以逗號分隔的參數(shù)列表,每個參數(shù)都指定為名稱和類型;
- int,代表方法返回的數(shù)據(jù)類型。
如下示例,展示一個 Person類中 4種訪問權限的方法:
3.Interfaces
接口被描述為一個類矩形,接口名稱上方帶有關鍵字 ?interface?,接口中的方法大部分上是抽象的,但是也有一些 default 方法。
如下示例,定義了一個 Drawable 接口,以及用 UML 類圖表示的方式:
public interface Drawable {
public void draw();
private void erase(){ }
}
4.Abstract Class
抽象類是無法實例化的類,在 UML 中的抽象類用斜體表示類名,在類名上方用關鍵字 《abstract》表示。類中的抽象方法通常也以斜體顯示。
如下示例,定義了一個 Shape 抽象類,以及用 UML 類圖表示的方式:
public abstract class Shape {
public double area;
public abstract double getArea();
}
5.Enumeration
枚舉是一種數(shù)據(jù)類型,用于定義一組命名值(例如,顏色、星期、月份等)。在 UML 類圖中,在枚舉名稱上方用關鍵字 ?enumeration? 表示,枚舉的值列在類框中。
如下示例,定義了一個 Color 枚舉,以及用 UML 類圖表示的方式:
public enum Color {
RED, GREEN, BLUE
}
UML 類圖中的關系
在 UML 類圖中,類之間的關系主要有以下 6種類型:
- Association(關聯(lián))
- Aggregation(聚合)
- Composition(組合)
- Inheritance(繼承)
- Implementation(實現(xiàn))
- Dependency(依賴)
這六種關系的箭頭如下所示:
1.Association
Association(關聯(lián)),表示兩個類之間的 uses-a 關系,其中一個類使用另一個類或與另一個類交互。
如下示例:學生班級與課程班級相關聯(lián),因為學生可以注冊多個課程。
2.Aggregation
Aggregation(聚合),表示 has-a關系, 一個類(整體)包含另一個類(部分),但包含的類可以獨立存在。
如下示例:Car 類具有 Engine 類,但 Engine 類可以在沒有 Car 類的情況下存在。
3.Composition
Composition(組成),代表了一種強烈的 has-a 關系,在這種關系中,沒有整體,部分就無法存在。如果整體被破壞,部分也被破壞。
如下示例:House 類由 Room 類組成,但 Room 類不能沒有 House 類而存在。
4.Inheritance
Inheritance(繼承或泛化),表示一種 is-a 關系,其中一個類(子類)繼承另一個類(超類)的屬性和方法。
如下示例:Dog 類和 Cat 類繼承自 Animal 類,因為狗和貓都是動物。
5.Implementation
Implementation(實現(xiàn)),表示類和接口之間的關系,其中類實現(xiàn)接口中聲明的方法。
示例:Rectangle 類和 Circle 類實現(xiàn)了 Shape 接口,該接口聲明了 getArea() 方法。
6.Dependency
Dependency(依賴),代表一種 uses 關系,其中一個類別的變化可能會影響另一個類別。
如下示例:Customer 類使用 Order 類下訂單。
最后,我們再對上面幾種關系給出一個全面的示例:
總結
UML 類圖是軟件工作中很重要的一個知識點,作為程序員,我們一定要掌握,最后對 UML 類圖做個總結:
UML 類圖由以下構建基塊組成:
- Class(類)
- Attributes(屬性)
- Methods(方法)
- Interfaces(接口)
- Abstract Class(抽象類)
- Enumeration(枚舉)
類之間的關系主要有以下 6種類型:
- Association(關聯(lián))
- Aggregation(聚合)
- Composition(組合)
- Inheritance(繼承)
- Implementation(實現(xiàn))
- Dependency(依賴)