類圖,是UML(統一建模語言)中用於描述"類"以及"類與類"之間的示意圖。它形象的描述出了系統的結構,幫助人們理解系統。
類圖是在"全部的UML圖"中,實用頻率很是之高;掌握它對於咱們軟件設計,以及交流都頗有幫助。html
對於類圖而言,它的基本單位是類。類主要由三部分組成:類名、屬性、操做(函數)。UML類的表示大體以下:node
類的名稱ide
UML類圖中,屬性的基本格式: 可見性 名稱: 類型 [=缺省值]函數
可見性 -- 表示該屬性對於類外的元素而言是否可見。工具
主要包括公有(public)、私有(private)、受保護(protected)以及包內可見(package private)四種,在類圖中分別用符號+、-、#和~表示。ui
UML中可見性和符號的對應關係以下所示:this
可見性 | 符號 |
---|---|
public | + |
package private | ~ |
protected | # |
private | - |
在PlantUML中的表示形式以下圖所示:設計
UML類圖中,屬性的基本格式: 可見性 名稱(參數類表) [:返回類型]指針
實體類的UML表示code
實體類在UML用類名錶示。在PlantUML中實體類用 「帶圓圈的C + 類名」 表示。
抽象類的UML表示
抽象類和實體類的UML表示法相似。區別是: "抽象類的類名是斜體",而"實體類的類名不是斜體";在PlantUML中用 「帶圓圈的A + 斜體類名」 表示。
接口的UML表示
在UML中,經過在"類名"位置添加「interface」 關鍵字來表示接口。在PlantUML中用 「帶圓圈的I + 斜體類名」 表示。
"實體類", "抽象類", "接口"在PlantUML中的表示以下圖:
在UML類圖中,關係能夠分爲4種: 泛化, 實現, 關聯 和 依賴。
這幾種關係表示的"類與類之間關係的強弱順序"是:泛化 = 實現 > 關聯 > 依賴
【關係說明】: 泛化是一種繼承關係。它指定了子類如何特化父類的全部特徵和行爲。例如:老虎是動物的一種。
【代碼說明】: 父類與子類。
【UML圖形】: 帶三角箭頭的實線,箭頭指向父類。
【示例】: Fruit是"水果";Apple是"蘋果",它繼承了Fruit,是水果中的一種。
示例代碼:
public class Fruit { protected int price; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } } public class Apple extends Fruit {}
UML示例圖:(如下全部的示例均是用PlantUML繪製而成,PlantUML使用手冊可參看考:PlantUML參考指南 )
【關係說明】: 實現是一種類與接口的關係,表示類是接口全部特徵和行爲的實現。
【代碼說明】: 實現類與接口。
【UML圖形】: 帶三角箭頭的虛線,箭頭指向接口。
【示例】: Runnable接口表示"一個任務",TimeTask是"計時任務",它實現了Runnable接口。
示例代碼:
public interface Runnable { abstract public void run(); } public class TimeTask implements Runnable { @Override public void run() { } }
UML示例圖:
關聯表示"類與類之間的擁有關係"。即,一個類是另外一個類的成員。關聯包括:自關聯, 單向關聯, 雙向關聯, 多重性關聯, 聚合, 組合。
【關係說明】: 一個類包含本身。例如,單向鏈表中的節點,包含下一個節點的信息。
【代碼說明】: 成員變量
【UML圖形】: 帶普通箭頭的實心線,指向被本身。
【示例】: Node是單向鏈表中的節點,它包含下一個節點的指針。
示例代碼:
public class Node { private Node node; }
UML示例圖:
【關係說明】: "類A"中有"類B"成員變量,"類B"中沒有"類A"成員變量。
【代碼說明】: 成員變量
【UML圖形】: 帶普通單向箭頭的實心線,指向被擁有者。
【示例】: Person表示"人",IdCard表示"身份證信息",身份證包括id和"身份證編號snum"。一我的擁有惟一的身份證信息。
示例代碼:
public class Person { private IdCard idcard; } public class IdCard { private int id; private String snum; }
UML示例圖:
【關係說明】: "類A"中有"類B"成員變量,"類B"也有"類A"成員變量。
【代碼說明】: 成員變量
【UML圖形】: 帶普通雙向箭頭的實心線 或者 不帶箭頭的實心線。
【示例】: Cusomer表示"客戶",Product表示"產品"。客戶能夠購買產品,產品也屬於客戶。
示例代碼:
public class Customer { private Address address; } public class Address { private Customer customer; }
UML示例圖:
【關係說明]】: 聚合是總體與部分的關係。聚合關係是類與類之間關係比較密切的關聯關係;要區分聚合和其它的關聯關係,必須考察具體的邏輯關係。在聚合關係中,成員對象是總體對象的一部分,可是成員對象能夠脫離總體對象獨立存在。如車和輪胎是總體和部分的關係。
【代碼說明】: 成員變量
【UML圖形】: 帶空心菱形的實心線,菱形指向總體
【示例】: Car表示"汽車",Tire表示"輪胎"。"輪胎"自己是個獨立個體。
示例代碼:
public class Car { private Tire tire; } public class Tire { private double radius; private double perimeter; }
UML示例圖:
【關係說明】: 組合是總體與部分的關係。組合關係是比聚合關係還要強的關聯關係。可是在組合關係中總體對象能夠控制成員對象的生命週期,一旦總體對象不存在,成員對象也將不存在,成員對象與總體對象之間具備同生共死的關係。例如,身體和鼻子,身體包括鼻子,鼻子不能脫離身體而獨立存在。
【代碼說明】: 成員變量
【UML圖形】: 帶實心菱形的實線,菱形指向總體
【示例】: Body表示"身體",Nose表示"鼻子"。身體包含鼻子,鼻子離不開身體。
示例代碼:
public class Body { private Nose nose; private class Nose { } }
UML示例圖:
【關係說明】: 依賴是一種使用的關係。在須要表示一個事物使用另外一個事物時使用依賴關係,儘可能不使用雙向的互相依賴。
【代碼說明】: 局部變量、方法的參數或者對靜態方法的調用
【UML圖形】: 帶箭頭的虛線,指向被使用者
【示例】: 人過河。人是"Person"類,它包括過河函數acrossRiver(),acrossRiver()的參數是過河工具,返回值是過河時間。此處的過河工具是船,船對應的類是Boat。
示例代碼:
public class Person { public int acrossRiver(Boat boat); } public class Boat { }
UML示例圖: