什么是UML類圖波闹?
類圖顯示了一組類、接口涛碑、協(xié)作以及他們之間的關系精堕。在UML中問題域最終要被逐步轉化,通過類來建模蒲障,通過編程語言構建這些類從而實現(xiàn)系統(tǒng)歹篓。類加上他們之間的關系就構成了類圖,類圖中還可以包含接口晌涕、包等元素滋捶,也可以包括對象、鏈等實例余黎。
類與類之間的關系
類與類之間的關系可以根據(jù)關系的強度依次分為以下五種:
依賴關系(Dependency)---關聯(lián)關系(Association)---聚合(Aggregation)---組合(Composition)---泛化(Generalization)
1. 依賴關系
依賴關系是五種關系中耦合最小的一種關系重窟。使用虛線加箭頭表示,如下圖所示:
代碼:
public class Person {
public void Call(){
Phone phone = new Phone();
}
}
public class Phone {
}
解釋:Person 和 Phone之間是沒有關系的惧财,但是由于偶爾的需要巡扇,Person需要使用Phone,在Person類中的具體方法中需要實例化Phone,這時Person就依賴于Phone.持有Phone類的是Person類的一個方法垮衷,而不是Person類厅翔,這點是最重要的。
2.關聯(lián)關系
關聯(lián)關系是實線加箭頭表示搀突。表示類之間的關系比依賴要強刀闷,如下圖所示:
代碼:
public class Person {
//頭部是人的一個屬性
public Head head;
public Person() {
}
}
public class Head {
public Head() {
}
}
解釋:Head是作為Person類的一個內部屬性來使用,一旦實例化了Person類仰迁,同時也實例化了一個Head實例甸昏,所以他們的依賴性更強。與關聯(lián)最大的區(qū)別是:依賴時是在類的內部具體方法中使用到另外一個類徐许,而關聯(lián)則是作為內部屬性來用施蜜,依賴關系僅當具體方法被調用時才會實例化,比如剛才的Person只有打電話時才調用Phone實例化雌隅,而關聯(lián)是在new一個Person時就同時實例化了一個Head類來作為Person的內部屬性.
3.聚合關系
聚合關系通過一個空心的菱形加箭頭表示翻默,如下圖所示:
代碼:
public class PersonGroup {
public Person person;
//將person作為構造方法的參數(shù)傳進去
public PersonGroup(Person person) {
this.person = person;
}
}
public class Person {
public Person() {
}
}
解釋:Person類是PersonGroup構造方法的參數(shù),因此可以Person類可以完全脫離PersonGroup類而存在恰起,不會因為PersonGroup實例的消亡而消亡修械,就像現(xiàn)實生活中,人不會因為脫離人群就掛了...
4.組合關系
組合關系通過一個實心的菱形加箭頭表示检盼,如下圖所示:
代碼:
public class Person {
public Foot foot;
public Person() {
//在構造方法中實例化
foot = new Foot();
}
}
public class Foot {
public Foot() {
}
}
解釋:
Foot類是在Person類的構造方法中才被具體實例化肯污,一旦Person實例生成,則Foot實例也生成,當Person實例消亡仇箱,其Foot實例也消亡县恕,就像現(xiàn)實生活中,生成一個人剂桥,并定會伴隨著腳的生成忠烛,但是如果那個人掛了,它的腳自然而然也就...(怎么聽著怪怪-.-)
5.泛化關系
泛化關系通常包含類與類之間的繼承關系和類與接口實現(xiàn)關系权逗,如下圖所示:
繼承:
接口:
總結:以前一直對它們之間的區(qū)別模模糊糊美尸,通過查閱和總結寫出來的個人經(jīng)驗,希望對大家的理解也有所幫助
原文地址: 淺談UML類圖中類之間的5種關系