浅谈UML类图中类之间的5种关系
什么是UML類圖?
類圖顯示了一組類、接口、協(xié)作以及他們之間的關(guān)系。在UML中問題域最終要被逐步轉(zhuǎn)化,通過類來建模,通過編程語言構(gòu)建這些類從而實現(xiàn)系統(tǒng)。類加上他們之間的關(guān)系就構(gòu)成了類圖,類圖中還可以包含接口、包等元素,也可以包括對象、鏈等實例。
類與類之間的關(guān)系
類與類之間的關(guān)系可以根據(jù)關(guān)系的強度依次分為以下五種:
依賴關(guān)系(Dependency)—關(guān)聯(lián)關(guān)系(Association)—聚合(Aggregation)—組合(Composition)—泛化(Generalization)
1. 依賴關(guān)系
依賴關(guān)系是五種關(guān)系中耦合最小的一種關(guān)系。使用虛線加箭頭表示,如下圖所示:
代碼:
public class Person { public void Call(){ Phone phone = new Phone(); } } public class Phone { }解釋:Person 和 Phone之間是沒有關(guān)系的,但是由于偶爾的需要,Person需要使用Phone,在Person類中的具體方法中需要實例化Phone,這時Person就依賴于Phone.持有Phone類的是Person類的一個方法,而不是Person類,這點是最重要的。
2.關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系是實線加箭頭表示。表示類之間的關(guān)系比依賴要強,如下圖所示:
代碼:
public class Person { //頭部是人的一個屬性 public Head head; public Person() { } } public class Head { public Head() { } }解釋:Head是作為Person類的一個內(nèi)部屬性來使用,一旦實例化了Person類,同時也實例化了一個Head實例,所以他們的依賴性更強。與關(guān)聯(lián)最大的區(qū)別是:依賴時是在類的內(nèi)部具體方法中使用到另外一個類,而關(guān)聯(lián)則是作為內(nèi)部屬性來用,依賴關(guān)系僅當具體方法被調(diào)用時才會實例化,比如剛才的Person只有打電話時才調(diào)用Phone實例化,而關(guān)聯(lián)是在new一個Person時就同時實例化了一個Head類來作為Person的內(nèi)部屬性.
3.聚合關(guān)系
聚合關(guān)系通過一個空心的菱形加箭頭表示,如下圖所示:
代碼:
public class PersonGroup { public Person person; //將person作為構(gòu)造方法的參數(shù)傳進去 public PersonGroup(Person person) { this.person = person; } } public class Person { public Person() { } }解釋:Person類是PersonGroup構(gòu)造方法的參數(shù),因此可以Person類可以完全脫離PersonGroup類而存在,不會因為PersonGroup實例的消亡而消亡,就像現(xiàn)實生活中,人不會因為脫離人群就掛了…
4.組合關(guān)系
組合關(guān)系通過一個實心的菱形加箭頭表示,如下圖所示:
代碼:
public class Person { public Foot foot; public Person() { //在構(gòu)造方法中實例化 foot = new Foot(); } } public class Foot { public Foot() { } }解釋:
Foot類是在Person類的構(gòu)造方法中才被具體實例化,一旦Person實例生成,則Foot實例也生成,當Person實例消亡,其Foot實例也消亡,就像現(xiàn)實生活中,生成一個人,并定會伴隨著腳的生成,但是如果那個人掛了,它的腳自然而然也就…(怎么聽著怪怪-.-)
5.泛化關(guān)系
泛化關(guān)系通常包含類與類之間的繼承關(guān)系和類與接口實現(xiàn)關(guān)系,如下圖所示:
繼承:
接口:
總結(jié):以前一直對它們之間的區(qū)別模模糊糊,通過查閱和總結(jié)寫出來的個人經(jīng)驗,希望對大家的理解也有所幫助
原文地址: 淺談UML類圖中類之間的5種關(guān)系
想了解更多精彩內(nèi)容請關(guān)注我的公眾號
本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點擊這里快速進入簡書
GIT地址:http://git.oschina.net/brucekankan/
點擊這里快速進入GIT
總結(jié)
以上是生活随笔為你收集整理的浅谈UML类图中类之间的5种关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java IO 之 管道流 原理分析
- 下一篇: NIO 之 Buffer 图解