`
oywl2008
  • 浏览: 1053408 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

依赖,聚合,组合在java代码实现

 
阅读更多

在面向对象中,类与类之间的关系有泛化,依赖,关联,聚合,组合几种。 
其中,聚合和组合都属于关联。 
在具体编程中: 
     依赖表现为如果A类依赖于B,则B体现为A的局部变量,方法参数或静态方法的调用。 
eg: 
class B{ 
   Static void function1(){}; 
   void  function2(){}; 

public class A{ 
     public static void main(String[] args){ 
         .... 
         B.function1();//A类中调用了B类的静态方法 
         .... 
     } 

       聚合和组合都属于关联,很难区分,但是只要记住一点,区分它们就容易多了: 
       处于聚合关系的两个类生命周期不同步,则是聚合关系;处于组合关系的两个类的生命周期同步; 
eg: 
聚合关系,当A创建的时候,B不一定创建;当A消亡时,B不一定消亡。 
class A{ 
   private  B; 

class B{ 
.... 

组合关系,当创建一个A对象时,也会创建一个B对象;当A对象消亡时,作为A的属性的B对象也会消亡。 
class A{ 
private b=new B(); 
.... 

class B{ 
.... 
}

 

 

黑马程序员——java语言基础——组合,关联,聚合的区别

类间关系

在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。

(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。类图中继承的表示方法是从子类拉出一条闭合的、单键头(或三角形)的实线指向基类。例如,图3.2给出了MFC中 CObject类和菜单类CMenu的继承关系。

     图3.2 类的继承

类的继承在C++中呈现为:

class B { }
 class A : public B{ }

(2)关联:指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。
 
 关联在C++中呈现为:

class A{...}
 class B{ ...}
 A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b)

即一个类作为另一个类方法的参数。

(3)聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。

(4)组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。

聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

我们用浅显的例子来说明聚合和组合的区别。“国破家亡”,国灭了,家自然也没有了,“国”和“家”显然也是组合关系。而相反的,计算机和它的外设之间就是聚合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用。

在C++语言中,从实现的角度讲,聚合可以表示为:

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

即类B包含类A的指针;

而组合可表示为:

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

即类B包含类A的对象。

准确的UML类图中用空心和实心菱形对聚合和组合进行了区分。

          图3.4 聚合和组合

聚合,关联,组合 是对象之间的三种关系。从某种意义上说,继承是一种类的纵向关系,而聚合,关联,组合是对象的横向关系。


其关系强弱为 关联<聚合<组合

 

关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。

我想举个通俗的例子。
你和你的心脏之间是composition关系(心脏只属于自己)
你和你买的书之间是aggregation关系(书可能是别人的)
你和你的朋友之间是association关系

聚合与组合的区别:聚合∶分散的聚集到一起 组合∶几个独立部分组成的整体 由上可见,聚合就像将不同的水果放到一个玻璃果盘里,玻璃果盘摔坏,并不影响水果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

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

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

    UML类关系之JAVA代码实现

    本文将详细探讨四种主要的UML类关系——依赖、泛化、关联和实现,并通过Java代码示例来阐述这些关系的实现。 1. **依赖(Dependency)**:依赖关系表示一个类(A)的正常工作需要另一个类(B)的存在。在代码中,这...

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

    在 UML 中,继承、实现、依赖、关联、聚合、组合这六种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但是后几种关系所表现的强弱程度依次为:组合&gt;聚合&gt;关联&gt;依赖。 在 UML 中,还有泛化关系、关联...

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

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

    设计模式Java版各个实现代码

    在Java中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性,是每个Java开发者必备的技能之一。本资料集“设计模式Java版”包含了各种设计模式的实现代码,旨在帮助学习者深入理解和应用这些模式。 1. **...

    java设计模式代码实现

    在软件开发领域,设计模式是经验丰富的开发者们在解决常见问题时所采用的经过验证的最佳实践。Java设计模式代码实现是对这些模式的编程演示...通过阅读和实践提供的Java代码实现,你可以更好地理解和应用这些设计模式。

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

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

    23种设计模式的java实现源代码.rar

    这个压缩包“23种设计模式的java实现源代码.rar”包含了Java语言实现的全部23个经典设计模式,下面我们将逐一探讨这些设计模式及其在Java中的实现。 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供...

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

    UML类图关系泛化、继承、实现、依赖、关联、聚合、组合 UML类图关系是Unified Modeling Language(统一建模语言)的核心概念之一,用于描述系统中的对象之间的关系。本文将对UML类图关系中的泛化、继承、实现、依赖...

    23种设计模式,及设计模式的七种设计原则的文档和Java代码实现

    在Java代码实现中,你可以找到每种模式的具体应用示例,这有助于你理解和学习如何在实际项目中使用这些模式。通过阅读代码和文档,你可以更好地掌握设计模式的精髓,并提升你的编程技能。 总之,这个压缩包是一个...

    设计模式-java实现代码汇总

    在"DesignModel-core"这个压缩包中,很可能包含了上述各种设计模式的Java实现代码,每个模式都可能按照描述中的分类放在不同的包里。通过学习和理解这些代码,你可以更好地掌握设计模式的精髓,并将其应用到实际项目...

    java之23种设计模式完整代码

    Java编程语言在软件开发中占有举足轻重的地位,而设计模式则是提升代码质量和可维护性的关键工具。这里我们探讨的“Java之23种设计模式完整代码”是一份宝贵的资源,它包含了所有23种经典设计模式的实现示例。这份...

    Java程序设计模式代码+类图(截图).zip

    每个模式的代码截图可以帮助读者更好地理解如何在实际Java代码中应用这些模式。类图则提供了类之间的关系可视化,这对于理解类之间的依赖关系和职责分配至关重要。类图通常包含类名、属性、方法以及类之间的关系(如...

    java23种设计模式实现的具体代码共享

    ### Java23种设计模式实现的具体代码共享 在软件开发领域,设计模式是解决特定问题的一种通用可重用解决方案。Java作为一种广泛使用的编程语言,在实践中积累了大量的设计模式应用经验。本文将详细介绍Java中的23种...

    maven继承与聚合代码

    在Java开发领域,Maven是一个不可或缺的项目管理工具,它帮助开发者进行构建、依赖管理和项目信息管理。Maven的核心概念之一就是项目对象模型(Project Object Model,简称POM),它是Maven配置的基础。本篇文章将...

    23种设计模式的Java实现

    在Java中,可以使用继承或组合来实现适配。 7. **装饰器模式(Decorator)**:动态地给一个对象添加一些额外的职责,保持对象接口不变。Java中,装饰者和被装饰者通常都实现同一接口。 8. **桥接模式(Bridge)**...

    23三种设计模式java实现

    下面将详细介绍这三类设计模式以及它们在Java中的实现。 1. **创建型设计模式** - **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,可以通过双重检查锁定(Double-Checked Locking)或者静态...

    设计模式代码(Java实现)

    在Java中,可以使用类适配器或对象适配器模式,通过继承或组合来实现接口转换。 7. **装饰器模式** (Decorator):动态地给一个对象添加一些额外的职责。Java中,装饰者和被装饰对象通常有相同的接口,装饰者类持有...

    Java设计模式代码

    本资源“Java设计模式代码”提供了一系列具体的Java实现,帮助开发者深入理解并应用这些模式。下面将详细阐述Java设计模式中的主要类别及其重要知识点。 1. 创建型模式: - 单例模式:确保一个类只有一个实例,并...

    25种java模式代码参考手册

    在Java中,通常通过双重检查锁定、静态内部类或枚举等方式实现。 2. **工厂模式**:提供一个创建对象的接口,但允许子类决定实例化哪个类。这使得系统可以在不指定具体类的情况下引用抽象。 3. **抽象工厂模式**:...

Global site tag (gtag.js) - Google Analytics