UML類(lèi)圖簡(jiǎn)單介紹

UML類(lèi)圖用來(lái)定義系統(tǒng)中的類(lèi),包括描述類(lèi)的結(jié)構(gòu)和類(lèi)之間的關(guān)系。類(lèi)圖的主要作用于描述系統(tǒng)的靜態(tài)結(jié)構(gòu)
先看一張圖(圖片截取自AmaterasUML):

實(shí)體

類(lèi)

組成

一般包含3個(gè)組成部分:類(lèi)名、屬性、方法
類(lèi)的性質(zhì)可以放在第四部分
如果類(lèi)中含有內(nèi)部類(lèi),則會(huì)出現(xiàn)下一個(gè)組成部分
類(lèi)名部分是不能省略的,其他組成部分可以省略

書(shū)寫(xiě)規(guī)范
類(lèi)名:正體字說(shuō)明類(lèi)是可被實(shí)例化的,斜體字說(shuō)明類(lèi)為抽象類(lèi)。
屬性:<修飾符> <<描述信息>> <屬性名>: <類(lèi)型>
方法:<修飾符> <<描述信息>> <方法名> (<參數(shù):類(lèi)型 ...>): <返回類(lèi)型>

修飾符:+表示public;-表示private;#表示protected;省略表示包可見(jiàn)性。
如果屬性/方法具有下劃線,則說(shuō)明它是靜態(tài)的。
描述信息使用 << >> 包裹。
類(lèi)的性質(zhì)是由一個(gè)屬性、一個(gè)賦值方法和一個(gè)取值方法組成。

栗子
public class TaxCalculator {        
    private long taxRate ;  
    private int salary;  

    public TaxCalculator(long taxRate) {  
        this.taxRate = taxRate ;  
    }  
    
    public long countTax() {  
        return taxRate * salary;  
    }  
 
    public int getSalary() {  
        return salary;  
    }  
    
    public void setSalary(int salary) {  
        this.salary = salary;  
    }
}

接口

接口是一系列操作的集合,它指定了提供的一系列服務(wù)。它直接對(duì)應(yīng)于Java中的一個(gè)接口類(lèi)型。接口的表示有大概兩種方式。具體畫(huà)法如下:

public interface TaxCalculator  
{ 
    public long countTax();  
    public int getSalary();  
    public void setSalary(int salary);  
}   

當(dāng)然也有這樣的畫(huà)法:

關(guān)系

依賴(lài)(Dependency)

依賴(lài)是一種弱關(guān)聯(lián),只要一個(gè)類(lèi)用到另一個(gè)類(lèi),但是和另一個(gè)類(lèi)的關(guān)系不是太明顯的時(shí)候,就可以使用依賴(lài)關(guān)系

【依賴(lài)關(guān)系】:是一種使用的關(guān)系,即一個(gè)類(lèi)的實(shí)現(xiàn)需要另一個(gè)類(lèi)的協(xié)助,所以要盡量不使用雙向的互相依賴(lài)
【代碼表現(xiàn)】:局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用
【箭頭及指向】:帶箭頭的虛線,指向被使用者

關(guān)聯(lián)(Association)

表示類(lèi)與類(lèi)之間的連接。它使一個(gè)類(lèi)的可見(jiàn)屬性和方法被另一個(gè)類(lèi)使用。是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴(lài)關(guān)系,不存在依賴(lài)關(guān)系的偶然性、臨時(shí)性。一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的

【關(guān)聯(lián)關(guān)系】:是一種擁有的關(guān)系,它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法;關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)的箭頭是可選的,單向的箭頭指向遍歷或者查詢的方向。
【代碼體現(xiàn)】:成員變量
【箭頭及指向】:帶普通箭頭的實(shí)心線,指向被擁有者

在關(guān)聯(lián)關(guān)系中可以使用附加的基數(shù)來(lái)說(shuō)明類(lèi)之間對(duì)應(yīng)的個(gè)數(shù):

基數(shù) 含義
0..1 零個(gè)或者一個(gè)實(shí)例
0..* 沒(méi)有限制,任意
* 沒(méi)有限制,任意
1 有且只能一個(gè)實(shí)例
1..* 至少有一個(gè)實(shí)例

注意:一個(gè)關(guān)聯(lián)關(guān)系往往是聚合關(guān)系或者是合成關(guān)系。

泛化(Generalization)

表示類(lèi)與類(lèi)、接口與接口之間的繼承關(guān)系。

【泛化關(guān)系】:是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類(lèi)如何特化父類(lèi)的所有特征和行為。
【代碼體現(xiàn)】:父類(lèi)與子類(lèi)(extends)
【箭頭指向】:帶三角箭頭的實(shí)線,箭頭指向父類(lèi)

實(shí)現(xiàn)(Realization)

