zoukankan      html  css  js  c++  java
  • 组合,聚合,关联,依赖 的区别

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


    依赖与关联

    依赖(Dependency ) :

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

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

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

    UML图表示的依赖关系:

    依赖:

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

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

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


    Boat:

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

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


    关联(Association):

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

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

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

    UML图表示的关联关系:

    关联:

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

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

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

    也可以使双向的。


    Computer:

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

    Person:

    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:

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

    Student :

    class Student{
    		
    	}



    组合(Composition):

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

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

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

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

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

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

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

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

    UML图表示的组合关系:


    Room:

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


    House:

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

    聚合和组合的区别:聚合是个体离开了整体,依然可以存在;

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



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

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

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



    参考:http://www.c-sharpcorner.com/UploadFile/pcurnow/compagg07272007062838AM/compagg.aspx

    http://www.cnblogs.com/millen/archive/2009/04/27/1444618.html

    http://stackoverflow.com/questions/1644273/what-is-the-difference-between-aggregation-composition-and-dependency

    http://www.cnblogs.com/aicro/archive/2010/08/23/1806584.html

  • 相关阅读:
    kafka 控制台命令
    VMware centos7 如何配置静态ip并且可上网
    kafka学习-坑篇
    IDEA中Git的更新、提交、还原方法
    深入理解Java的接口和抽象类
    java动态代理实现与原理详细分析
    注解 @EnableFeignClients 工作原理
    com.mysql.cj.jdbc.Driver 新特性jdbc.url连接供参考
    插入数据库中文乱码
    logback配置文件
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207350.html
Copyright © 2011-2022 走看看