加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 22:13:42 所属栏目:百科 来源:网络整理
导读:组合,聚合,关联,依赖 的区别 依赖与关联 依赖(Dependency ) : 含义:是类与类之间的连接,表示一个类依赖于另外一个类的定义;依赖关系仅仅描述了类与类之间的一种使用与被使用的关系; 体现:在Java和C++中体现为局部变量、方法/函数的参数或者是对静态方法的
组合,聚合,关联,依赖 的区别


依赖与关联

依赖(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("开动");
}
}


[java]
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:


[java]
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");
}

}


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

组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。
在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。
现实生活中:
人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。 class Hand{ } class Computer{ } 组合: class Person{ private Hand hand; public Person(){ hand = new Hand(); } } //在构造函数中创建对象 聚合: class Person{ private Computer computer; public setComputer(){ computer = new Computer(); } }

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读