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

java继承、实现、依赖、关联、聚合、组合的联系与区别

    博客分类:
  • java
 
阅读更多

继承、实现、依赖、关联、聚合、组合的联系与区别

分别介绍这几种关系:

继承

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性; 

实现

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性; 

依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用; 

关联

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量; 

聚合

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分; 

组合

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分; 

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;

但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;

聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同

聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子

程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期

聚合关系图:

 

组合关系图:

 

从从代码上看这两种关系的区别在于:

构造函数不同

雁群类:

[csharp] view plaincopy

  1. public class GooseGroup 

  2.     { 

  3. public Goose goose; 

  4.  

  5.  

  6. public GooseGroup(Goose goose) 

  7.         { 

  8. this.goose = goose; 

  9.         } 

  10.     } 

[csharp] view plaincopy

  1. public class GooseGroup 

  2.     { 

  3. public Goose goose; 

  4.  

  5.  

  6. public GooseGroup(Goose goose) 

  7.         { 

  8. this.goose = goose; 

  9.         } 

  10.     } 

大雁类:

[csharp] view plaincopy

  1. public class Goose 

  2. public Wings wings; 

  3.  

  4. public Goose() 

  5.     { 

  6.         wings=new Wings(); 

  7.     } 

[csharp] view plaincopy

  1. public class Goose 

  2. public Wings wings; 

  3.  

  4. public Goose() 

  5.     { 

  6.         wings=new Wings(); 

  7.     } 

聚合关系的类里含有另一个类作为参数 
雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在  
组合关系的类里含有另一个类的实例化 
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在 
信息的封装性不同 
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的 
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。

分享到:
评论

相关推荐

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

    UML 中继承、实现、依赖、关联、聚合、组合的联系与区别 UML 中的继承关系是指一个类继承另外一个类的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系。在 Java 中此类关系通过...

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

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

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

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

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

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

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

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

    java中类与类之间的关系

    泛化关系是类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。这种关系是从子类指向父类的,与继承或实现的方法相反。例如,老虎是一个动物,这是一个 is a 的关系。 在 UML 图中,泛化关系...

    UML类关系之JAVA代码实现

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

    java类与类之间的关系

    在Java编程语言中,类与类之间的关系是构建复杂系统结构的基础,这些关系不仅限于继承和封装,还包括了关联、依赖、聚合和组合等多种形式。以下是对这些关系的深入探讨: ### 1. 关联关系(Association) 关联关系...

    类与类之间的关系

    在面向对象编程中,类与类之间的关系是非常重要的,它们之间的关系可以分为四种:泛化、关联、依赖和聚合。 1. 泛化(Generalization) 泛化是一种继承关系,表示类与类之间的继承关系,接口与接口之间的继承关系...

    java maven 聚合项目 分模块 socket 双向通信实例demo

    这样的结构有助于代码的组织和依赖管理,特别是当项目涉及到多个独立但相互关联的组件时。在本实例中,“java maven 聚合项目 分模块”就是指利用Maven的聚合功能来组织多个Java模块,每个模块可能负责不同的功能。 ...

    JAVA模式与设计概念总结

    这些概念包括类与类之间的各种关系,如继承、关联、聚合和合成,以及设计原则,如“开-闭”原则、里氏代换原则、依赖倒转原则、接口隔离原则、组合/聚合复用原则和迪米特法则。 1. **继承关系**:继承是面向对象...

    java之UML类图元素

    - **泛化(Generalization)**:泛化表示继承关系,UML中用箭头表示,Java中用`extends`关键字实现。 - **实现(Realization)**:实现关系表示类实现了接口的约定,Java中用`implements`关键字表示。 理解并熟练运用...

    UML元素与Java对照教程(高清PDF)

    类间关系描述了类与类之间的各种联系,包括依赖(Dependency)、关联(Association)、聚合(Aggregation)、合成(Composition)和泛化(Generalization)等。依赖关系指的是一个类使用另一个类,如果依赖关系发生...

    Java与UML映射关系简介

    Java 与 UML 映射关系是软件开发中不可或缺的一部分,尤其对于Java应用程序的开发者而言。UML(统一建模语言)提供了一种可视化的方式来描述软件系统的结构和行为,而Java是实现这些设计的实际编程语言。理解两者...

    IBM-ETP-java培训12.UML 类图.ppt

    3. 组合(Composition):比聚合更强的关联,表示整体与部分的强依赖,如“汽车”与“发动机”的关系。 4. 泛化(Generalization):继承关系,子类继承父类的属性和操作。 5. 实现(Realization):接口实现,类...

    高质量java程序设计读书笔记

    本文将基于"高质量java程序设计读书笔记"的主题,深入探讨Java编程中的异常处理以及面向对象编程(OOP)中的继承和组合设计原则。 首先,异常处理是Java程序设计中的重要组成部分,它提供了一种结构化的方式来处理...

    java_java学习课本_

    学习者会学习如何定义类,创建对象,并理解类之间的关系,如关联、依赖、聚合和组合。 3. **异常处理**:Java中的异常处理是编程实践中必不可少的一部分。学习者会学习如何使用try-catch-finally语句块以及不同的...

    浪潮java培训ppt

    聚合和组合是两种不同类型的关联,聚合强调部分与整体的弱关系,而组合则表示部分与整体的强关系,意味着部分的生命周期依赖于整体。 采用面向对象方法开发软件有诸多优点。首先,通过继承、关联和封装等手段,可以...

    java很全的 类图

    类图的基本元素包括类(Class)、接口(Interface)、关联(Association)、依赖(Dependency)、泛化(Generalization)和实现(Realization)等。以下是对这些元素的详细解释: 1. **类(Class)**:类是面向对象...

Global site tag (gtag.js) - Google Analytics