`
lxy2330
  • 浏览: 469190 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关联、聚合、组合的关系

 
阅读更多

你和你的心脏之间是composition关系
你和你买的书之间是aggregation关系
你和你的朋友之间是association关系

关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司
看来大家对组合的理解没有意义,因为他们直接有共同的lifetime ,
甚至,被component的对象是否能够被其他类所见需要component 对象的同意。
association 代表引用服务,但不会永久保存引用的入口,比如,仅仅是参数引用,用完就丢弃,是最弱连接。
aggregation 聚合代表永久引用或强引用,也许对象生成的时候就获得了该引用。
虽然他们直接没有生命期的约束。但是引用对象必须处理被引用对象义务消失的意外处理。
在讨论聚合,关联,组合区别,讨论那么多内部类干什么?

确实,他们的关系按强弱分有

关联<聚合<组合

我看大家主要分岐在聚合和组合上。说白一点,聚合这种关系是被包含的对象的个数是 0..* 而组合是 1..*
聚合中的被包含对象可以没有。 而组合至少有一个。聚合是一种拥有的关系,而组合是整体与部分的关系

举一个简单的例子:
一个图书馆可以有十万本书,也可以一本也没有。但空的图书馆还是图书馆。这是聚合

一个车(我们平常能看到的普通的交通工具车)有轮子,有的车是四轮子的,有的车是三轮的,自行车是二轮的,还有独轮车,但车至少要有一个轮子,不然就不是车。这是组合关系。
关联、组合、聚合、依赖关系比较

类之间的关系

<!--[if !supportLists]-->1. <!--[endif]-->种类: Generalization(泛化)Dependency(依赖关系)Association(关联关系)Aggregation(聚合关系)Composition(合成关系)

<!--[if !supportLists]-->2. <!--[endif]-->其中Aggregation(聚合关系)Composition(合成关系)属于Association(关联关系),是特殊的Association关联关系。

<!--[if !supportLists]-->3. <!--[endif]-->Generalization(泛化)表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->4. <!--[endif]-->Association关联关系表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->5. <!--[endif]-->Aggregation(聚合关系) 是关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果AB聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->6. <!--[endif]-->Composition(组合关系)是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。Composition(组合关系)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。如果AB组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->7. <!--[endif]-->Dependency(依赖关系)表现为函数中的参数(use a)。是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。

<!--[if !vml]--><!--[endif]-->

分享到:
评论

相关推荐

    面向对象的依赖、关联、聚合、组合关系

    组合关系体现了“部分是整体不可分割的一部分”的概念。 ### 小结 在面向对象设计中,正确区分并应用这四种关系至关重要。依赖关系用于表示临时的交互需求,关联关系用于表示长期的联系,而聚合和组合则分别描述了...

    UML中依赖泛化关联实现聚合组合的C#实现

    UML 中依赖泛化关联实现聚合组合的 C# 实现 ...UML 中依赖泛化关联实现聚合组合的 C# 实现是我们软件设计中非常重要的一部分,我们需要充分了解 UML 中类与类之间的关系,并使用合适的编程语言和工具来实现它们。

    UML中继承实现依赖关联聚合组合的联系与区别_线条箭头.doc

    在 UML 中,还有泛化关系、关联关系、聚合关系、组合关系等多种关系,这些关系都是类与类、或者类与接口之间的关系,可以用来描述类与类、或者类与接口之间的继承、实现、依赖、关联、聚合、组合等关系。 泛化关系...

    UML中依赖泛化关联实现聚合组合的Java实现

    ### UML中依赖、泛化、关联、聚合与组合的Java实现详解 #### UML基础知识概览 ...以上Java代码实现了UML中描述的泛化、关联、聚合与组合关系,通过具体的类和方法定义展示了这些概念在实际编程中的应用。

    UML关系(泛化,实现,依赖,关联(聚合,组合))

    UML关系(泛化,实现,依赖,关联(聚合,组合))

    UML类关系-依赖,关联,聚合和组合

    组合关系是指一个类拥有另一个类的对象,并且控制着该对象的生命周期的关系。组合关系是一种强关系,表示一个类完全拥有另一个类。组合关系可以在成员变量、方法调用等形式出现。 例如,在程序4中,类A拥有类B的...

    UML学习之依赖_关联_聚合_组合_继承

    ### UML学习之依赖、关联、聚合、组合与继承 #### 一、泛化(Generalization) **概念:** 泛化表示的是类与类之间的继承关系、接口与接口之间的继承关系,或者是类对接口的实现关系。在UML中,泛化关系通常用一个带...

    UML类关系:依赖、关联、聚合、组合

    本文将深入探讨UML类关系中的四种关键概念:依赖、关联、聚合和组合,以及它们在软件设计中的应用。 1. 依赖(Dependency) 依赖是UML中最弱的一种关系,表示一个类(或对象)的实现或行为需要另一个类(或对象)的...

    关联,聚合,组合的区别及C++实现

    在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单 独工作更大的语义。

    UML 聚合和组合的区别

    例如,Windows 的窗口和窗口上的菜单就是一种组合关系。窗口是整体,菜单是窗口的一部分。如果窗口不存在,菜单也就不存在了。 区别 1:组合是比聚合更强的关联形式 组合是指带有很强的拥有关系且整体与部分的生命...

    UML类图关系大全(关联、组合、聚合、依赖、泛化)

    例如,汽车与发动机之间就是一种组合关系,汽车包含发动机,且汽车的生命周期结束意味着发动机的生命周期也结束。 **聚合** 类似于组合,但相对较弱。它表示的是“has-a”关系,但整体与部分的生命周期并不完全绑定...

    UML类图关系泛化、继承、实现、依赖、关联、聚合、组合.doc

    组合关系也是关联关系的一种特例,表达的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。这种关系表达的是整体与局部间的关系,但此时整体与局部是不可分的,整体的生命周期完毕也就意味着局部的生命...

    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

    在UML中,有六种主要的类间关系:继承、实现、依赖、关联、聚合和组合。理解这些关系对于设计高质量的软件架构至关重要。 1. **继承**: 继承是类与类之间的一种层次结构关系,表示一个类(子类)可以从另一个类...

    几种类间关系:继承、实现、依赖、关联、聚合、组合

    几种类间关系:继承、实现、依赖、关联、聚合、组合。可做为开发设计时速查手册。

    [面试/笔试系列6]关联、聚合(Aggregation)以及组合(Composition)的区别

    在UML中,组合关系通常用一个实心的菱形符号表示,并且菱形符号同样指向整体类。 **实现形式**: ```cpp class Body { public: Heart heart; // 身体包含一个心脏 }; class Heart { // 心脏类的定义 }; ``` ###...

    [#0x003B] UML类图之关联、聚合、组合、依赖

    组合关系在UML中使用实心的菱形表示。 依赖是UML类图中较为短暂的关系,它表明一个类的实现或行为需要另一个类。这通常是由于一个类在运行时引用了另一个类的函数或服务。依赖关系在UML中用虚线表示,箭头指向被...

    UML统一建模语言中依赖泛化关联实现聚合组合的C#实现_配UML图.doc

    C#代码中,组合通常体现在类的生命周期管理上,例如,如果`Car`负责创建和销毁`Engine`对象,那么这是一种组合关系。 6. 实现(Realization): 实现关系表示类实现了一个接口。在C#中,类通过`:`运算符实现接口: ...

    类和类之间的依赖、关联、聚合、组合关系

    (5)聚合:又称组装,其原则是:把一个复杂的事物看成若干比较简单的事物的组装体,从而简化对复杂事物的描述。 (6)关联:是人类思考问题时经常运用的思想方法:通过一个事物联想到另外的事物。能使人发生联想的...

    Java依赖-关联-聚合-组合之间区别_动力节点Java学院整理

    它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。 在 Java 语言中,这四种关系的...

Global site tag (gtag.js) - Google Analytics