论UML中组合与聚合的关系

大家都知道,UML中有四种关系--关联、实现、泛化、依赖。其中,关联分为普通关联、组合和聚合。那么都表示整体与部分的组合和聚合到底有什么样的不同呢?它们之间有怎样的联系呢?

1.联系

首先, 聚合和组合是表示整体与部分之间关系的两种形式。

其次,都用一条带有菱形的符号表示。

2.区别

虽然同样是整体与部分的关系表示,但是绝活通常是在定义好一个整体类后,在分析整体类的组成结构,找出一些类与该整体形成了聚合关系,并不要求整体和部分统一生存。就是说聚合中的部分可以脱离整体单独生存。

而组合中却要求整体和部分具有统一的生存期,即一旦整体不存在,部分也就不复存在。整体与部分之间具有同生死共存亡的关系。

下面就用生活中的一个例子来充分说明组合与聚合之间的关系。如图,鸟群由多只鸟组成一个群体成为鸟群。但鸟群和鸟的并不遵循共存亡的原理,因为死一只鸟,鸟群还在,也就是说鸟自身仅仅是组成鸟群的一个个体。

而对于鸟自身来讲,翅膀是鸟身体的一部分,一旦鸟死了,翅膀还能单独存在吗?但鸟群和鸟的关系就不是这样的。所以这样来讲的话,聚合和组合就能分开了。

既然说道关联关系了,就顺道将实现、泛化和依赖关系的理论都生活化,如下图。

米老师上课经常说:把知识和生活联系起来,和学过的知识联系起来。当将一些理论用生活中我们熟悉的事物来描述和理解,这样死板的理论就会被生活化,知识也就会转换成我们熟悉而熟知的生活常识,那么我们就可以更好的理解和运用这个理论了。

希望这篇博客可以帮到大家,也欢迎大家给我指正和提意见哦。先谢谢了!

相关文章

适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题...
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结...
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容...