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

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

 

 

依赖与关联

依赖(Dependency ) :

含义:是类与类之间的连接,表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系;

体现:在Java和C++中体现为局部变量、方法/函数的参数或者是对静态方法的调用;

举例:人依赖于水和空气;汽车依赖汽油;


UML图表示的依赖关系:


依赖:

比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。

表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。或者是class A 的某个方法创造了 class B 的

实例抑或对class B的静态方法的调用。如果A依赖于B,那意味着B的变化可能要求A也发生变化;

 

\

Boat:


[java]
static class Boat{ 
        public static void row(){ 
            System.out.println("开动"); 
        } 
    } 

static class Boat{
  public static void row(){
   System.out.println("开动");
  }
 }Person:


[java]
class Person{ 
        public void crossRiver(Boat boat){ 
            boat.row() ; 
        } 
         
        public void fishing(){ 
            Boat boat = new Boat() ; 
            boat.row() ; 

class Person{
  public void crossRiver(Boat boat){
   boat.row() ;
  }
  
  public void fishing(){
   Boat boat = new Boat() ;
   boat.row() ;[java] view plaincopyprint?    } 
     
    public void patrol(){ 
        Boat.row() ; 
    } 

  }
  
  public void patrol(){
   Boat.row() ;
  }
 }


关联(Association):


含义:类与类之间的连结,关联关系使一个类知道另外一个类的属性和方法;通常含有“知道”,“了解”的含义。关联可以是双向的,也可以是单向的

体现:在Java和C++中,关联关系是通过成员变量来实现的;

举例:“渔民”需要知道“天气”情况才能够出海

UML图表示的关联关系:


关联:

有名的例子:客户和订单的关系以及公司和员工的关系,都是关联关系。还有就是我和我的单车的例子,他们都

是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式

出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,

也可以使双向的。

 \
 


Computer:


[java]
class Computer{ 
    public void develop(){ 
        System.out.println("Develop "); 
    } 

 class Computer{
  public void develop(){
   System.out.println("Develop ");
  }
 }
 


Person:


[java]
class Person{ 
        private Computer computer ; 
         
        public Person(Computer computer){ 
            this.computer = computer ; 
        } 
         
        public void work(){ 
            computer.develop() ; 
            System.out.println("work"); 
        } 
         
    } 

class Person{
  private Computer computer ;
  
  public Person(Computer computer){
   this.computer = computer ;
  }
  
  public void work(){
   computer.develop() ;
   System.out.println("work");
  }
  
 }

 

 


依赖和关联的区别在于依赖是使用,关联是拥有。
-------------------------------------------------------------------------------------------------------------

聚合(aggregation):

 含义:是关联关系的一种,是一种强关联关系(has-a);聚合关系是整体和个体/部分之间的关系;关联关系的两

个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中,

代表个体/部分的对象有可能会被多个代表整体的对象所共享;

 体现:C++中,聚合关系通过将被聚合者的(数组)指针作为内部成员来实现的;

 图示:空心菱形 + 实线 + 箭头;箭头指向被聚合的类,也就是说,箭头指向个体/部分;

 举例:班级和学生,当班级删除之后,学生还是存在,学生还可能被培训机构引用

UML图表示的聚合关系:

 

 \
 

Classes:


[java]
class Classes{ 
        private Student student ; 
        public Classes(Student student){ 
            this.student = student ; 
        } 
    } 

class Classes{
  private Student student ;
  public Classes(Student student){
   this.student = student ;
  }
 }
Student :


[java]
class Student{ 
         
    } 

class Student{
  
 }

 

 


组合(Composition):

含义:它也是关联关系的一种(is-a),但它是比聚合关系更强的关系.组合关系要求聚合关系中代表整体的对象

要负责代表个体/部分的对象的整个生命周期;组合关系不能共享;在组合关系中,如果代表整体的对象被销毁或

破坏,那么代表个体/部分的对象也一定会被销毁或破坏,而聚在合关系中,代表个体/部分的对象则有可能被多个

代表整体的对象所共享,而不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏;

体现:在Java和C++中,组合关系是通过成员变量来实现的;

图示:实心菱形 + 实线 + 箭头;箭头指向代表个体/部分的对象,也就是被合成/组合的类的对象;

举例:一个人由头、四肢、等各种器官组成,因为人与这些器官具有相同的生命周期,人死了,这些器官也挂

了;房子和房间的关系,当房子没有了,房间同样不可能单独存在。

UML图表示的组合关系:

 \
 


Room:


[java]
class Room{ 
    public Room createRoom(){ 
        System.out.println("创建房间"); 
        return new Room() ; 
    } 

 class Room{
  public Room createRoom(){
   System.out.println("创建房间");
   return new Room() ;
  }
 }

 

House:


[java]
class House{ 
        private Room room ; 
        public House(){ 
            room = new Room() ; 
        } 
         
        public void createHouse(){ 
            room.createRoom() ; 
             
        } 
         
    } 

class House{
  private Room room ;
  public House(){
   room = new Room() ;
  }
  
  public void createHouse(){
   room.createRoom() ;
   
  }
  
 }
聚合和组合的区别:聚合是个体离开了整体,依然可以存在;

