java聚合
① java怎麼理解組合/聚合關系給個例子最好能將細點
聚合(Aggregation)關系是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關系便整體和個體的關系。與關聯關系一樣,聚合關系也是通過實例變數實現的。但是關聯關系所涉及的兩個類是處在同一層次上的,而在聚合關系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。
組合(Composition)關系是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,組合關系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由後者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發生組合關系,由後者排他地負責生命周期。部分和整體的生命周期一樣。
classDriver{
//使用成員變數形式實現關聯
Carmycar;
publicvoiddrive(){
mycar.run();
}
...
//使用方法參數形式實現關聯
publicvoiddrive(Carcar){
car.run();
}
}
聚合關系是是一種比較強的關聯關系,java中一般使用成員變數形式實現。對象之間存在著整體與部分的關系。例如上例中
classDriver{
//使用成員變數形式實現聚合關系
Carmycar;
publicvoiddrive(){
mycar.run();
}
}
假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產的一部分。則相同的代碼即表示聚合關系了。聚合關系一般使用setter方法給成員變數賦值。
假如賦予如下語義:車是司機的必須有的財產,要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不幹司機了,這個車就砸了,別人誰也別想用。那就表示組合關系了。一般來說,為了表示組合關系,常常會使用構造方法來達到初始化的目的,例如上例中,加上一個以Car為參數的構造方法
publicDriver(Carcar){
mycar=car;
}
所以,關聯、聚合、組合只能配合語義,結合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關聯,聚合,還是組合關系,則是無法判斷的。
② java中類與類之間的關系
類與類之間最常見的關系主要有三種:依賴(uses-a)、聚合(has-a)和繼承(is-a)。
下面以在線書店訂單系統為例,來詳細的講述這三種關系的概念。
在線書店訂單系統的主要功能是:注冊用戶可以登錄到網上書店選購圖書,在線填寫訂單,並支付購書款。書店確認已經收到購書款時,按用戶留下的地址郵寄圖書。可以在這個系統中建立幾個類,有圖書(book)、賬戶(account)、訂單(order)、地址(address)等,如下圖所示:
繼承
繼承就是一個類能調用另一個類的所有數據成員,並在當前類中不需要再重新定義,本章已經講得很明白了。
③ java類之間關系中,一般的關聯關系是怎樣的
關聯關系分為兩種:聚合和組合。聚合:舉個例子,學校類是整體,而學生類是部分。學校與學生都是可以獨立存在的,之間沒有什麼必然的聯系。因此學校與學生就是聚合關系。代碼:
public class Student{
}
public class School{
private List<Student> students ; //學校與學生是聚合關系
}
組合:如Windows的窗口和窗口上的菜單就是組合關系。如果整體被銷毀,部分也必須跟著一起被銷毀,如果所有者被復制,部分也必須一起被復制。,代碼:
public class Menu{
}
public class Window{
private List<Menu> menus ;
}