文档章节

对象关系之聚合关系

o
 osc_w9s1w4o0
发布于 2019/03/31 23:15
字数 1125
阅读 0
收藏 0
def

精选30+云产品,助力企业轻松上云!>>>

概念背景

现实世界中的实体被看成对象,对象之间可能存在着联系或关系,基于对象之间可能存在的关系,引入了对象关系的概念。

对象关系的定义

对象之间存在的关系称为对象关系。

对象关系的分类

根据对象之间存在的关系的性质,对象关系分为

1)关联关系

2)聚合关系

3)继承关系

其中聚合关系又可分为

1)组合关系

2)非组合关系

 

下面较详细地介绍一下聚合关系及其来源。

聚合关系

什么是聚合?什么是组合?什么是非组合?

首先来说明它们的概念。

聚合是将几个对象收集在一起生成一个新对象的行为,其特性是聚合的内部对象与聚合的外部对象相对独立。

组合是将几个对象收集在一起生成一个新对象的行为,其特性是聚合的内部对象与聚合的外部对象相对独立,但两者的生命周期一致

非组合是将几个对象收集在一起生成一个新对象的行为,其特性是聚合的内部对象与聚合的外部对象相对独立,但两者的生命周期不一致

可以看到聚合包括组合和非组合,它们三者都有“聚合的内部对象与聚合的外部对象相对独立”的特征,但什么是聚合的内部对象和聚合的外部对象呢?

举个现实世界中的简单的例子,

我们知道,一副棋具由棋子和棋盘两样东西组成,

以对象的角度来看,棋具、棋子和棋盘都是对象,

但是棋具是由棋子和棋盘这两个对象组成的,本身又是一个对象,

这个棋具对象就是一个聚合的外部对象,棋子和棋盘就是聚合的内部对象。

 

一般情况下,聚合指的是非组合。

什么是聚合关系?什么是组合关系?什么是非组合关系?

根据上面的内容,可以归纳出,

聚合关系是聚合的关系,

展开就是

聚合关系就是将几个对象收集在一起生成一个新对象、内部对象与外部对象相对独立的关系。

同理,

组合关系是组合的关系,

非组合关系是非组合的关系。

有什么用?

在软件工程中,面向对象程序设计方法是解决复杂问题的常用方法。

面向对象程序设计方法的内容包括:

1)对对象进行建模

2)对对象之间的联系或关系进行建模

于是,对对象之间的关系进行建模是软件工程中使用面向对象程序设计方法解决问题各阶段需要经历的过程。

掌握对象之间的关系能够帮助开发者对对象之间的关系建模

实例

实例采用Python语言实现。

# 对象之间的组合关系建模
class Cpu:
    def __init__(self):
        self.core = 4
class Computer:
    def __init__(self):
        self.cpu = Cpu() cp = Computer() print(cp.cpu.core) del cp

由以上代码可以知道, 当创建一个Computer类的实例时,同时会创建一个Cpu类的实例,并且它们的生命周期一致,即它们是组合的。

当删除创建的Computer类的实例时,也会删除同时创建的Cpu类的实例。

这也反映了一定的现实:当计算机对象存在时,处理器对象必定和计算机对象组合地存在。

# 对象之间的聚合关系建模
class ChessPieces:
    def __init__(self):
        self.number = 32
class ChessBoard:
    def __init__(self):
        self.texture = 'marble'
class ChessSet: def __init__(self, chesspieces, chessboard): self.chesspieces = chesspieces self.chessboard = chessboard cp = ChessPieces() cb = ChessBoard() cs = ChessSet(cp,cb) print(cs.chesspieces.number, cs.chessboard.texture) del cs print(cp.number, cb.texture)

由以上代码可以知道,当创建一个ChessSet类的实例时,必须先创建一个ChessPieces类的实例和一个ChessBoard类的实例,再将它们聚合成一个ChessSet类的实例。

创建的ChessSet类的实例和创建的ChessPieces类的实例和创建的ChessBoard类的实例的生命周期可能不同。

当删除创建的ChessSet类的实例时,并不会删除创建的ChessPieces类的实例和创建的ChessBoard类的实例。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
关联、组合、聚合、依赖关系比较

关联、组合、聚合、依赖关系比较 类之间的关系种类: Generalization(泛化),Dependency(依赖关系)、Association(关联关系)、Aggregation(聚合关系)、Composition(合成关系)。 其中Aggregati...

hephec
2015/05/01
28
0
UML关系

前言: 在学习设计模式的过程中用到了各种UML的关系,所以总结一次 内容: UML:关系(4种):泛化关系,实现关系,依赖关系,关联关系(聚合,组合) 泛化关系 是一个类与另一个类的接口,可...

cjune
2017/10/08
0
0
UML中聚合和组合的关系

聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关 系。例如一个航母编队包括海空母舰、驱护...

九爷
2011/05/20
370
0
UML类图关系图解

一、类结构 在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。 其中, 一般类的类名用正常字体粗体表示,如上图;抽象类名用斜体字粗体...

osc_kt288isk
2018/07/23
4
0
组合,关联,聚合的区别

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

长平狐
2012/09/03
186
0

没有更多内容

加载失败,请刷新页面

加载更多

会议通知 | 2020中国计算与认知神经科学会议

关于大会关于 计算神经科学以神经生物实验为基础,以建立数学模型,开展计算模拟和分析作为基本手段,来刻画和描述大脑的神经活动,探究神经系统各种复杂活动和认知功能包括注意、学习、记忆...

脑机接口社区
06/02
20
0
大神分享快3怎么算下期和值

大神分享快3怎么算下期和值{叩67790572}使用的标签:constructor-arg标签出现的位置:bean标签的内部标签中的属性type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个...

yiren081
36分钟前
21
0
Matlab系列之运算符和标点符号的功能介绍

本来月初就打算接着写的,但是电脑不小心进水,主板什么的都废了,周末才找时间拿去修好,心塞。 就不多讲太多废话了,开始分享今天的内容,对MATLAB的运算符做个介绍,然后再对标点符号进行...

狂人V
07/06
18
0
Java源码系列(1):Comparable和Comparator的区别

在讲Comparable和Comparator区别之前,先补充一个知识点。 先看代码: Person类 1public class Person<T> { 2  private T id; 3 4  public T getId() { 5    return i...

学习Java的小姐姐
2018/09/19
25
0
ThreadPoolTaskScheduler手写调度中心

先贴一个自己写的demo把,原理其实就是这样的。 CronTrigger这个类可以将cron表达式转换成Date,可以查看schedule源码学到不少东西,下面代码就是转换成下一执行时间。 public Date nextEx...

朝如青丝暮成雪
57分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部