淺談UML類圖中類之間的5種關係
阿新 • • 發佈:2018-12-25
什麼是UML類圖?
類圖顯示了一組類、介面、協作以及他們之間的關係。在UML中問題域最終要被逐步轉化,通過類來建模,通過程式語言構建這些類從而實現系統。類加上他們之間的關係就構成了類圖,類圖中還可以包含介面、包等元素,也可以包括物件、鏈等例項。類與類之間的關係
類與類之間的關係可以根據關係的強度依次分為以下五種:
依賴關係(Dependency)---關聯關係(Association)---聚合(Aggregation)---組合(Composition)---泛化(Generalization)
依賴關係
依賴關係是五種關係中耦合最小的一種關係。使用虛線加箭頭表示,如下圖所示:程式碼:
public class Person {
public void Call(){
Phone phone = new Phone();
}
}
public class Phone {
}
解釋:Person 和 Phone之間是沒有關係的,但是由於偶爾的需要,Person需要使用Phone,在Person類中的具體方法中需要例項化Phone,這時Person就依賴於Phone.持有Phone類的是Person類的一個方法,而不是Person類,這點是最重要的。
關聯關係
關聯關係是實線加箭頭表示。表示類之間的關係比依賴要強,如下圖所示:程式碼:
public class Person { //頭部是人的一個屬性 public Head head; public Person() { // TODO Auto-generated constructor stub } }
public class Head {
public Head() {
// TODO Auto-generated constructor stub
}
}
解釋:Head是作為Person類的一個內部屬性來使用,一旦例項化了Person類,同時也例項化了一個Head例項,所以他們的依賴性更強。與關聯最大的區別是:依賴時是在類的內部具體方法中使用到另外一個類,而關聯則是作為內部屬性來用,依賴關係僅當具體方法被呼叫時才會例項化,比如剛才的Person只有打電話時才呼叫Phone例項化,而關聯是在new一個Person時就同時例項化了一個Head類來作為Person的內部屬性.
聚合關係
聚合關係通過一個空心的菱形加箭頭表示,如下圖所示:
程式碼:
public class PersonGroup {
public Person person;
//將person作為構造方法的引數傳進去
public PersonGroup(Person person) {
// TODO Auto-generated constructor stub
this.person = person;
}
}
public class Person {
public Person() {
// TODO Auto-generated constructor stub
}
}
解釋:Person類是PersonGroup構造方法的引數,因此可以Person類可以完全脫離PersonGroup類而存在,不會因為PersonGroup例項的消亡而消亡,就像現實生活中,人不會因為脫離人群就掛了...
組合關係
組合關係通過一個實心的菱形加箭頭表示,如下圖所示:程式碼:
public class Person {
public Foot foot;
public Person() {
// TODO Auto-generated constructor stub
//在構造方法中例項化
foot = new Foot();
}
}
public class Foot {
public Foot() {
// TODO Auto-generated constructor stub
}
}
解釋: Foot類是在Person類的構造方法中才被具體例項化,一旦Person例項生成,則Foot例項也生成,當Person例項消亡,其Foot例項也消亡,就像現實生活中,生成一個人,並定會伴隨著腳的生成,但是如果那個人掛了,它的腳自然而然也就...(怎麼聽著怪怪-.-)
泛化關係
泛化關係通常包含類與類之間的繼承關係和類與介面實現關係,如下圖所示: 繼承:介面:
總結:以前一直對它們之間的區別模模糊糊,通過查閱和總結寫出來的個人經驗,希望對大家的理解也有所幫助