1. 程式人生 > >UML類圖(Class Diagram)中類與類之間的關係及表示方式

UML類圖(Class Diagram)中類與類之間的關係及表示方式

類之間大體分為5種關係:

1,依賴關係(Dependency)

單向,表示一個類依賴於另一個類的定義,其中一個類的變化將影響另外一個類,是一種“use a”關係

如果A依賴於B,則B表現為A的區域性變數,方法引數,靜態方法呼叫等

public class Person {
	public void doSomething(){
		Card card = new Card();//區域性變數
		....
	}
}
public class Person {
	public void doSomething(Card card){//方法引數
		....
	}
}
public class Person {
	public void doSomething(){
		int id = Card.getId();//靜態方法呼叫
		...
	}
}

----2018-05-24

最近我意識到我在畫類圖的時候畫的過於細緻了,總是想要把一個類的所有依賴關係都畫出來,醜僅僅是一個方面,很多時候我是根據程式碼反向完成類圖,所以最終類圖中的依賴關係反映了很多具體的實現細節

正常情況下,如果先設計類圖, 再進行編碼,那麼在類圖的設計過程中是不會涉及到具體的實現細節的,所以畫類圖的依賴關係時,只要關注介面層面就可以了(依賴僅畫介面引數,忽略區域性變數,靜態方法呼叫)

2,關聯關係(Association)

單向或雙向(通常我們需要避免使用雙向關聯關係),是一種"has a"關係,如果A單向關聯B,則可以說A has a B,通常表現為全域性變數

public class Person {
	public Phone phone;
	
	public void setPhone(Phone phone){		
		this.phone = phone;
	}
	
	public Phone getPhone(){		
		return phone;
	}
}

3,聚合關係(Aggregation)

單向,關聯關係的一種,與關聯關係之間的區別是語義上的,關聯的兩個物件通常是平等的,聚合則一般不平等,有一種整體和區域性的感覺,實現上區別不大

Class由Student組成,其生命週期不同,整體不存在了,部分依然存在,當前Team解散了,人還在,還可以加入別的組

public class Team {
	public Person person;
	
	public Team(Person person){
		this.person = person;
	}
}

4,組合關係(Composition)

單向,是一種強依賴的特殊聚合關係

Head,Body,Arm和Leg組合成People,其生命週期相同,如果整體不存在了,部分也將消亡

public class Person {
	public Head head;
	public Body body;
	public Arm arm;
	public Leg leg;
	
	public Person(){
		head = new Head();
		body = new Body();
		arm = new Arm();
		leg = new Leg();
	}
}

5,繼承關係(Inheritance)

類實現介面,類繼承抽象類,類繼承父類都屬於這種關係

可以分得更細:

實現(Realization):類實現介面屬於這種關係

泛化(Generalization):即"is a"關係,類繼承抽象類,類繼承父類都屬於這種關係