一 、一般化關(guān)系

二 :


三 :

四 :

五 :

類與類之間的關(guān)系對(duì)于理解面向?qū)ο缶哂泻苤匾淖饔?,存在以下關(guān)系:
(1)泛化(Generalization) :狗與動(dòng)物 (空箭頭)
(2)關(guān)聯(lián)(Association) :公司與員工有特定的某種關(guān)系 (實(shí)線)
(3)依賴(Dependency) :人依賴螺絲刀 (虛線箭頭)
(4)聚合(Aggregation) : 電腦和CPU,主板 (菱形空間頭)


詳細(xì)展開 :
一 .泛化(Generalization)
表示類與類之間的繼承關(guān)系,接口與接口之間的繼承關(guān)系,或類對(duì)接口的實(shí)現(xiàn)關(guān)系。
一般泛化的關(guān)系是從子類指向父類的:
父類 父類實(shí)例=new 子類()

/**
* 動(dòng)物類
*/
public class Animal{
}
/**
* 老虎類
*/
public class Tiger extends Animal{
}
/**
* 一個(gè)測(cè)試類
*/
public class Demo{
public void test() {
//老虎的實(shí)例 也屬于動(dòng)物類型
Animal animal = new Tiger();
}
} 二 .依賴(Dependency)
對(duì)于兩個(gè)相對(duì)獨(dú)立的對(duì)象,當(dāng)一個(gè)對(duì)象(螺絲刀)負(fù)責(zé)構(gòu)造另一個(gè)對(duì)象(人)的實(shí)例,或者一個(gè)對(duì)象(人)依賴另一個(gè)對(duì)象(螺絲刀)的服務(wù)時(shí),這兩個(gè)對(duì)象之間主要體現(xiàn)為依賴關(guān)系。
下面這個(gè)例子顯然屬于后者 :人要做一個(gè)擰螺絲的動(dòng)作,他就要依賴于 螺絲刀對(duì)象,因?yàn)橹挥新萁z刀對(duì)象才提供擰螺絲的服務(wù)。

/**
* 說(shuō)明 :人 這個(gè) 類
*/
public class Person {
/**
* 人擁有的一個(gè) 擰螺絲 的 動(dòng)作 依賴于螺絲刀這個(gè)類
* @param screwdriver :螺絲刀類
*/
public void screw(Screwdriver screwdriver){
//螺絲刀類提供了擰螺絲這個(gè)服務(wù)
screwdriver.screw();
}
}三 .關(guān)聯(lián)(Association)
對(duì)于兩個(gè)相對(duì)獨(dú)立的對(duì)象,當(dāng)一個(gè)對(duì)象的實(shí)例與另一個(gè)對(duì)象的一些特定實(shí)例存在固定的對(duì)應(yīng)關(guān)系時(shí),這兩個(gè)對(duì)象之間為關(guān)聯(lián)關(guān)系。
關(guān)聯(lián)關(guān)系是使用實(shí)例變量來(lái)實(shí)現(xiàn)
比如客戶和訂單,每個(gè)訂單對(duì)應(yīng)特定的客戶,每個(gè)客戶對(duì)應(yīng)一些特定的訂單;再例如公司和員工,每個(gè)公司對(duì)應(yīng)一些特定的員工,每個(gè)員工對(duì)應(yīng)一特定的公司

/**
* 公司
*/
public class Company{
//員工
private Employee employee;
/**
* 公司運(yùn)作
*/
public void run(){
employee.startWorking();
}
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee=employee;
}
} 四 : 聚合(Aggregation)
當(dāng)對(duì)象A被加入到對(duì)象B中,成為對(duì)象B的組成部分時(shí),對(duì)象B和對(duì)象A之間為聚集關(guān)系。聚合是關(guān)聯(lián)關(guān)系的一種,是較強(qiáng)的關(guān)聯(lián)關(guān)系,強(qiáng)調(diào)的是整體與部分之間的關(guān)系。
[關(guān)聯(lián)與聚合的區(qū)別]
(1)關(guān)聯(lián)關(guān)系所涉及的兩個(gè)對(duì)象是處在同一個(gè)層次上的。比如人和自行車就是一種關(guān)聯(lián)關(guān)系,而不是聚合關(guān)系,因?yàn)槿瞬皇怯勺孕熊嚱M成的。
聚合關(guān)系涉及的兩個(gè)對(duì)象處于不平等的層次上,一個(gè)代表整體,一個(gè)代表部分。比如電腦和它的顯示器、鍵盤、主板以及內(nèi)存就是聚集關(guān)系,因?yàn)橹靼迨请娔X的組成部分。
(2)對(duì)于具有聚集關(guān)系(尤其是強(qiáng)聚集關(guān)系)的兩個(gè)對(duì)象,整體對(duì)象會(huì)制約它的組成對(duì)象的生命周期。部分類的對(duì)象不能單獨(dú)存在,它的生命周期依賴于整體類的對(duì)象的生命周期,當(dāng)整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內(nèi)存)拆了下來(lái)。

public class Computer{
private CPU cpu;
public CPU getCPU(){
return cpu;
}
public void setCPU(CPU cpu){
this.cpu=cpu;
}
//開啟電腦
public void start(){
//cpu運(yùn)作
cpu.run();
}
}新聞熱點(diǎn)
疑難解答