组合,聚合,关联,依赖 的区别


依赖(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.  }  

 

 

聚合和组合的区别:聚合是个体离开了总体,依然能够存在.
                                       组合是个体和总体不能够分开,个体不能离开总体单独存在.


依赖,关联 和聚合,组合的区别:依赖,关联 : 类之间的关系是在同一层次上.                                                                聚合,组合: 类之间的关系表现为总体和部分.

相关文章
相关标签/搜索