UML定義的關(guān)系主要有六種:依賴、類屬,、關(guān)聯(lián),、實現(xiàn)、聚合和組合,。這些類間關(guān)系的理解和使用是掌握和應(yīng)用UML的關(guān)鍵,,而也就是這幾種關(guān)系,往往會讓初學(xué)者迷惑,。這里給出這六種主要UML關(guān)系的說明和類圖描述,,一看之下,清晰明了,;以下就分別介紹這幾種關(guān)系: 繼承 指的是一個類(稱為子類,、子接口)繼承另外的一個類(稱為父類、父接口)的功能,,并可以增加它自己的新功能的能力,,繼承是類與類或者接口與接口之間最常見的關(guān)系; 在Java中此類關(guān)系通過關(guān)鍵字extends明確標(biāo)識,,在設(shè)計時一般沒有爭議性; 實現(xiàn) 指的是一個class類實現(xiàn)interface接口(可以是多個)的功能,;實現(xiàn)是類與接口之間最常見的關(guān)系,; 在Java中此類關(guān)系通過關(guān)鍵字implements明確標(biāo)識,在設(shè)計時一般沒有爭議性,; 依賴 可以簡單的理解,,就是一個類A使用到了另一個類B,,而這種使用關(guān)系是具有偶然性的、臨時性的,、非常弱的,,但是B類的變化會影響到A;比如某人要過河,,需要借用一條船,,此時人與船之間的關(guān)系就是依賴; 表現(xiàn)在代碼層面,,為類B作為參數(shù)被類A在某個method方法中使用,; 關(guān)聯(lián) 他體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強依賴關(guān)系,,比如我和我的朋友,;這種關(guān)系比依賴更強、不存在依賴關(guān)系的偶然性,、關(guān)系也不是臨時性的,,一般是長期性的,而且雙方的關(guān)系一般是平等的,、關(guān)聯(lián)可以是單向,、雙向的; 表現(xiàn)在代碼層面,,為被關(guān)聯(lián)類B以類屬性的形式出現(xiàn)在關(guān)聯(lián)類A中,,也可能是關(guān)聯(lián)類A引用了一個類型為被關(guān)聯(lián)類B的全局變量; 聚合 聚合是關(guān)聯(lián)關(guān)系的一種特例,,他體現(xiàn)的是整體與部分,、擁有的關(guān)系,即has-a的關(guān)系,,此時整體與部分之間是可分離的,,他們可以具有各自的生命周期,部分可以屬于多個整體對象,,也可以為多個整體對象共享,;比如計算機與CPU、公司與員工的關(guān)系等,; 表現(xiàn)在代碼層面,,和關(guān)聯(lián)關(guān)系是一致的,只能從語義級別來區(qū)分,; 組合 組合也是關(guān)聯(lián)關(guān)系的一種特例,,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強,,也稱為強聚合,;他同樣體現(xiàn)整體與部分間的關(guān)系,,但此時整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,;比如你和你的大腦,; 表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,,只能從語義級別來區(qū)分,; 對于繼承、實現(xiàn)這兩種關(guān)系沒多少疑問,,他們體現(xiàn)的是一種類與類,、或者類與接口間的縱向關(guān)系;其他的四者關(guān)系則體現(xiàn)的是類與類,、或者類與接口間的引用,、橫向關(guān)系,是比較難區(qū)分的,,有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的,,前面也提到,這幾種關(guān)系都是語義級別的,,所以從代碼層面并不能完全區(qū)分各種關(guān)系,;但總的來說,后幾種關(guān)系所表現(xiàn)的強弱程度依次為:組合>聚合>關(guān)聯(lián)>依賴,。 |
|
來自: 風(fēng)自向前 > 《UML》