继承、实现、依赖、关联、聚合、组合的联系与区别
分别介绍这几种关系:
继承
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在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
-
public class GooseGroup
-
{
-
public Goose goose;
-
-
-
public GooseGroup(Goose goose)
-
{
-
this.goose = goose;
-
}
-
}
[csharp] view plaincopy
-
public class GooseGroup
-
{
-
public Goose goose;
-
-
-
public GooseGroup(Goose goose)
-
{
-
this.goose = goose;
-
}
-
}
大雁类:
[csharp] view plaincopy
-
public class Goose
-
{
-
public Wings wings;
-
-
public Goose()
-
{
-
wings=new Wings();
-
}
-
}
[csharp] view plaincopy
-
public class Goose
-
{
-
public Wings wings;
-
-
public Goose()
-
{
-
wings=new Wings();
-
}
-
}
聚合关系的类里含有另一个类作为参数
雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在
组合关系的类里含有另一个类的实例化
大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
相关推荐
UML 中继承、实现、依赖、关联、聚合、组合的联系与区别 UML 中的继承关系是指一个类继承另外一个类的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系。在 Java 中此类关系通过...
### UML中依赖、泛化、关联、聚合与组合的Java实现详解 #### UML基础知识概览 统一建模语言(UML)作为一种图形化的标准化建模语言,为软件开发提供了强大的可视化工具,帮助开发者理解、设计和记录软件系统。UML...
在UML中,有六种主要的类间关系:继承、实现、依赖、关联、聚合和组合。理解这些关系对于设计高质量的软件架构至关重要。 1. **继承**: 继承是类与类之间的一种层次结构关系,表示一个类(子类)可以从另一个类...
### UML学习之依赖、关联、聚合、组合与继承 #### 一、泛化(Generalization) **概念:** 泛化表示的是类与类之间的继承关系、接口与接口之间的继承关系,或者是类对接口的实现关系。在UML中,泛化关系通常用一个带...
UML类图关系泛化、继承、实现、依赖、关联、聚合、组合 UML类图关系是Unified Modeling Language(统一建模语言)的核心概念之一,用于描述系统中的对象之间的关系。本文将对UML类图关系中的泛化、继承、实现、依赖...
泛化关系是类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。这种关系是从子类指向父类的,与继承或实现的方法相反。例如,老虎是一个动物,这是一个 is a 的关系。 在 UML 图中,泛化关系...
本文将详细探讨四种主要的UML类关系——依赖、泛化、关联和实现,并通过Java代码示例来阐述这些关系的实现。 1. **依赖(Dependency)**:依赖关系表示一个类(A)的正常工作需要另一个类(B)的存在。在代码中,这...
在Java编程语言中,类与类之间的关系是构建复杂系统结构的基础,这些关系不仅限于继承和封装,还包括了关联、依赖、聚合和组合等多种形式。以下是对这些关系的深入探讨: ### 1. 关联关系(Association) 关联关系...
在面向对象编程中,类与类之间的关系是非常重要的,它们之间的关系可以分为四种:泛化、关联、依赖和聚合。 1. 泛化(Generalization) 泛化是一种继承关系,表示类与类之间的继承关系,接口与接口之间的继承关系...
这样的结构有助于代码的组织和依赖管理,特别是当项目涉及到多个独立但相互关联的组件时。在本实例中,“java maven 聚合项目 分模块”就是指利用Maven的聚合功能来组织多个Java模块,每个模块可能负责不同的功能。 ...
这些概念包括类与类之间的各种关系,如继承、关联、聚合和合成,以及设计原则,如“开-闭”原则、里氏代换原则、依赖倒转原则、接口隔离原则、组合/聚合复用原则和迪米特法则。 1. **继承关系**:继承是面向对象...
- **泛化(Generalization)**:泛化表示继承关系,UML中用箭头表示,Java中用`extends`关键字实现。 - **实现(Realization)**:实现关系表示类实现了接口的约定,Java中用`implements`关键字表示。 理解并熟练运用...
类间关系描述了类与类之间的各种联系,包括依赖(Dependency)、关联(Association)、聚合(Aggregation)、合成(Composition)和泛化(Generalization)等。依赖关系指的是一个类使用另一个类,如果依赖关系发生...
Java 与 UML 映射关系是软件开发中不可或缺的一部分,尤其对于Java应用程序的开发者而言。UML(统一建模语言)提供了一种可视化的方式来描述软件系统的结构和行为,而Java是实现这些设计的实际编程语言。理解两者...
3. 组合(Composition):比聚合更强的关联,表示整体与部分的强依赖,如“汽车”与“发动机”的关系。 4. 泛化(Generalization):继承关系,子类继承父类的属性和操作。 5. 实现(Realization):接口实现,类...
本文将基于"高质量java程序设计读书笔记"的主题,深入探讨Java编程中的异常处理以及面向对象编程(OOP)中的继承和组合设计原则。 首先,异常处理是Java程序设计中的重要组成部分,它提供了一种结构化的方式来处理...
学习者会学习如何定义类,创建对象,并理解类之间的关系,如关联、依赖、聚合和组合。 3. **异常处理**:Java中的异常处理是编程实践中必不可少的一部分。学习者会学习如何使用try-catch-finally语句块以及不同的...
聚合和组合是两种不同类型的关联,聚合强调部分与整体的弱关系,而组合则表示部分与整体的强关系,意味着部分的生命周期依赖于整体。 采用面向对象方法开发软件有诸多优点。首先,通过继承、关联和封装等手段,可以...
类图的基本元素包括类(Class)、接口(Interface)、关联(Association)、依赖(Dependency)、泛化(Generalization)和实现(Realization)等。以下是对这些元素的详细解释: 1. **类(Class)**:类是面向对象...