UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别

转载:http://blog.csdn.net/ocean181/article/details/6117369

三者描述对象的附属[也就是依赖]关系: 关联<聚合<组合, 依赖关系是逐渐加强的.

inheritance: "a kind of": 猫是一种动物,说明猫从动物继承;

association: 两者之间存在某种关联即可,很弱的关系,如student and course, 每个学生可以选不同的课,每门课上有不同学生;

aggregation: "consist of":整体与部分之间的关系,但这里部分可以脱离整体单独存在,如MP3上所插的耳机,MP3包含耳机,但这个耳机也可以单独存在,或者插在其他电脑上。

composition: 更强的aggregation,这里部分不能脱离整体而存在,这个部分是整体的私有财产。比如Apple Itouch上的电池,原则不能拆下来单独使用。

关联

关联(association)表明某个对象可以向另一个对象通过某种方式发送消息。发送消息的方法可以通过指针成员变量, 也可以是方法参数、局部变量等等。例如:

class A
{
private:
B* itsB;
};

聚合

聚合(aggregation)是一种特殊的联系,它表明了“部分”到“整体”的关系,显著的特点就是不能包含循环的联系 (就是说,部分中不能包含整体)。如:

class Node
{
private:
vector<Node*> itsNodes;
};

上述代码只有当子节点不会成为父节点的父节点时(即,必须是树结构,不能是图结构),才能称之为聚合。

从实现的角度讲,聚合可以表示为:

class A {...} class B { A* a; .....}

组合

组合(composition)跟聚合几乎相同,唯一的区别就是“部分”不能脱离“整体”单独存在,就是说, “部分”的生命期不能比“整体”还要长。例如:

class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};
从实现的角度讲,组合实现的形式是: 

class A{...} class B{ A a; ...}
时间: 2024-08-06 11:54:13

UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别的相关文章

java--依赖、关联、聚合和组合之间区别的理解

在学习面向对象设计对象关系时,依赖.关联.聚合和组合这四种关系之间区别比较容易混淆.特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境.特定情景等. 依赖(Dependency)关系是类与类之间的联接.依赖关系表示一个类依赖于另一个类的定义.例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House.与关联不同的是,Person类里并没有Car和House类型的属性,Car和Hous

关联关系:依赖、关联、聚合和组合之间区别

在学习面向对象设计对象关系时,依赖.关联.聚合和组合这四种关系之间区别比较容易混淆.特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境.特定情景等.他们在编程语言中的体现却是基本相同的,但是基本相同并不等于完全相同,这一点在我的前一篇博文<设计模式中类的关系>中已经有所提及,下面就来详细的论述一下在java中如何准确的体现依赖.关联.聚合和组合. 首先看一看书上对这四种关系的定义: 依赖(Dependency)关系是类与类之间的联接.依赖关系表示一个类依赖于另一个类的定义.例如,一

Inheritance, Association, Aggregation, and Composition 类的继承,关联,聚合和组合的区别

在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Polymorphism之一. 继承Inheritance:是指一个类(子类)来继承另一个类(基类),并增加自己的功能,可以通过重写基类中的函数来实现.可以将继承理解成“IS A”的关系,比如A cat "IS A" animal, or A car "IS A" vehicl

UML中关联(Association)和依赖(Dependency)的区别

原文转自:http://blog.csdn.net/metasearch/article/details/2334853 在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一点自己的看法: 1.在<UML参考手册>第37页中,指出“关联和泛化都是依赖关系,但是它们有更特别的语义,故它们有自己的名字和详细的语义.我们通常用依赖这个词来指其他的关系.” 2.在<UML参考手册>30页中,定义了关联为“关联描述了系统中对象或实例之间的离散连接.最普通的关联是一对

认识UML中类之间的依赖、关联、聚合、组合、泛化的关系

什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种提炼角度,需要根据系统地目标.业务的场景,选取合适的角度对事物进行归纳. 什么是类图? 类图可能是UML中使用的最多的一种图. 和其他图一样,类图的基本语法并不复杂,可能一两天就能掌握,但是真正做到灵活的使用类图,可能需呀多年的功力. 类图是锻炼OOA(OO Analysis)和OOD(OO Design)思想的重要工具,有助于OOA.OOD思想的提升. 本篇博文,重点讲述类图中类与类之间的关系以及这种关系在代码中的实现形式.写作本文

学习UML实现、泛化、依赖、关联、聚合、组合

类之间的关系种类:Realization(实现), Generalization(泛化),Dependency(依赖).Association(关联).Aggregation(聚合).Composition(合成或组合). 其中,Aggregation(聚合).Composition(合成)属于Association(关联),是特殊的Association关联关系. 实现(Realization): 指的是一个类实现接口(可以是多个)的功能:实现是类与接口之间最常见的关系:C 中没有直接的接口而

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

http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html http://sundensky.blog.163.com/blog/static/7728873420109299167434/ 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系

【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性:  实现 指的是一个class类实现interface接口(可以是多个)的

UML之类图分析(依赖、关联、聚合、组合、泛化、实现)

在我学习设计模式的过程中,使用了UML进行建模. 最开始我对各种关系理解的不是太清楚,在网上也搜了一些信息,现在对类图的这几种关系:依赖.关联.聚合.组合.泛化.实现进行一个介绍. 首先大家要知道两点: 1.它们关系的强弱顺序:泛化= 实现> 组合> 聚合> 关联> 依赖 2.关联.聚合.组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的. 泛化(Generalization): 泛化是对象之间耦合度最大的关系之一.它表