`

"组合"&“聚合”之浅见

    博客分类:
  • Java
阅读更多

 

    组合和聚合是比较容易混淆的两个关系,二者有很大的相似性。其中聚合指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中包含组成分为部分等词常意味着聚合关系。也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。聚合和组合的主要区别在于聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

    从Java代码上来讲,我觉得组合可以看作聚合的特殊情况,组合的代码可通过两种方式来实现:

1)部分对象作为整体对象的成员变量而存在,随着整体对象的初始化,所有的部分对象也一并进行初始化,当整体对象被垃圾回收时,作为成员的部分对象也会同时被销毁;

2)部分对象作为整体对象的内部类的实例而存在。

聚合的代码也可以通过两种方法来实现:

1)部分对象作为整体对象的成员变量,与组合的代码类似;

2)整体对象中维护部分对象的指针变量,部分对象的实例化操作在类的外部进行,所以部分类的生命周期不会受整体类直接影响。

分享到:
评论
1 楼 Arron.li 2010-04-26  
觉得作者的观点与thinking in java有出入,
聚合关系应该是是“contains-a”关系,组合关系是“has-a”关系
参看java编程思想第四版(英文版)31页。

相关推荐

    UML 聚合和组合的区别

    UML 聚合和组合的区别 UML 中的聚合和组合是两种重要的关联关系,它们之间的区别是很多开发者经常混淆的。以下是对 UML 聚合和组合的详细解释: 聚合(Aggregation) 聚合是一种特殊的关联关系,它描述的是一种...

    ATL 组合与聚合代码

    3. **组合.zip** - 类似于`聚合.rar`,这个文件可能包含一个展示ATL组合的实例。可能包括创建组合对象的步骤,如何向组合对象添加成员对象,以及如何通过组合对象的接口访问和操作成员对象的方法。 学习这些内容,...

    语言学纲要语法的组合规则和聚合规则PPT课件.pptx

    语言学纲要语法的组合规则和聚合规则 语言学纲要语法的组合规则和聚合规则是语言学中非常重要的一个概念。组合规则是指词语在组合成新的词语时所遵循的规则,聚合规则是指词语在组合成新的词语时所遵循的规则。这些...

    华三交换机配置端口聚合之三层端口配置静态和动态聚合

    华三交换机配置端口聚合之三层端口配置静态和动态聚合 华三交换机配置端口聚合是一种常见的网络配置方式,通过将多个物理端口组合成一个逻辑端口,提高网络的可靠性和传输速度。在本文中,我们将详细介绍华三交换机...

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

    本文将深入探讨面向对象中的四种基本关系:依赖、关联、聚合和组合,以及它们在实际应用中的含义和用例。 ### 一、依赖(Dependency) 依赖是最弱的一种关系,表示一个类依赖于另一个类的接口或实现,但这种依赖通常...

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

    本篇文章将深入探讨UML类图中的五种主要关系:关联、组合、聚合、依赖和泛化,以及它们在实际编程中的应用。 **关联** 是类之间的一种结构关系,表示类之间的连接或相互作用。它通常用一条实线表示,可以是单向或...

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

    UML 中依赖泛化关联实现聚合组合的 C# 实现 UML 中类图是软件设计中最重要的工具之一,它能够帮助我们更好地设计和管理软件系统。今天,我们将讨论 UML 中的依赖泛化关联实现聚合组合的 C# 实现。 首先,让我们...

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

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

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

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

    discuz论坛插件DZ插件 附件中心&附件聚合商业版

    《Discuz论坛插件:附件中心与附件聚合商业版详解》 Discuz! 是一款广泛应用于各类网站的开源社区论坛系统,以其强大的功能和灵活的扩展性深受用户喜爱。其中,“附件中心”与“附件聚合”是两个重要的插件功能,...

    语言学纲要音位的聚合和组合PPT课件.pptx

    "语言学纲要音位的聚合和组合PPT课件.pptx" 这份PPT课件主要讲解了语言学中的音位学理论,包括音位的聚合和组合关系、音位的区别特征、音节的组成和性质等内容。 首先,PPT课件介绍了音位的概念和分类,包括元音和...

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

    ### UML中依赖、泛化、关联、聚合与组合的Java实现详解 #### UML基础知识概览 统一建模语言(UML)作为一种图形化的标准化建模语言,为软件开发提供了强大的可视化工具,帮助开发者理解、设计和记录软件系统。UML...

    cisco链路聚合实验

    链路聚合是一种典型的网络技术,用于将多个物理链路组合成一个逻辑链路,从而提高网络的可靠性和带宽。Cisco设备支持多种链路聚合协议,包括LACP(Link Aggregation Control Protocol)和PAgP(Port Aggregation ...

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

    UML类关系-依赖、关联、聚合和组合 UML(Unified Modeling Language)是软件设计领域中的一种标准化建模语言,用于描述软件系统的结构、行为和架构。UML类关系是UML中的一种基本概念,描述了类之间的关系。今天,...

    高德地图点聚合效果

    本文将详细讲解如何利用高德地图实现点聚合效果,以解决在地图上显示大量数据点时的视觉拥挤问题。 点聚合,也被称为热力图或密度图,是一种将地理位置上的大量点数据进行聚合,用以展示高密度区域的方法。这种技术...

    MA5680T链路聚合

    ### MA5680T链路聚合知识点详解 #### 一、链路聚合技术概述 链路聚合(Link Aggregation)是一种将多个物理接口捆绑在一起作为一个逻辑接口的技术,旨在提高链路带宽、实现链路冗余。在企业级网络设备如华为MA5680...

    聚合物反应工程基础知识总结.pdf

    - 加成聚合:也称链式聚合,分为自由基聚合、阴离子聚合、阳离子聚合和配位聚合等。这类聚合反应在形成聚合物时,单体分子通过加成反应连续地串联起来。 - 缩合聚合:单体分子通过缩合反应,如脱水、脱醇或脱氨等...

    ThinkPHP聚合支付源码 聚合收银台系统源码

    《ThinkPHP聚合支付源码与聚合收银台系统解析》 在互联网支付领域,聚合支付系统扮演着重要的角色,它整合了多种支付渠道,为商家提供了便捷的收款方式。ThinkPHP作为一款广受欢迎的PHP开发框架,被广泛应用于构建...

    arcgis api for javascript 4.x 聚合

    《ArcGIS API for JavaScript 4.x 聚合技术详解》 在GIS(地理信息系统)领域,ArcGIS API for JavaScript 是Esri公司提供的一款强大的Web GIS开发工具,它允许开发者在网页上创建交互式的地图应用。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics