读书人

倚赖、关联、聚合、组合的区别(通俗易

发布时间: 2013-10-27 15:21:49 作者: rapoo

依赖、关联、聚合、组合的区别(通俗易懂)


关联:有名的客户和订单的关系以及公司和员工的关系,都是关联关系。还有就是我和我的单车的例子,他们都是一种“拥有”的关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联类以类属性的形式出现在关联类的类定义中,也可以表现为关联类引用了一个类型为被关联类的全局变量。关联可以使单向的,也可以使双向的。

从网上找到的公司和员工的UML图和代码 :

倚赖、关联、聚合、组合的区别(通俗易懂)


可见依赖于与关联亦有动静之别,关联的类“静态”地引用了被关联类的实例变量,而依赖的偶然性也正说明了它的动态性。

2、 聚合与组合同出而异体

聚合与组合其实都是关联的特例,都是整体和部分的关系。他们的区别在于聚合的两个对象之间是可分离的,他们具有各自的生命周期。而组合往往表现为一种唇齿相依的关系。

聚合:一种容纳或曰包含的关系,如同机场和飞机,汽车和轮胎的关系。其实仔细想想,前面的公司和员工的关系也有聚合的味道在里面。

组合:也可称之为强聚合,整体和部分是不可分的,整体的生命周期结束时也就是部分的生命周期到头时。很有名的就是桌子和桌子腿的关系。

聚合的UML图:
倚赖、关联、聚合、组合的区别(通俗易懂)

组合的UML图:



倚赖、关联、聚合、组合的区别(通俗易懂)
########################################################################

根据上面的说明,再加上我对c++的理解,对依赖、关联、聚合、组合的区别再做个简单的总结:

依赖:A类的方法中,形参是B类的变量,或者B类指针或者B类的引用。则A类依赖于B类

关联:A类有成员变量是B类的类型,或者B类的指针类型。则A类关联于B类

组合:组合是关联中的一个特例,A类的成员变量是B类类型,非指针变量。则A类和B类是组合关系。

聚合:聚合是关联中的一个特例,A类的成员变量是B类类型指针,则A类和B类是聚合关系。

读书人网 >其他相关

热点推荐