UML類圖
「左耳朵梵高」 總第11期
寫在最前面的話
聲明:本文部分資料摘自
維基百科
,還有我多年工作的積累和總結。本文很適合作爲一個工具,就當是一本UML說明書,請記得收藏哦,在需要用的時候方便查閱。
什麼是UML
維基百科對UML的定義:
UML(Unified Modeling Language)是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法。UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟件架構層次已經被驗證有效。
這個語言由葛來迪·布區,伊瓦爾·雅各布森與詹姆士·蘭寶於1994年至1995年間,在Rational Software公司中開發,於1996年,又進一步發展。UML集成了Booch,OMT和麪向對象程序設計的概念,將這些方法融合爲單一的,通用的,並且可以廣泛使用的建模語言。UML打算成爲可以對併發和分佈式系統的標準建模語言。
UML並不是一個工業標準,但在Object Management Group的主持和資助下,UML正在逐漸成爲工業標準。OMG之前曾經呼籲業界向其提供有關面向對象的理論及實現的方法,以便製作一個嚴謹的軟件建模語言(Software Modeling Language)。有很多業界的領袖亦真誠地迴應OMG,幫助它創建一個業界標準。
從維基百科的定義中,可以總結出幾個關鍵點:
-
UML是一個軟件建模語言。是一個事實上的工業標準;
-
UML用於提供面向對象設計的理論和實現方法;
-
UML提供了一系列最佳工程實踐,在系統建模、軟件架構設計層次十分有效。
進一步,我們可以總結出幾個關鍵字:軟件建模語言
、工業標準
、面向對象
、系統建模
、架構設計
、最佳時間
。
在UML系統開發中有三個主要的模型:
-
功能模型 :從用戶的角度展示系統的功能,包括用例圖。
-
對象模型 :採用對象,屬性,操作,關聯等概念展示系統的結構和基礎,包括類圖、對象圖。
-
動態模型 :展現系統的內部行爲。包括序列圖,活動圖,狀態圖。
UML包含了一系列的圖,最常用的有用例圖、類圖、時序圖等。本文只會涉及類圖 ,其它的圖形將在以後的文章中進行介紹。
UML類圖詳解
類描述
類 在UML中通常以實線矩形框表示。矩形框中有若干分割線。分別表示類名、屬性和方法。如下圖所示:
-
類名
:圖中最上面的矩形框中爲類名。如果字體爲斜體 ,表示爲抽象類 。(圖中的上面部分) -
屬性
:類名下邊的區域。(圖中的中間部分) -
方法
:(圖中的下面部分)
說明:屬性和方法前面的“+”、“-”和“#”表示訪問級別:
-
+
:public -
-
:private -
#
:protected
接口描述
接口 的類圖表述與類大致相同,不同的是接口名要添加 Interface
標識,且行爲的可見性必須用 "+" 表示。如下圖:
類和類之間的關係
類之間有六種關係:
-
繼承
-
實現
-
關聯
-
依賴
-
組合
-
聚合
繼承(Inherit)
繼承 是面嚮對象語言的三大特性(封裝,繼承,多態)之一。子類繼承父類。
UML類圖中繼承關係使用空心三角形+實線表示。
實現(Implement)
實現 與繼承類似,實現類繼承接口中的方法。
UML類圖中實現關係使用空心三角形+虛線表示。
關聯
依賴關係通常表現爲類的私有屬性。
// 企鵝類
public class Penguin {
// 天氣類
private Climate climate;
}
其UML類圖表示如下:
UML類圖中關聯使用實線箭頭表示。
依賴
依賴 關係體現爲局部變量、方法的形參,或者對靜態方法的調用。
public class Programmer {
public void work(Computer computer){
}
}
UML類圖中依賴關係使用虛線箭頭表示。
以下代碼展示了依賴關係的三種具體代碼實現:局部變量、方法的形參和對靜態方法的調用。
public class Person{
public void doSomething1(){
Car car = new Car();//局部變量
...
}
public void doSomething2(Car car){//方法參數
...
}
public void doSomething3(){
int price = Car.do();//靜態方法調用
}
}
組合
組合 是關聯關係的一種,表示一種強的“擁有”關係。體現了嚴格的部分和整體的關係。部分和整體的生命週期一樣。
public class Bird {
private Wing wing;
public Bird() {
this.wing = new Wing();
}
}
UML類圖中組合關係使用實心菱形+實線表示。
聚合
聚合 是關聯關係的一種,表示一種弱的“擁有”關係。
用Java代碼表示大雁是羣居動物,每隻大雁都屬於一個雁羣,一個雁羣可以有多隻大雁。
天氣涼了,樹葉黃了。
。。。
一羣大雁往南飛,一會排成“S”字,一會排成“B”字。
——《秋天》出自人教版小學語文一年級課文
public class WildGooseAggregate {
private List<WildGoose> wideGooses;
}
UML類圖中聚合關係使用空心菱形實線表示。
All in One的例子
前面介紹了類之間的6種關係。爲了更好地理解這6種關係。下面使用一個完整的例子(汽車)。該示例中包含了這6種關係。
說明:
-
車的類圖結構爲,表示車是一個抽象類;
-
它有兩個繼承類:小汽車和自行車;它們之間的關係爲實現 關係,使用帶空心箭頭的虛線表示;
-
小汽車爲與SUV之間也是繼承 關係,它們之間的關係爲泛化關係,使用帶空心箭頭的實線表示;
-
小汽車與發動機之間是組合 關係,使用帶實心箭頭的實線表示;
-
學生與班級之間是聚合 關係,使用帶空心箭頭的實線表示;
-
學生與身份證之間爲關聯 關係,使用一根實線表示;
-
學生上學需要用到自行車,與自行車是一種依賴 關係,使用帶箭頭的虛線表示;
我是左耳朵梵高,北理工畢業,現任某金融諮詢公司首席架構師,曾在阿里巴巴中間件團隊任職。沉浸軟件行業十餘年,相信技術能改變世界。譯有《你真的會寫代碼嗎?》
堅持輸出技術乾貨,職場心得和讀書感悟。歡迎關注公衆號左耳朵梵高 ,和我一起持續學習,終生成長。