[轉] UML中的六大關係

UML中的六大關係

轉自:https://www.cnblogs.com/hoojo/p/uml_design.htmlhtml

在UML類圖中,常見的有如下幾種關係: 泛化(Generalization), 實現(Realization),關聯(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)。spa

image

1、繼承關係—泛化(Generalization)

指的是一個類(稱爲子類、子接口)繼承另外的一個類(稱爲父類、父接口)的功能,並能夠增長它本身的新功能的能力,繼承是類與類或者接口與接口之間最多見的關係;在Java中用extends關鍵字。3d

clip_image001

【泛化關係】是一種繼承關係,表示通常與特殊的關係,它指定了子類如何特化父類的全部特徵和行爲。例如:貓頭鷹是鳥的一種,即有鳥的特性也有貓頭鷹的共性。htm

【箭頭指向】帶三角箭頭的實線,箭頭指向父類。對象

【描述】上圖中的類bird有嘴、翅膀、羽毛等屬性。會飛、會唧唧喳喳的叫,那麼就有這些方法。而貓頭鷹有大眼睛和捕捉老鼠的本領,這則是自身的特性。blog

2、實現關係(Realization)

指的是一個class類實現interface接口(能夠是多個)的功能;實現是類與接口之間最多見的關係;在Java中此類關係經過關鍵字implements明確標識。繼承

clip_image003

【實現關係】是一種類與接口的關係,表示類是接口全部特徵和行爲的實現.接口

【箭頭指向】帶三角箭頭的虛線,箭頭指向接口。生命週期

【描述】上圖中IFly是一個接口,接口中有時間、速度等常量,還有一個fly方法。FlyImpl繼承了這個IFly接口後,須要實現fly方法,同時實現類也能夠擁有本身的屬性和方法。ip

3、依賴(Dependency)

能夠簡單的理解,就是一個類A使用到了另外一個類B,而這種使用關係是具備偶然性的、臨時性的、很是弱的,可是B類的變化會影響到A;好比某人要過河,須要借用一條船,此時人與船之間的關係就是依賴;表如今代碼層面,爲類B做爲參數、屬性被類A在某個method方法中使用;

clip_image005

【依賴關係】是一種使用的關係,即一個類的實現須要另外一個類的協助,因此要儘可能不使用雙向的互相依賴。

【代碼表現】局部變量、方法的參數或者對靜態方法的調用

【箭頭及指向】帶箭頭的虛線,指向被使用者

【描述】Bird類中有一個setFly方法,它須要使用者用到IFly接口的實現,那麼這種關係就是依賴關係。

4、關聯

1.關聯

他體現的是兩個類、或者類與接口之間語義級別的一種強依賴關係,好比我和個人朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,通常是長期性的,並且雙方的關係通常是平等的、關聯能夠是單向、雙向的;表如今代碼層面,爲被關聯類B以類屬性的形式出如今關聯類A中,也多是關聯類A引用了一個類型爲被關聯類B的全局變量;

clip_image007

【關聯關係】是一種擁有的關係,它使一個類知道另外一個類的屬性和方法;如:老師與學生,丈夫與妻子關聯能夠是雙向的,也能夠是單向的。雙向的關聯能夠有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。

【代碼體現】成員變量

【箭頭及指向】帶普通箭頭的實心線,指向被擁有者

【描述】在Bird類中有一個IFly類型的fly屬性,須要提供IFly的接口實現。Bird對象會利用IFly接口的實現完成fly方法。

2.雙向關聯

雙方都知道對方的存在,均可以調用對方的公共屬性、方法。

clip_image002

【關聯關係】雙方都有關聯的關係,經過自身對對方關聯的屬性來訪問對方的屬性和方法。

【代碼體現】成員變量

【箭頭及指向】用不帶箭頭的實線鏈接雙方

【描述】在中國一個妻子只能嫁給一個丈夫,一個丈夫也只能取一個妻子。

3.自身關聯

本身關聯本身,這種狀況比較少出現可是也有用到。

clip_image004

【自關聯關係】雙方都有關聯的關係,經過自身對自身關聯的屬性引用來訪問對方的屬性和方法。

【代碼體現】成員變量

【箭頭及指向】用帶普通箭頭的實線鏈接本身

【描述】在盜夢空間中,演員須要在夢中再造夢,這種夢中夢的狀況跟上圖描述很符合。

5、聚合(Aggregation)

聚合是關聯關係的一種特例,他體現的是總體與部分、擁有的關係,即has-a的關係,此時總體與部分之間是可分離的,他們能夠具備各自的生命週期,部分能夠屬於多個總體對象,也能夠爲多個總體對象共享;好比計算機與CPU、公司與員工的關係等;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分;

clip_image009

【聚合關係】是總體與部分的關係,且部分能夠離開總體而單獨存在。如車和輪胎是總體和部分的關係,輪胎離開車仍然能夠存在。聚合關係是關聯關係的一種,是強的關聯關係;關聯和聚合在語法上沒法區分,必須考察具體的邏輯關係。

【代碼體現】成員變量

【箭頭及指向】帶空心菱形的實心線,菱形指向總體

【描述】birdChild一隻鳥有不少鳥寶寶,因此自引用。鳥有不少不一樣數量和顏色的羽毛,因此引用關係是0~*。

6、組合(Composition)

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱爲強聚合;他一樣體現總體與部分間的關係,但此時總體與部分是不可分的,總體的生命週期結束也就意味着部分的生命週期結束;好比你和你的大腦;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分;

clip_image011

【組合關係】是總體與部分的關係,但部分不能離開總體而單獨存在。如公司和部門是總體和部分的關係,沒有公司就不存在部門。組合關係是關聯關係的一種,是比聚合關係還要強的關係,它要求普通的聚合關係中表明總體的對象負責表明部分的對象的生命週期。

【代碼體現】成員變量

【箭頭及指向】帶實心菱形的實線,菱形指向總體

【描述】一個學校由多個班級組成,班級離開學校也就不存在、而學校離開班級也不成立。像這種不可分離的關係就須要用組合。

7、綜合示例

clip_image013

對於繼承、實現這兩種關係沒多少疑問,他們體現的是一種類與類、或者類與接口間的縱向關係;其餘的四者關係則體現的是類與類、或者類與接口間的引用、橫向關係,是比較難區分的,有不少事物間的關係要想準備定位是很難的,前面也提到,這幾種關係都是語義級別的,因此從代碼層面並不能徹底區分各類關係;但總的來講,後幾種關係所表現的強弱程度依次爲:泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴。

相關文章
相關標籤/搜索