java中類與類之間的幾種關(guān)系

通常我們都會(huì)使用UML圖來(lái)表示類與類之間的關(guān)系鹉动。在這里介紹基本的UML畫法廊宪,并用UML圖類表示類之間的關(guān)系煎娇。

UML類圖的表示方式:

一、類的屬性的表示方式

在UML類圖中丹鸿,類使用包含類名越走、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來(lái)表示,比如下圖表示一個(gè)Employee類靠欢,它包含name,age和email這3個(gè)屬性廊敌,以及modifyInfo()方法。

Employee類的UML圖

那么屬性/方法名稱前加的加號(hào)和減號(hào)是什么意思呢门怪?它們表示了這個(gè)屬性或方法的可見(jiàn)性骡澈,UML類圖中表示可見(jiàn)性的符號(hào)有三種:

+ :表示public
- :表示private
#:表示protected(friendly也歸入這類)

因此,上圖中的Employee類具有3個(gè)私有屬性和一個(gè)公有方法掷空。
實(shí)際上肋殴,屬性的完整表示方式是這樣的:
可見(jiàn)性 名稱 :類型 [ = 缺省值]
中括號(hào)中的內(nèi)容表示是可選的

二、類的方法的表示方式
上圖中我們已經(jīng)看到了方法的表示形式坦弟。實(shí)際上护锤,方法的完整表示方式如下:
可見(jiàn)性 名稱(參數(shù)列表) [ : 返回類型]
同樣,中括號(hào)中的內(nèi)容是可選的酿傍。
比如在下圖的Demo類中烙懦,定義了3個(gè)方法:

Demo類

  • public方法method1接收一個(gè)類型為Object的參數(shù),返回值類型為void
  • protected方法method2無(wú)參數(shù)拧粪,返回值類型為String
  • private方法method3接收類型分別為int修陡、int[]的參數(shù)沧侥,返回值類型為int

類之間大體分為5種關(guān)系:

在設(shè)計(jì)模式中類與類之間的關(guān)系主要有5種:依賴、關(guān)聯(lián)魄鸦、聚合宴杀、組合、繼承拾因,它們之間的耦合度依次增加旺罢。

1,依賴關(guān)系(Dependency)

單向绢记,表示一個(gè)類依賴于另一個(gè)類的定義扁达,其中一個(gè)類的變化將影響另外一個(gè)類,是一種“use a”關(guān)系!如果A依賴于B蠢熄,則B表現(xiàn)為A的局部變量跪解,方法參數(shù),靜態(tài)方法調(diào)用等

在UML類圖中签孔,依賴關(guān)系用一條帶有箭頭的虛線表示

public class Driver {  
    public void driver(){  
        Car car = new Car ();//局部變量  
        ....  
    } 

    public void driver1(Car car){}   //方法參數(shù)

    public void driver2(){  
            Car.move(); //靜態(tài)方法調(diào)用  
            ...  
    }  
}  

正常情況下叉讥,如果先設(shè)計(jì)類圖, 再進(jìn)行編碼饥追,那么在類圖的設(shè)計(jì)過(guò)程中是不會(huì)涉及到具體的實(shí)現(xiàn)細(xì)節(jié)的图仓,所以畫類圖的依賴關(guān)系時(shí),只要關(guān)注接口層面就可以了(依賴僅畫接口參數(shù)但绕,忽略局部變量救崔,靜態(tài)方法調(diào)用)

2,關(guān)聯(lián)關(guān)系(Association)

單向或雙向(通常我們需要避免使用雙向關(guān)聯(lián)關(guān)系)捏顺,是一種"has a"關(guān)系六孵,如果A單向關(guān)聯(lián)B,則可以說(shuō)A has a B草丧,通常表現(xiàn)為全局變量

在UML類圖中單向關(guān)聯(lián)用一個(gè)帶箭頭的直線表示

public class Customer {  
    public Address address;  
      
    public void setAddress (Address address){        
        this.address= address;  
    }  
      
    public Address getAddress (){          
        return address;  
    }  
}  

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

在UML類圖中狸臣,雙向關(guān)聯(lián)用一個(gè)不帶箭頭的直線表示

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

3,聚合關(guān)系(Aggregation)

單向昌执,關(guān)聯(lián)關(guān)系的一種,與關(guān)聯(lián)關(guān)系之間的區(qū)別是語(yǔ)義上的诈泼,關(guān)聯(lián)的兩個(gè)對(duì)象通常是平等的懂拾,聚合則一般不平等,有一種整體和局部的感覺(jué)铐达,實(shí)現(xiàn)上區(qū)別不大!

