UML類圖(繼承、實現(xiàn)、關聯(lián)、依賴、組合、聚合),你還傻傻分不清嗎?

UML類圖


image

「左耳朵梵高」 總第11期


寫在最前面的話

聲明:本文部分資料摘自維基百科,還有我多年工作的積累和總結。本文很適合作為一個工具,就當是一本UML說明書,請記得收藏哦,在需要用的時候方便查閱。

什么是UML

維基百科對UML的定義:

UML(Unified Modeling Language)是一種開放的方法,用于說明、可視化、構建和編寫一個正在開發(fā)的、面向對象的、軟件密集系統(tǒng)的制品的開放方法。UML展現(xiàn)了一系列最佳工程實踐,這些最佳實踐在對大規(guī)模,復雜系統(tǒng)進行建模方面,特別是在軟件架構層次已經被驗證有效。

這個語言由葛來迪·布區(qū),伊瓦爾·雅各布森與詹姆士·蘭寶于1994年至1995年間,在Rational Software公司中開發(fā),于1996年,又進一步發(fā)展。UML集成了Booch,OMT和面向對象程序設計的概念,將這些方法融合為單一的,通用的,并且可以廣泛使用的建模語言。UML打算成為可以對并發(fā)和分布式系統(tǒng)的標準建模語言。

UML并不是一個工業(yè)標準,但在Object Management Group的主持和資助下,UML正在逐漸成為工業(yè)標準。OMG之前曾經呼吁業(yè)界向其提供有關面向對象的理論及實現(xiàn)的方法,以便制作一個嚴謹?shù)能浖UZ言(Software Modeling Language)。有很多業(yè)界的領袖亦真誠地回應OMG,幫助它創(chuàng)建一個業(yè)界標準。

從維基百科的定義中,可以總結出幾個關鍵點:

  • UML是一個軟件建模語言。是一個事實上的工業(yè)標準;

  • UML用于提供面向對象設計的理論和實現(xiàn)方法;

  • UML提供了一系列最佳工程實踐,在系統(tǒng)建模、軟件架構設計層次十分有效。

進一步,我們可以總結出幾個關鍵字:軟件建模語言、工業(yè)標準、面向對象、系統(tǒng)建模架構設計、最佳時間。

在UML系統(tǒng)開發(fā)中有三個主要的模型:

  • 功能模型 :從用戶的角度展示系統(tǒng)的功能,包括用例圖。

  • 對象模型 :采用對象,屬性,操作,關聯(lián)等概念展示系統(tǒng)的結構和基礎,包括類圖、對象圖。

  • 動態(tài)模型 :展現(xiàn)系統(tǒng)的內部行為。包括序列圖,活動圖,狀態(tài)圖。

UML包含了一系列的圖,最常用的有用例圖、類圖、時序圖等。本文只會涉及類圖 ,其它的圖形將在以后的文章中進行介紹。

UML類圖詳解

類描述

在UML中通常以實線矩形框表示。矩形框中有若干分割線。分別表示類名、屬性和方法。如下圖所示:

image
  • 類名:圖中最上面的矩形框中為類名。如果字體為斜體 ,表示為抽象類 。(圖中的上面部分)

  • 屬性:類名下邊的區(qū)域。(圖中的中間部分)

  • 方法:(圖中的下面部分)

說明:屬性和方法前面的“+”、“-”和“#”表示訪問級別:

  • +:public

  • -:private

  • #:protected

接口描述

接口 的類圖表述與類大致相同,不同的是接口名要添加 Interface 標識,且行為的可見性必須用 "+" 表示。如下圖:

image

類和類之間的關系

類之間有六種關系:

  • 繼承

  • 實現(xiàn)

  • 關聯(lián)

  • 依賴

  • 組合

  • 聚合

image

繼承(Inherit)

繼承 是面向對象語言的三大特性(封裝,繼承,多態(tài))之一。子類繼承父類。

image

UML類圖中繼承關系使用空心三角形+實線表示。

實現(xiàn)(Implement)

實現(xiàn) 與繼承類似,實現(xiàn)類繼承接口中的方法。

image

UML類圖中實現(xiàn)關系使用空心三角形+虛線表示。

關聯(lián)

依賴關系通常表現(xiàn)為類的私有屬性。

// 企鵝類
public class Penguin {
  // 天氣類
  private Climate climate;
}

其UML類圖表示如下:

image

UML類圖中關聯(lián)使用實線箭頭表示。

依賴

依賴 關系體現(xiàn)為局部變量、方法的形參,或者對靜態(tài)方法的調用。

public class Programmer {
  public void work(Computer computer){
    
  }
}
image

UML類圖中依賴關系使用虛線箭頭表示。

以下代碼展示了依賴關系的三種具體代碼實現(xiàn):局部變量、方法的形參和對靜態(tài)方法的調用。

public class Person{
  public void doSomething1(){
    Car car = new Car();//局部變量
    ...
  }
  
  public void doSomething2(Car car){//方法參數(shù)
    ...
  }
  
  public void doSomething3(){
    int price = Car.do();//靜態(tài)方法調用
  }
}

組合

組合 是關聯(lián)關系的一種,表示一種強的“擁有”關系。體現(xiàn)了嚴格的部分和整體的關系。部分和整體的生命周期一樣。

public class Bird {
  private Wing wing;
  public Bird() {
    this.wing = new Wing();
  }
}
image

UML類圖中組合關系使用實心菱形+實線表示。

聚合

聚合 是關聯(lián)關系的一種,表示一種弱的“擁有”關系。

用Java代碼表示大雁是群居動物,每只大雁都屬于一個雁群,一個雁群可以有多只大雁。

天氣涼了,樹葉黃了。
。。。
一群大雁往南飛,一會排成“S”字,一會排成“B”字。
——《秋天》出自人教版小學語文一年級課文

public class WildGooseAggregate {
  private List<WildGoose> wideGooses;
}
image

UML類圖中聚合關系使用空心菱形實線表示。

All in One的例子

前面介紹了類之間的6種關系。為了更好地理解這6種關系。下面使用一個完整的例子(汽車)。該示例中包含了這6種關系。

image

說明:

  • 車的類圖結構為,表示車是一個抽象類;

  • 它有兩個繼承類:小汽車和自行車;它們之間的關系為實現(xiàn) 關系,使用帶空心箭頭的虛線表示;

  • 小汽車為與SUV之間也是繼承 關系,它們之間的關系為泛化關系,使用帶空心箭頭的實線表示;

  • 小汽車與發(fā)動機之間是組合 關系,使用帶實心箭頭的實線表示;

  • 學生與班級之間是聚合 關系,使用帶空心箭頭的實線表示;

  • 學生與身份證之間為關聯(lián) 關系,使用一根實線表示;

  • 學生上學需要用到自行車,與自行車是一種依賴 關系,使用帶箭頭的虛線表示;


每日一畫:鳶尾花

我是左耳朵梵高,北理工畢業(yè),現(xiàn)任某金融咨詢公司首席架構師,曾在阿里巴巴中間件團隊任職。沉浸軟件行業(yè)十余年,相信技術能改變世界。譯有《你真的會寫代碼嗎?》

堅持輸出技術干貨,職場心得和讀書感悟。歡迎關注公眾號左耳朵梵高 ,和我一起持續(xù)學習,終生成長。


推薦閱讀

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容