組合,聚合,關聯,依賴 的區別


依賴(Dependency ) :

含義:是類與類之間的鏈接,表示一個類依賴於另一個類的定義;依賴關係僅僅描述了類與類之間的一種使用與被使用的關係;

體現:在Java和C++中體現爲局部變量、方法/函數的參數或者是對靜態方法的調用;

舉例:人依賴於水和空氣;汽車依賴汽油;

UML圖表示的依賴關係:

依賴:

好比說我要過河,沒有橋怎麼辦,我就去借來一條小船渡過去。我與小船的關係僅僅是使用(借用)的關係。
表如今代碼上,爲依賴的類的某個方法以被依賴的類做爲其參數。或者是class A 的某個方法創造了 class B 的實例抑或對class B的靜態方法的調用。若是A依賴於B,那意味着B的變化可能要求A也發生變化;

 
 java

[java] view plain copy數組

 print?app

  1. static class Boat{   
  2.         public static void row(){   
  3.             System.out.println("開動");   
  4.         }   
  5.     }   
  6.   
  7.   
  8. class Person{   
  9.         public void crossRiver(Boat boat){   
  10.             boat.row() ;   
  11.         }   
  12.            
  13.         public void fishing(){   
  14.             Boat boat = new Boat() ;   
  15.             boat.row() ;   
  16.   }  
  17.     
  18.   public void patrol(){  
  19.    Boat.row() ;  
  20.   }  
  21.  }  



關聯(Association):

含義:類與類之間的連結,關聯關係使一個類知道另一個類的屬性和方法;一般含有「知道」,「瞭解」的含義。關聯能夠是雙向的,也能夠是單向的

體現:在Java和C++中,關聯關係是經過成員變量來實現的;

舉例:「漁民」須要知道「天氣」狀況纔可以出海

UML圖表示的關聯關係:

關聯:

有名的例子:客戶和訂單的關係以及公司和員工的關係,都是關聯關係。還有就是我和個人單車的例子,他們都是一種「擁有」的關係。表如今代碼上,就是一個類包含另外一個類的實例,一般表現爲被關聯類以類屬性的形式出如今關聯類的類定義中,也能夠表現爲關聯類引用了一個類型爲被關聯類的全局變量。關聯可使單向的,也可使雙向的。


 函數

[java] view plain copythis

 print?spa

  1. class Computer{   
  2.     public void develop(){   
  3.         System.out.println("Develop ");   
  4.     }   
  5. }   
  6.   
  7. class Person{  
  8.   private Computer computer ;  
  9.     
  10.   public Person(Computer computer){  
  11.    this.computer = computer ;  
  12.   }  
  13.     
  14.   public void work(){  
  15.    computer.develop() ;  
  16.    System.out.println("work");  
  17.   }  
  18.     
  19.  }  


依賴和關聯的區別在於依賴是使用,關聯是擁有.
-------------------------------------------------------------------------------------------------------------

聚合(aggregation):

 含義:是關聯關係的一種,是一種強關聯關係(has-a);聚合關係是總體和個體/部分之間的關係;關聯關係的兩個類處於同一個層次上,而聚合關係的兩個類處於不一樣的層次上,一個是總體,一個是個體/部分;在聚合關係中,表明個體/部分的對象有可能會被多個表明總體的對象所共享;

體現:C++中,聚合關係經過將被聚合者的(數組)指針做爲內部成員來實現的;

圖示:空心菱形 + 實線 + 箭頭;箭頭指向被聚合的類,也就是說,箭頭指向個體/部分;

舉例:班級和學生,當班級刪除以後,學生仍是存在,學生還可能被培訓機構引用

UML圖表示的聚合關係:

 
 .net

[java] view plain copy指針

 print?對象

  1. class Classes{   
  2.         private Student student ;   
  3.         public Classes(Student student){   
  4.             this.student = student ;   
  5.         }   
  6.     }   
  7.   
  8. class Student{   
  9.            
  10.     }   



組合(Composition):


含義:它也是關聯關係的一種(is-a),但它是比聚合關係更強的關係.組合關係要求聚合關係中表明總體的對象要負責表明個體/部分的對象的整個生命週期;組合關係不能共享;在組合關係中,若是表明總體的對象被銷燬或破壞,那麼表明個體/部分的對象也必定會被銷燬或破壞,而聚在合關係中,表明個體/部分的對象則有可能被多個表明總體的對象所共享,而不必定會隨着某個表明總體的對象被銷燬或破壞而被銷燬或破壞;blog

體現:在Java和C++中,組合關係是經過成員變量來實現的;

圖示:實心菱形 + 實線 + 箭頭;箭頭指向表明個體/部分的對象,也就是被合成/組合的類的對象;

舉例:一我的由頭、四肢、等各類器官組成,由於人與這些器官具備相同的生命週期,人死了,這些器官也掛了;房子和房間的關係,當房子沒有了,房間一樣不可能單獨存在。

UML圖表示的組合關係:

 

[java] view plain copy

 print?

  1. class Room{   
  2.     public Room createRoom(){   
  3.         System.out.println("建立房間");   
  4.         return new Room() ;   
  5.     }   
  6. }   
  7.   
  8. class House{  
  9.   private Room room ;  
  10.   public House(){  
  11.    room = new Room() ;  
  12.   }  
  13.     
  14.   public void createHouse(){  
  15.    room.createRoom() ;  
  16.      
  17.   }  
  18.  }  

 

 

聚合和組合的區別:聚合是個體離開了總體,依然能夠存在.
                                       組合是個體和總體不能夠分開,個體不能離開總體單獨存在.


依賴,關聯 和聚合,組合的區別:依賴,關聯 : 類之間的關係是在同一層次上.                                                                聚合,組合: 類之間的關係表現爲總體和部分.

相關文章
相關標籤/搜索