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