類與類之間的關系-依賴,關聯,聚合,組合,繼承泛化的區別


1)依賴
依賴關系是類與類之間的聯接。一個類依賴於另一個類的定義。如,一個人(Person)可以買車(Car)和房子(House),Person類依賴於Car和House的定義,因為Person引入了Car和House。與關聯不同的是,Person類中沒有Car和House的屬性,Car和House的實例是以參量的方式傳入到buy()方法中的。一般而言,依賴關系在Java語言中體現為局部變量,方法形參,或者對靜態方法的調用。

2)關聯
關聯是類與類之間的聯接,使一個類知道另一個類的屬性和方法。關聯可以是雙向,也可以是單向的。一般使用成員變量來實現。

3)聚合
聚合是一種強的關聯關系。是整體和個體之間的關系。例如,汽車類與引擎類,輪胎類之間的關系就是整體與個體之間的關系。與關聯關系一樣,聚合關系也是通過實例變量實現的。但是關聯關系涉及的兩個類在同一層次,而聚合關系中兩個類處在不平等的層次上,一個代表整體,一個代表部分。

4)組合
組合也是關聯關系的一種,一種比聚合關系強的關系。組合關系中的部分類不能獨立於整體類存在。整體類和部分類有相同的生命周期。如Person類和Leg類。

5)繼承/泛化
泛化和繼承其實是一個逆過程 泛化就是有子類抽象出一個父類 而繼承就是由父類具體化一個子類 例如足球比聯賽跟什么西甲 意甲 英超之間就是泛化/繼承的關系

6)組合和聚合的區別
組合和聚合都屬於關聯,所以它們之間難免有相似之處,區別舉例來說明:
程老師的《大話》里舉大那個大雁的例子很貼切 在此我就借用一下 大雁喜歡熱鬧害怕孤獨 所以它們一直過着群居的生活 這樣就有了雁群 每一只大雁都有自己的雁群 每個雁群都有好多大雁 大雁與雁群的這種關系就可以稱之為聚合 另外每只大雁都有兩只翅膀 大雁與雁翅的關系就叫做組合 有此可見 聚合的關系明顯沒有組合緊密 大雁不會因為它們的群主將雁群解散而無法生存 而雁翅就無法脫離大雁而單獨生存——組合關系的類具有相同的生命周期
聚合關系圖:

聚合關系圖:

雁群類:

public class GooseGroup
{
    publi Goose goose;
    public GooseGroup(Goose goose){
        this.goose=goose;
    }
}

大雁類:

public class Goose{
    public Wings wings;
    public Goose()
    {
        wings=new Wings();
    }
}    

從構造函數來看,GooseGroup的構造函數要用到Goose作為參數把值傳進來,Goose可以脫離GooseGroup獨立存在。
組合關系中整體類含有部分類的實例化,Goose在實例化之前,一定要先實例化Wings,兩個類緊密耦合在一起,它們有相同的生命周期,Wings不能獨立於Goose存在。

從信息封裝來看,聚合關系中,客戶端同時了解GooseGroup和Goose,因為它們是獨立的。
而在組合關系中,客戶端只認識大雁類,根本不知道翅膀類的存在,因為翅膀類被嚴密封裝在大雁類中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM