? ??????1. 關(guān)聯(lián)關(guān)系(它描述不同類的對(duì)象之間的結(jié)構(gòu)關(guān)系;體現(xiàn)的是兩個(gè)類、或者類與接口之間語義級(jí)別的一種強(qiáng)依賴關(guān)系。代碼中的表現(xiàn):關(guān)聯(lián)對(duì)象通常是以成員變量的形式實(shí)現(xiàn)的)
????????關(guān)聯(lián)關(guān)系又可進(jìn)一步分為單向關(guān)聯(lián)、雙向關(guān)聯(lián)和自關(guān)聯(lián)。
? ??(1)單向關(guān)聯(lián)

????????我們可以看到,在UML類圖中單向關(guān)聯(lián)用一個(gè)帶箭頭的直線表示。上圖表示每個(gè)顧客都有一個(gè)地址,這通過讓Customer類持有一個(gè)類型為Address的成員變量來實(shí)現(xiàn)。
? ??(2)雙向關(guān)聯(lián)

????????從上圖中我們很容易看出,所謂的雙向關(guān)聯(lián)就是雙方各自持有對(duì)方類型的成員變量。在UML類圖中,雙向關(guān)聯(lián)用一個(gè)不帶箭頭的直線來表示。上圖中在Customer類中維護(hù)一個(gè)Product[]數(shù)組表示一個(gè)顧客購買了哪些產(chǎn)品;在Product類中維護(hù)一個(gè)Customer類型的成員變量表示這個(gè)產(chǎn)品被那個(gè)顧客所購買。
? ??(3)自關(guān)聯(lián)
????????自關(guān)聯(lián)在UML類圖中用一個(gè)帶有箭頭且指向自身的直線表示。上圖的意思就是Node類包含類型為Node的成員變量,也就是“自己包含自己”。
2. 聚合關(guān)系

????????上圖中的Car類與Engine類就是聚合關(guān)系(Car類中包含一個(gè)Engine類型的成員變量)。由上圖我們可以看到,UML中聚合關(guān)系用帶空心菱形和箭頭的直線表示。聚合關(guān)系強(qiáng)調(diào)是“整體”包含“部分”,但是“部分”可以脫離“整體”而單獨(dú)存在。比如上圖中汽車包含了發(fā)動(dòng)機(jī),而發(fā)動(dòng)機(jī)脫離了汽車也能夠單獨(dú)存在。
3. 組合關(guān)系
????????組合關(guān)系與聚合關(guān)系間的最大不同在于:這里的“部分”脫離了“整體”便不復(fù)存在。比如下圖:

????????顯然,嘴是頭的一部分且不能脫離了頭而單獨(dú)存在。在UML類圖中,組合關(guān)系用一個(gè)帶實(shí)心菱形和箭頭的直線表示。
4. 依賴關(guān)系(用一條帶箭頭的虛線表示;箭頭的指向?yàn)檎{(diào)用關(guān)系,簡單來說,類A用到了類B,就可以說A依賴于B)

????????從上圖中我們可以看到,Driver的drive方法只有傳入了一個(gè)Car對(duì)象才能發(fā)揮作用,因此我們說Driver類依賴于Car類。在UML類圖中,依賴關(guān)系用一條帶有箭頭的虛線表示。
????????依賴關(guān)系是一種臨時(shí)性的偶然性的關(guān)系,通常在運(yùn)行期間產(chǎn)生,并且隨著運(yùn)行時(shí)的變化; 依賴關(guān)系也可能發(fā)生變化
????????代碼中的表現(xiàn):比如方法的入?yún)ⅲ瑯?gòu)造方法的參數(shù)
5. 繼承關(guān)系
????????繼承關(guān)系對(duì)應(yīng)的是extend關(guān)鍵字,在UML類圖中用帶空心三角形的直線表示,如下圖所示中,Student類與Teacher類繼承了Person類。
6. 接口實(shí)現(xiàn)關(guān)系
????????這種關(guān)系對(duì)應(yīng)implements關(guān)鍵字,比如下圖中,Car類與Ship類都實(shí)現(xiàn)了Vehicle接口。
????????到了這里,UML類圖中最常見的表示方式我們就介紹完了,有了這些我們就能讀懂常見的UML類圖了,剩下的遇到時(shí)再查即可。
三、參考資料
http://www.uml.org.cn/oobject/201211231.asp
????????Person 和 Computer之間是沒有關(guān)系的,但是由于偶爾的需要,Person需要使用Computer,這時(shí)Person就依賴于Computer。依賴關(guān)系是五種關(guān)系中耦合最小的一種關(guān)系。
類A要完成某個(gè)功能必須引用類B,則類A依賴類B
關(guān)聯(lián)和依賴的區(qū)別:
從類的屬性是否增加的角度看:
????????發(fā)生依賴關(guān)系的兩個(gè)類都不會(huì)增加屬性。其中的一個(gè)類作為另一個(gè)類的方法的參數(shù)或者返回值,或者是某個(gè)方法的變量而已。
????????發(fā)生關(guān)聯(lián)關(guān)系的兩個(gè)類,其中的一個(gè)類成為另一個(gè)類的屬性,而屬性是一種更為緊密的耦合,更為長久的持有關(guān)系。
從關(guān)系的生命周期來看:
????????依賴關(guān)系是僅當(dāng)類的方法被調(diào)用時(shí)而產(chǎn)生,伴隨著方法的結(jié)束而結(jié)束了。
????????關(guān)聯(lián)關(guān)系是當(dāng)類實(shí)例化的時(shí)候即產(chǎn)生,當(dāng)類銷毀的時(shí)候,關(guān)系結(jié)束。相比依賴講,關(guān)聯(lián)關(guān)系的生存期更長。