UML中聚合關(guān)系用帶空心菱形和箭頭的直線表示

public class Team {  
    public Person person;  
      
    public Team(Person person){  
        this.person = person;  
    }  
}  

Team 由 Person 組成岖赋,其生命周期不同,整體不存在了瓮孙,部分依然存在唐断,當(dāng)前Team解散了选脊,人還在,還可以加入別的組脸甘。

4恳啥,組合關(guān)系(Composition)

單向,是一種強(qiáng)依賴的特殊聚合關(guān)系

在UML類圖中丹诀,組合關(guān)系用一個(gè)帶實(shí)心菱形和箭頭的直線表示

public class Person {  
    public Head head;  
    public Body body;  
      
    public Person(){  
        head = new Head();  
        body = new Body();  
    }  
}  

Head钝的,Body,Arm和Leg等組合成People铆遭,其生命周期相同硝桩,如果整體不存在了,部分也將消亡枚荣。

5碗脊,繼承關(guān)系(Inheritance)

類繼承抽象類,類繼承父類橄妆,對(duì)應(yīng)的是extend關(guān)鍵字

在UML類圖中用帶空心三角形的直線表示

類實(shí)現(xiàn)接口衙伶,對(duì)應(yīng)implement關(guān)鍵字

在UML類圖中用帶空心三角形的虛線表示

可以分得更細(xì):
實(shí)現(xiàn)(Realization):類實(shí)現(xiàn)接口屬于這種關(guān)系
泛化(Generalization):即"is a"關(guān)系,類繼承抽象類呼畸,類繼承父類都屬于這種關(guān)系

轉(zhuǎn):UML類圖(Class Diagram)中類與類之間的關(guān)系及表示方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痕支,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛮原,更是在濱河造成了極大的恐慌卧须,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒陨,死亡現(xiàn)場(chǎng)離奇詭異花嘶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹦漠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門椭员,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笛园,你說(shuō)我怎么就攤上這事隘击。” “怎么了研铆?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵埋同,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我棵红,道長(zhǎng)凶赁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮虱肄,結(jié)果婚禮上致板,老公的妹妹穿的比我還像新娘。我一直安慰自己咏窿,他們只是感情好斟或,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翰灾,像睡著了一般缕粹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸淮,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天平斩,我揣著相機(jī)與錄音,去河邊找鬼咽块。 笑死绘面,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侈沪。 我是一名探鬼主播揭璃,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亭罪!你這毒婦竟也來(lái)了瘦馍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤应役,失蹤者是張志新(化名)和其女友劉穎情组,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箩祥,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡院崇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袍祖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片底瓣。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蕉陋,靈堂內(nèi)的尸體忽然破棺而出捐凭,到底是詐尸還是另有隱情,我是刑警寧澤凳鬓,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布柑营,位于F島的核電站,受9級(jí)特大地震影響村视,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酒奶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一蚁孔、第九天 我趴在偏房一處隱蔽的房頂上張望奶赔。 院中可真熱鬧,春花似錦杠氢、人聲如沸站刑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绞旅。三九已至,卻和暖如春温艇,著一層夾襖步出監(jiān)牢的瞬間因悲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工勺爱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晃琳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓琐鲁,卻偏偏與公主長(zhǎng)得像卫旱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子围段,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 在UML 2.0的13種圖形中顾翼,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,226評(píng)論 0 14
  • UML概述 UML簡(jiǎn)介 UML (Unified Modeling Language)為面向?qū)ο筌浖O(shè)計(jì)提供統(tǒng)一的...
    aron1992閱讀 513評(píng)論 0 0
  • 面向?qū)ο蟪绦蛟O(shè)計(jì)概述 面向?qū)ο蟪绦蛟O(shè)計(jì)(簡(jiǎn)稱OOP)是當(dāng)今主流的程序設(shè)計(jì)范型奈泪,它已經(jīng)取代了傳統(tǒng)的“結(jié)構(gòu)化”過(guò)程化程...
    Steven1997閱讀 899評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法适贸,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法段磨,繼承相關(guān)的語(yǔ)法取逾,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,599評(píng)論 18 399
  • 新學(xué)期的第一天 準(zhǔn)確的說(shuō)是前一晚 我開始搞不清楚我的上一學(xué)期是什么狀態(tài) 所以苹支,我應(yīng)該開始簡(jiǎn)單的日記了砾隅。 -----...
    勾勒紀(jì)念閱讀 173評(píng)論 0 0