關聯--依賴、組合--聚合 聯系與區別:
依賴是比關聯弱的關系,關聯代表一種結構化的關系,體現在生成的代碼中,以java為例:
若類A單向關聯指向類B,則在類A中存在一個屬性B b。
若類A依賴類B,則不會有這個屬性,類B的實例可能存在于某個方法調用的參數中,或某個方法的局部變量中。
例如代碼:
依賴:----存在于某個方法調用的參數中,或某個方法的局部變量中。
Person類與Screwdriver類的依賴關系
[代碼表現]
public class Person{
/** 擰螺絲 */
public void screw(Screwdriver screwdriver){
screwdriver.screw();
}
}
關聯:---存在一個屬性
公司(Company)和員工(Employee)的關聯關系
[代碼表現]
public class Company{
private Employee employee;
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee=employee;
}
//公司運作
public void run(){
employee.startWorking();
}
}
聚合: 空心菱形加實線箭頭表示
表示C9聚合C10,但是C10可以離開C9而獨立存在(獨立存在的意思是在某個應用的問題域中這個類的存在有意義。這句話怎么解,請看下面組合里的解釋)。
同構性,主體和部分不具有生命期的一致性
課程組可由多個學生組成,課程組撤消了,學生還活得好好的,這是聚合。
組合(也有人稱為包容):一般是實心菱形加實線箭頭表示
異構性,部分和主體具有生命期上的一致性
表示的是C8被C7包容,而且C8不能離開C7而獨立存在。但這是視問題域而定的,例如在關心汽車的領域里,輪胎是一定要組合在汽車類中的,因為它離開了汽車就沒有意義了。但是在賣輪胎的店鋪業務里,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。在《敏捷開發》中還說到,A組合B,則A需要知道B的生存周期,即可能A負責生成或者釋放B,或者A通過某種途徑知道B的生成和釋放。
組合的例子:你顯示屏上的瀏覽器窗口,關閉瀏覽器,上面的按紐死掉不見了,這是組合(再打開一個瀏覽窗口,按紐已經不是原來的了)。