實(shí)現(xiàn)關(guān)系指定兩個(gè)實(shí)體之間的一個(gè)合同。換言之,一個(gè)實(shí)體定義一個(gè)合同,而另一個(gè)實(shí)體保證履行該合同。

【實(shí)現(xiàn)關(guān)系】:是一種類(lèi)與接口的關(guān)系,表示類(lèi)是接口所有特征和行為的實(shí)現(xiàn)
【代碼體現(xiàn)】:接口與實(shí)現(xiàn)類(lèi)(implements)
【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口

聚合(Aggregation)

聚合是關(guān)聯(lián)的一種形式,代表兩個(gè)類(lèi)之間的整體/局部關(guān)系,他體現(xiàn)的是一種has-a的關(guān)系。聚合暗示著整體在概念上處于比局部更高的一個(gè)級(jí)別,而關(guān)聯(lián)暗示兩個(gè)類(lèi)在概念上位于相同的級(jí)別。聚合還暗示著實(shí)例圖中不存在回路,換言之,只能是一種單向關(guān)系。

【聚合關(guān)系】:整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在,可以具有各自的生命周期。關(guān)聯(lián)和聚合的區(qū)別純粹是概念上的,在Java語(yǔ)法上無(wú)法分辨。
【代碼體現(xiàn)】:成員變量
【箭頭及指向】:帶空心菱形的實(shí)心線,菱形指向整體

組合(Composite)

組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦。組合關(guān)系是不能共享的。

【組合關(guān)系】:是整體與部分的關(guān)系,但部分不能離開(kāi)整體而單獨(dú)存在。它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。
【代碼體現(xiàn)】:成員變量
【箭頭及指向】:帶實(shí)心菱形的實(shí)線,菱形指向整體

總結(jié)

關(guān)系總結(jié)

泛化:表示類(lèi)與類(lèi)之間的繼承關(guān)系、接口與接口之間的繼承關(guān)系;
實(shí)現(xiàn):表示類(lèi)對(duì)接口的實(shí)現(xiàn);
依賴(lài):當(dāng)類(lèi)與類(lèi)之間有使用關(guān)系時(shí)就屬于依賴(lài)關(guān)系,不同于關(guān)聯(lián)關(guān)系,依賴(lài)不具有“擁有關(guān)系”,而是一種“相識(shí)關(guān)系”,只在某個(gè)特定地方(比如某個(gè)方法體內(nèi))才有關(guān)系。
關(guān)聯(lián):表示類(lèi)與類(lèi)或類(lèi)與接口之間的依賴(lài)關(guān)系,表現(xiàn)為“擁有關(guān)系”;具體到代碼可以用實(shí)例變量來(lái)表示;
聚合:屬于關(guān)聯(lián)的特殊情況,體現(xiàn)部分-整體關(guān)系,是一種弱擁有關(guān)系;整體和部分可以有不一樣的生命周期;
組合:屬于關(guān)聯(lián)的特殊情況,體現(xiàn)部分-整體關(guān)系,是一種強(qiáng)“擁有關(guān)系”

關(guān)系強(qiáng)弱

泛化=實(shí)現(xiàn)>組合>聚合>關(guān)聯(lián)>依賴(lài)

畫(huà)法

繼承、實(shí)現(xiàn)是三角型箭頭,其他都為箭頭
組合、聚合都有一個(gè)菱形端,且都為實(shí)線,其他都無(wú)菱形端
繼承是實(shí)線,實(shí)現(xiàn)是虛線;關(guān)聯(lián)是實(shí)線,依賴(lài)是虛線
箭頭:指向父類(lèi)或接口、依賴(lài)物、子元素。

看個(gè)經(jīng)典例子

說(shuō)明:

實(shí)現(xiàn):空心圓+直線(唐老鴨類(lèi)實(shí)現(xiàn)了‘講人話’);
實(shí)現(xiàn):空心三角形+虛線(實(shí)現(xiàn)大雁飛翔的接口);
依賴(lài):虛線+箭頭(動(dòng)物和空氣的關(guān)系);
關(guān)聯(lián):實(shí)線+箭頭(企鵝需要知道氣候才遷移);
聚合:空心四邊形+實(shí)線+箭頭(雁群和大雁的關(guān)系);
合成/組合:實(shí)心四邊形+實(shí)線+箭頭(鳥(niǎo)和翅膀的關(guān)系);
泛化/繼承:空心三角形+實(shí)線(動(dòng)物和鳥(niǎo)的繼承關(guān)系)。

想要具體剖析本圖,請(qǐng)查看這里PS:文中圖片來(lái)自于網(wǎng)絡(luò),侵刪。

參考

UML類(lèi)圖介紹及畫(huà)法
UML類(lèi)圖幾種關(guān)系的總結(jié)
UML類(lèi)圖關(guān)系
UML類(lèi)圖實(shí)例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容