java的類之間的關(guān)系

java的類之間的關(guān)系:泛化、依賴、關(guān)聯(lián)、實(shí)現(xiàn)、聚合、組合
泛化:
? 泛化關(guān)系(Generalization)也就是繼承關(guān)系,也稱為“is-a-kind-of”關(guān)系,泛化關(guān)系用于描述父類與子類之間的關(guān)系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛 化關(guān)系用帶空心三角形的直線來表示。
? 在代碼實(shí)現(xiàn)時,使用面向?qū)ο蟮睦^承機(jī)制來實(shí)現(xiàn)泛化關(guān)系,如在Java語言中使用extends關(guān)鍵字、在C++/C#中使用冒號“:”來實(shí)現(xiàn)。

泛化對應(yīng)Java中繼承關(guān)系,即子類繼承父類中出private修飾外的所有東西(變量、方法等)。示例代碼:

public class Animal {
}
public class Tiger extends Animal {
}

在UML當(dāng)中,對泛化關(guān)系有三個要求:
1、子類與父類應(yīng)該完全一致,父類所具有的屬性、操作,子類應(yīng)該都有;

2、子類中除了與父類一致的信息以外,還包括額外的信息;

3、可以使用父類的實(shí)例的地方,也可以使用子類的實(shí)例;

依賴:
? 依賴關(guān)系(Dependency) 是一種使用關(guān)系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關(guān)系。大多數(shù)情況下,依 賴關(guān)系體現(xiàn)在某個類的方法使用另一個類的對象作為參數(shù)。
? 在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

public class Screwdriver {    //螺絲刀,作為人類的工具,是用來被人類使用的
}
public class Person{
       public void screw(Screwdriver src){    //擰螺絲,需使用螺絲刀
}
}

依賴關(guān)系有如下三種情況:
1、A類是B類中的(某中方法的)局部變量;

2、A類是B類方法當(dāng)中的一個參數(shù);

3、A類向B類發(fā)送消息,從而影響B(tài)類發(fā)生變化;

關(guān)聯(lián)(Association):
是一種結(jié)構(gòu)關(guān)系,說明一個事物的對象與另一個事物的對象相聯(lián)系。給定有關(guān)聯(lián)的兩個類,可以從一個類的對象得到另一個類的對象。關(guān)聯(lián)有兩元關(guān)系和多元關(guān)系。兩元關(guān)系是指一種一對一的關(guān)系,多元關(guān)系是一對多或多對一的關(guān)系。兩個類之間的簡單關(guān)聯(lián)表示了兩個同等地位類之間的結(jié)構(gòu)關(guān)系。當(dāng)你想要表示結(jié)構(gòu)化關(guān)系時使用關(guān)聯(lián)。
? 關(guān)聯(lián)關(guān)系(Association) 是類與類之間最常用的一種關(guān)系,它是一種結(jié)構(gòu)化關(guān)系,用于表示一類對象與另一類對象之間有聯(lián)系。
? 在UML類圖中,用實(shí)線連接有關(guān)聯(lián)的對象所對應(yīng)的類,在使用Java、C#和C++等編程語言實(shí)現(xiàn)關(guān)聯(lián)關(guān)系時,通常將一個類的對象作為另一個類的屬性。
? 在使用類圖表示關(guān)聯(lián)關(guān)系時可以在關(guān)聯(lián)線上標(biāo)注角色名。

分為幾種情況:
雙向關(guān)聯(lián)

public class Customer  
{  
    private Product[] products;  
    ……  
}  
public class Product  
{  
    private Customer customer;  
    ……  
}  

單向關(guān)聯(lián)

public class Customer  
{  
    private Address address;  
    ……  
}  
  
public class Address  
{  
    ……  
}  

自關(guān)聯(lián)

public class Node  
{  
    private Node subNode;  
    ……  
} 

聚合關(guān)系(Aggregation)
? 聚合關(guān)系(Aggregation) 表示一個整體與部分的關(guān)系。通常在定義一個整體類后,再去分析這個整體類的組成結(jié)構(gòu),從而找出一些成員類,該整體類和成員類之間就形成了聚合 關(guān)系。
? 在聚合關(guān)系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨(dú)立存在。在UML中,聚合關(guān)系用帶空心菱形的直線表示。

public class Student{
}
public class School{  
       private List<Student> students ;  //學(xué)校與學(xué)生是聚合關(guān)系
}

例子:

組合關(guān)系(Composition)
組合關(guān)系(Composition)也表示類之間整體和部分的關(guān)系,但是組合關(guān)系中部分和整體具有統(tǒng)一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之 間具有同生共死的關(guān)系。
? 在組合關(guān)系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。

public class Menu{
}
public class Window{
       private List<Menu> menus ;
}

菜單的存在前提是窗口的存在,兩者之間存在很強(qiáng)的擁有關(guān)系。且窗口對菜單的生命周期負(fù)責(zé),只有在窗口創(chuàng)建之后,菜單才能夠創(chuàng)建,菜單必須在窗口銷毀之前銷毀。因此Window與Menu之間是組合關(guān)系。

實(shí)現(xiàn)關(guān)系(Implementation)
? 接口之間也可以有與類之間關(guān)系類似的繼承關(guān)系和依賴關(guān)系,但是接口和類之間還存在一種實(shí)現(xiàn)關(guān)系(Realization),在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所 聲明的操作。在UML中,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來表示。

public interface Vehicle   
{  
    public void move();  
}  
public class Ship implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  
public class Car implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  

總結(jié):
關(guān)于關(guān)聯(lián),聚合,組合在實(shí)現(xiàn)上并沒有顯著區(qū)別,相區(qū)別他們只有通過判斷關(guān)系雙方之間的實(shí)際關(guān)系,如關(guān)系強(qiáng)弱、創(chuàng)建與銷毀之間有無必要關(guān)聯(lián)等。
它們的強(qiáng)弱關(guān)系是沒有異議的:依賴 < 關(guān)聯(lián) < 聚合 < 組合<泛化(繼承)

實(shí)現(xiàn)方式區(qū)別:
依賴關(guān)系:關(guān)系對象出現(xiàn)在局部變量或者方法的參數(shù)里,或者關(guān)系類的靜態(tài)方法被調(diào)用
(2) 關(guān)聯(lián)關(guān)系:關(guān)系對象出現(xiàn)在實(shí)例變量中
(3) 聚合關(guān)系:關(guān)系對象出現(xiàn)在實(shí)例變量中
(4) 合成關(guān)系:關(guān)系對象出現(xiàn)在實(shí)例變量中
(5) Generalization: extends
(6) 實(shí)現(xiàn): implements

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容