1. 程式人生 > >淺談UML類圖中類之間的5種關係

淺談UML類圖中類之間的5種關係

什麼是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例項也消亡,就像現實生活中,生成一個人,並定會伴隨著腳的生成,但是如果那個人掛了,它的腳自然而然也就...(怎麼聽著怪怪-.-)

泛化關係

泛化關係通常包含類與類之間的繼承關係和類與介面實現關係,如下圖所示: 繼承:
介面:
總結:以前一直對它們之間的區別模模糊糊,通過查閱和總結寫出來的個人經驗,希望對大家的理解也有所幫助