類圖及其關(guān)系實(shí)現(xiàn)

在面向?qū)ο缶幊讨校愂乾F(xiàn)實(shí)世界中一組具有相同特征的物體的抽象蔓肯。

首先我們應(yīng)該知道一個標(biāo)準(zhǔn)的類的圖例是什么樣子的乳幸。

類的示例

以上就是一個比較標(biāo)準(zhǔn)的類摔踱,它由類名、屬性和操作/方法組成滋觉。由上而下看:

  1. 第一部分是類名:一般由一個英文字符串組成签夭;
  2. 第二部分是屬性:它表示的類的成員變量,其表示方法為 可見性 名稱:類型[=缺省值]椎侠;
  3. 第三部分是操作:它也就是該類中的方法第租,其表示方法為可見性 名稱(參數(shù)列表)[:返回類型]

可見性:即 公有(Public)私有(Private)受保護(hù)(Protected) 三種我纪,在圖中分別由 +慎宾、 -# 表示;
[]里面的東西表示可有可無浅悉;

f完整類的圖例

接口

接口是一種特殊的趟据,它只能被實(shí)現(xiàn)。在UML中术健,接口是由類圖加上一個小圓圈表示的汹碱。

接口的圖例

操作部分元素同類的元素一致。

類圖關(guān)系

在類圖中荞估,一共包含了六個主要的關(guān)系:泛化咳促、組合、依賴勘伺、聚合跪腹、關(guān)聯(lián)、實(shí)現(xiàn)

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

關(guān)聯(lián)是一種結(jié)構(gòu)化關(guān)系飞醉。用于表示一個類的對象與另一個類的對象存在聯(lián)系冲茸。在實(shí)現(xiàn)兩個類的對象的關(guān)聯(lián)關(guān)系時,通常將一個類的對象作為另一個類的成員變量缅帘。

在UML中轴术,我們用實(shí)線連接有關(guān)聯(lián)關(guān)系的對象所對應(yīng)的類。其中钦无,在關(guān)聯(lián)關(guān)系中的關(guān)聯(lián)線上逗栽,我們可以標(biāo)注上角色名。

角色名表示了一個對象和被關(guān)聯(lián)對象之間的關(guān)系铃诬,通臣老荩可以用動詞表示。

關(guān)聯(lián)包含了雙向關(guān)聯(lián)趣席、單向關(guān)聯(lián)和自關(guān)聯(lián)兵志。

雙向關(guān)聯(lián)

在一般情況下,關(guān)聯(lián)都是雙向的宣肚。雙向關(guān)聯(lián)表示兩個對象都被對方所擁有想罕。比如:顧客(Customer)購買了商品(Product),也就是說此時顧客對象就擁有了該商品對象霉涨;那么反過來說此時這個商品對象也就對應(yīng)了這個顧客對象按价。

在UML中,我們可以用一條無箭頭的實(shí)線來表示雙向關(guān)聯(lián)關(guān)系笙瑟。

雙向關(guān)聯(lián)的圖例
public class Customer {
    private Product[] product;
}

public class Product {
    private Customer customer;
}

單向關(guān)聯(lián)

單向關(guān)聯(lián)關(guān)系表示只有一個對象擁有另一個對象楼镐,反之沒有

單向關(guān)聯(lián)的圖例
public class Customer { 
    private Address address;  
}  
  
public class Address {
}  

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

自關(guān)聯(lián)表示自己包含了自己這個類的對象,比如我們數(shù)據(jù)結(jié)構(gòu)中的圖往枷。

自關(guān)聯(lián)的圖例
public class Node {  
    private Node subNode; 
}  

聚合(Association)

聚合是一種整體和部分的關(guān)系框产,是一種松耦合。在聚合關(guān)系中错洁,成員對象是整體對象的一部分秉宿,同時,成員變量也可以脫離整體獨(dú)立存在屯碴。從生命周期的角度解釋這句話就是說描睦,當(dāng)A是整體,B是部分的時候导而,A已經(jīng)結(jié)束了其生命周期忱叭,但是B照樣可以活得很好。比如一個汽車發(fā)動機(jī)(Engine)是汽車(Car)的組成部分嗡载,但是汽車發(fā)動機(jī)可以獨(dú)立存在窑多。

關(guān)于這個聚合關(guān)系,請和下面的組合關(guān)系結(jié)合起來看洼滚,這兩個東西都表示了整體與部分的關(guān)系埂息,但是兩者的耦合程度不同。

在UML中遥巴,聚合關(guān)系可以用一個一端是空心菱形另一端是箭頭的直線表示:

聚合關(guān)系的圖例

在代碼實(shí)現(xiàn)聚合系的時候千康,成員變量通常是作為構(gòu)造函數(shù)或者其他方法的參數(shù)傳入整體對象當(dāng)中的,這也就是為什么兩者的生命周期是分開的铲掐。

public class Car {  
    private Engine engine;

    // 在構(gòu)造函數(shù)中傳入
    public Car(Engine engine) {
        this.engine = engine;
    }  
    
    // 在 Set 函數(shù)中作為值傳入
    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}
  
public class Engine {
}  

組合(Composition)

組合關(guān)系也表示一種整體和組合的關(guān)系拾弃。但是與聚合不同的是,組合關(guān)系中的成員變量和整體的生命周期息息相關(guān)摆霉。整體對象可以控制成員對象的生命周期豪椿,一旦整體對象不存在奔坟,成員對象也將不存在,這里的成員對象不能脫離整體對象而存在搭盾。比如人的頭(Head)與嘴巴(Mouth)咳秉,嘴巴是頭的組成部分之一,而且如果頭沒了鸯隅,嘴巴也就沒了澜建。

