码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象中的耦合概念详解

时间:2018-05-16 12:57:52      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:iat   其它   font   nbsp   类的属性   需要   dep   初始   关系   

在面向对象的程序设计中,引导我们的基本思想就是:“一切皆对象”。那么我们可以把对象与对象的关系总体分为四类。分别是:依赖、关联、聚合和组合。首先我们先看一下 书上的定义:

  • 依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。
  • 关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。
  • 聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
  • 组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。

                                                                      ——摘自《Java面向对象编程》

 

  1.依赖:

  可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;

class A{
    public void fun_A(){
       ........
    }
}
class B{
    //使用参数方式发生与A的依赖关系
    public void fun(A a){
         a.fun_A();
    }  

    //使用创建对象的方式与A发生依赖关系
     public void fun(){
         A a = new A();
         a.fun_A();
    }
}

   2.关联

  关联是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,也可以使双向的。依赖和关联的区别在于依赖是使用,关联是拥有.

 

class A{   
    public void fun_A(){   
        ............   
    }   
}   
  
class Person{  
     private A a ;  
    
    public Person(A a){  
       this.a = a ;  
    }  
    
    public void work(){  
       a.fun_A() ;  
    }  
}

 

   3.聚合

  聚合是关联关系的一种,它是一种强关联关系(has-a);聚合关系是整体和个体/部分之间的关系;关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中,代表个体/部分的对象有可能会被多个代表整体的对象所共享;表现在代码层面上就是在构造器初始化时将两个类关联起来。代码如下:

class A{   
           
    }   

class B{   
        private A a ; 
        //与上面关联的代码不同之处在于构造B时必须同时构造B,也就是说B是A的不可缺少的一部分      
        public B(A a){   
            this.a = a ;   
        }   
    }   
  

 

   4.组合

  组合也是关联关系的一种(is-a),但它是比聚合关系更强的关系.组合关系要求聚合关系中代表整体的对象要负责代表个体/部分的对象的整个生命周期;组合关系不能共享;在组合关系中,如果代表整体的对象被销毁或破坏,那么代表个体/部分的对象也一定会被销毁或破坏,而聚在合关系中,代表个体/部分的对象则有可能被多个代表整体的对象所共享,而不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏;

 

class A{   
 ...........
}   
  
class B{  
      private A a;  
      public B(){  
           a = new A() ;  
      }  
  
}  

 

 总结:

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


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

 

面向对象中的耦合概念详解

标签:iat   其它   font   nbsp   类的属性   需要   dep   初始   关系   

原文地址:https://www.cnblogs.com/shuaiblog/p/9045013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!