1.類與類之間關(guān)系

? ??????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)系的生存期更長。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,519評(píng)論 0 14
  • 平時(shí)閱讀一些遠(yuǎn)嗎分析類文章或是設(shè)計(jì)應(yīng)用架構(gòu)時(shí)沒少與UML類圖打交道。實(shí)際上,UML類圖中最常用到的元素五分鐘就能掌...
    泥孩兒0107閱讀 278評(píng)論 0 0
  • 單位附近有一家超市,經(jīng)營的很不錯(cuò),價(jià)錢合理,夫妻倆熱情,菜也新鮮。這對(duì)我們這些上班族來說,方便極了,下班順便...
    松竹友閱讀 294評(píng)論 2 4
  • 中醫(yī)養(yǎng)生的方法非常多,但是在日常生活中中醫(yī)養(yǎng)生主要可以分為以下12點(diǎn)。 1、睡醒后賴床三分鐘 在中風(fēng)和猝死的病例中...
    Alluer閱讀 377評(píng)論 0 0
  • 笑踏重門沽酒去,稍浸三分已忘悲。 春飲屠蘇夏酌杏,秋把菊香冬含梅。 張子野,賀方回,醉時(shí)爭唱且傳杯。 流觴曲水金船...
    淮揚(yáng)先生閱讀 165評(píng)論 0 2

友情鏈接更多精彩內(nèi)容