在UML中,組合關(guān)系可以用一個一端是實(shí)心菱形另一端是箭頭的直線表示:

組合關(guān)系的圖例

在代碼實(shí)現(xiàn)組合關(guān)系的時候蝌以,我們通常在整體類的構(gòu)造函數(shù)中直接實(shí)例化成員變量炕舵,而不是像聚合關(guān)系中作為一個參數(shù)傳進(jìn)來。

public class Head {  
    private Mouth mouth;  
  
    public Head() {  
        mouth = new Mouth(); //實(shí)例化成員類  
    } 
}  
  
public class Mouth {
}  

依賴(Dependeny)

依賴關(guān)系是一種使用關(guān)系跟畅,依賴關(guān)系體現(xiàn)在某個類的方法使用另一個類的對象作為參數(shù)咽筋,從而使用這個對象的內(nèi)容。比如駕駛員開車徊件,在Driver類的drive()方法中將Car類型的對象car作為一個參數(shù)傳遞晤硕,以便在drive()方法中能夠調(diào)用car的move()方法,且駕駛員的drive()方法依賴車的move()方法

在UML中庇忌,依賴關(guān)系用帶箭頭的虛線表示舞箍,由依賴的一方指向被依賴的一方。比如在本例中皆疹,由 Driver 指向 Car疏橄。

依賴關(guān)系的圖例

通常,依賴關(guān)系的實(shí)現(xiàn)有三種方法:

  • 將一個類的對象作為另一個類的方法的參數(shù)略就;
  • 在一個類中的方法將另一個類的對象作為其局部變量捎迫;
  • 在一個類的方法中調(diào)用另一個類的靜態(tài)方法
public class Driver {  
    // 本例中使用了第一種方法來實(shí)現(xiàn) Driver 對 Car 的依賴關(guān)系表牢,并且 使用了 car 對象的 move 方法窄绒。
    public void drive(Car car) {  
        car.move();  
    }
}  
  
public class Car {  
    public void move() {  
        ......
    }
}  

泛化(Generalization)

泛化關(guān)系也就是繼承關(guān)系,描述了父類與子類的關(guān)系崔兴。

在UML中彰导,泛化關(guān)系用帶空心三角形的直線來表示。

泛化關(guān)系的圖例
//父類  
public class Person { 
 
    protected String name;  
    protected int age;  
  
    public void move() {  
    }  

    public void say() {   
    }  
}  
  
//子類  
public class Student extends Person {  

    private String studentNo;  
  
    public void study() { 
    }  
}  
  

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

接口和類之間還存在一種實(shí)現(xiàn)(Realization)關(guān)系敲茄。類實(shí)現(xiàn)了接口位谋,類中的操作實(shí)現(xiàn)了接口中所聲明的操作。

在UML中堰燎,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來表示掏父。

實(shí)現(xiàn)關(guān)系的圖例
// 協(xié)議
public interface Vehicle {  
    public void move();  
}  
  
// 具體實(shí)現(xiàn)
public class Ship implements Vehicle {  
    public void move() {  
        ...... 
    }  
}  

// 具體實(shí)現(xiàn)
public class Car implements Vehicle {  
    public void move() {  
        ...... 
    }  
}  

![Uploading class_diagram_431552.png . . .]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秆剪,隨后出現(xiàn)的幾起案子赊淑,更是在濱河造成了極大的恐慌爵政,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陶缺,死亡現(xiàn)場離奇詭異茂卦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)组哩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來处渣,“玉大人伶贰,你說我怎么就攤上這事」拚唬” “怎么了黍衙?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荠诬。 經(jīng)常有香客問我琅翻,道長,這世上最難降的妖魔是什么柑贞? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任方椎,我火速辦了婚禮,結(jié)果婚禮上钧嘶,老公的妹妹穿的比我還像新娘棠众。我一直安慰自己,他們只是感情好有决,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布闸拿。 她就那樣靜靜地躺著,像睡著了一般书幕。 火紅的嫁衣襯著肌膚如雪新荤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天台汇,我揣著相機(jī)與錄音苛骨,去河邊找鬼。 笑死苟呐,一個胖子當(dāng)著我的面吹牛智袭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掠抬,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吼野,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了两波?” 一聲冷哼從身側(cè)響起瞳步,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤闷哆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后单起,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抱怔,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年嘀倒,在試婚紗的時候發(fā)現(xiàn)自己被綠了屈留。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡测蘑,死狀恐怖灌危,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碳胳,我是刑警寧澤勇蝙,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站挨约,受9級特大地震影響味混,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诫惭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一翁锡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夕土,春花似錦盗誊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梨熙,卻和暖如春开镣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咽扇。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工邪财, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人质欲。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓树埠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘶伟。 傳聞我的和親對象是個殘疾皇子怎憋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • 在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,208評論 0 14
  • 忘記了uml類圖連線之間的關(guān)系绊袋,記錄一下毕匀。 1. 關(guān)聯(lián)關(guān)系 關(guān)聯(lián)(Association)關(guān)系是類與類之間最常用的...
    cutieagain閱讀 1,814評論 0 2
  • 1. 泛化(Generalization) 泛化(Generalization)關(guān)系也就是繼承關(guān)系皂岔,用于描述父類與...
    LeeLeCoder閱讀 775評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法展姐,內(nèi)部類的語法躁垛,繼承相關(guān)的語法,異常的語法圾笨,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 1.首先教馆,創(chuàng)建一個git倉庫,https://github.com,進(jìn)入后登陸墅拭,沒有賬號就創(chuàng)建一個賬號。 4.將你...
    feng1991閱讀 648評論 0 3