      组合是个体和整体不可以分开,个体不能离开整体单独存在。

 

 

 

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

依赖,关联 : 类之间的关系是在同一层次上;

聚合,组合: 类之间的关系表现为整体和部分。


转载至 

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

 

 

依赖与关联

依赖(Dependency ) :

含义:是类与类之间的连接,表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系;

体现:在Java和C++中体现为局部变量、方法/函数的参数或者是对静态方法的调用;

举例:人依赖于水和空气;汽车依赖汽油;


UML图表示的依赖关系:


依赖:

比如说我要过河,没有桥怎么办,我就去借来一条小船渡过去。我与小船的关系仅仅是使用(借用)的关系。

表现在代码上,为依赖的类的某个方法以被依赖的类作为其参数。或者是class A 的某个方法创造了 class B 的

实例抑或对class B的静态方法的调用。如果A依赖于B,那意味着B的变化可能要求A也发生变化;

 

\

Boat:


[java]
static class Boat{ 
        public static void row(){ 
            System.out.println("开动"); 
        } 
    } 

static class Boat{
  public static void row(){
   System.out.println("开动");
  }
 }Person:


[java]
class Person{ 
        public void crossRiver(Boat boat){ 
            boat.row() ; 
        } 
         
        public void fishing(){ 
            Boat boat = new Boat() ; 
            boat.row() ; 

class Person{
  public void crossRiver(Boat boat){
   boat.row() ;
  }
  
  public void fishing(){
   Boat boat = new Boat() ;
   boat.row() ;[java] view plaincopyprint?    } 
     
    public void patrol(){ 
        Boat.row() ; 
    } 

  }
  
  public void patrol(){
   Boat.row() ;
  }
 }


关联(Association):


含义:类与类之间的连结,关联关系使一个类知道另外一个类的属性和方法;通常含有“知道”,“了解”的含义。关联可以是双向的,也可以是单向的

体现:在Java和C++中,关联关系是通过成员变量来实现的;

举例:“渔民”需要知道“天气”情况才能够出海

UML图表示的关联关系:


关联:

有名的例子:客户和订单的关系以及公司和员工的关系,都是关联关系。还有就是我和我的单车的例子,他们都

是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式

出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,

也可以使双向的。

 \
 


Computer:


[java]
class Computer{ 
    public void develop(){ 
        System.out.println("Develop "); 
    } 

 class Computer{
  public void develop(){
   System.out.println("Develop ");
  }
 }
 


Person:


[java]
class Person{ 
        private Computer computer ; 
         
        public Person(Computer computer){ 
            this.computer = computer ; 
        } 
         
        public void work(){ 
            computer.develop() ; 
            System.out.println("work"); 
        } 
         
    } 

class Person{
  private Computer computer ;
  
  public Person(Computer computer){
   this.computer = computer ;
  }
  
  public void work(){
   computer.develop() ;
   System.out.println("work");
  }
  
 }

 

 


依赖和关联的区别在于依赖是使用,关联是拥有。
-------------------------------------------------------------------------------------------------------------

聚合(aggregation):

 含义:是关联关系的一种,是一种强关联关系(has-a);聚合关系是整体和个体/部分之间的关系;关联关系的两

个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中,

代表个体/部分的对象有可能会被多个代表整体的对象所共享;

 体现:C++中,聚合关系通过将被聚合者的(数组)指针作为内部成员来实现的;

 图示:空心菱形 + 实线 + 箭头;箭头指向被聚合的类,也就是说,箭头指向个体/部分;

 举例:班级和学生,当班级删除之后,学生还是存在,学生还可能被培训机构引用

UML图表示的聚合关系:

 

 \
 

Classes:


[java]
class Classes{ 
        private Student student ; 
        public Classes(Student student){ 
            this.student = student ; 
        } 
    } 

class Classes{
  private Student student ;
  public Classes(Student student){
   this.student = student ;
  }
 }
Student :


[java]
class Student{ 
         
    } 

class Student{
  
 }

 

 


组合(Composition):

含义:它也是关联关系的一种(is-a),但它是比聚合关系更强的关系.组合关系要求聚合关系中代表整体的对象

要负责代表个体/部分的对象的整个生命周期;组合关系不能共享;在组合关系中,如果代表整体的对象被销毁或

破坏,那么代表个体/部分的对象也一定会被销毁或破坏,而聚在合关系中,代表个体/部分的对象则有可能被多个

代表整体的对象所共享,而不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏;

体现:在Java和C++中,组合关系是通过成员变量来实现的;

图示:实心菱形 + 实线 + 箭头;箭头指向代表个体/部分的对象,也就是被合成/组合的类的对象;

举例:一个人由头、四肢、等各种器官组成,因为人与这些器官具有相同的生命周期,人死了,这些器官也挂

了;房子和房间的关系,当房子没有了,房间同样不可能单独存在。

UML图表示的组合关系:

 \
 


Room:


[java]
class Room{ 
    public Room createRoom(){ 
        System.out.println("创建房间"); 
        return new Room() ; 
    } 

 class Room{
  public Room createRoom(){
   System.out.println("创建房间");
   return new Room() ;
  }
 }

 

House:


[java]
class House{ 
        private Room room ; 
        public House(){ 
            room = new Room() ; 
        } 
         
        public void createHouse(){ 
            room.createRoom() ; 
             
        } 
         
    } 

class House{
  private Room room ;
  public House(){
   room = new Room() ;
  }
  
  public void createHouse(){
   room.createRoom() ;
   
  }
  
 }
聚合和组合的区别:聚合是个体离开了整体,依然可以存在;

      组合是个体和整体不可以分开,个体不能离开整体单独存在。

 

 

 

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

依赖,关联 : 类之间的关系是在同一层次上;

聚合,组合: 类之间的关系表现为整体和部分。

转载至 http://www.2cto.com/kf/201304/201137.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值