C++基础教程面向对象(学习笔记(42))

本文深入探讨了对象之间的四种关键关系:组合、聚合、关联和依赖,解释了每种关系的特点及其实现方式。通过实例说明了如何正确应用这些概念,帮助读者理解在软件设计中如何有效地组织和管理对象。

综合测验

在本章中,我们了解了两个对象之间的一些不同类型的关系。

Summary

从较简单的对象构建复杂对象的过程称为对象组合。对象组合有两种类型:组合和聚合。

当类的成员与类具有部分关系时,就存在组合。在组合关系中,类管理成员的存在。要符合写作要求,对象和部件必须具有以下关系:

部件(成员)是对象(类)的一部分
部件(成员)一次只能属于一个对象(类)
部分(成员)的存在由对象(类)管理
部分(成员)不知道对象(类)的存在

组合通常通过普通成员变量实现,或者通过指针管理所有内存分配和释放来实现。如果可以将类实现为组合,则应将类实现为组合。

当类与成员具有has-a关系时,存在聚合。在聚合关系中,类不管理成员的存在。要符合聚合条件,对象及其部件必须具有以下关系:

部件(成员)是对象(类)的一部分
部件(成员)一次可以属于多个对象(类)
部分(部件)并没有,它的存在由所述对象(类)管理的
部分(成员)不知道对象(类)的存在
聚合通常通过指针或引用来实现。

关联是一种更松散的关系类型,其中类use - a不相关的对象。要符合关联条件,对象和关联对象必须具有以下关系:

关联对象(成员)与对象(类)无关
关联对象(成员)一次可以属于多个对象(类)
关联的对象(部件)不知道它的存在由对象管理的(类)的
关联对象(成员)可能知道也可能不知道对象(类)的存在
关联可以通过指针或引用实现,或者通过更间接的方式实现(例如保存关联对象的索引或键)。

在依赖中,一个类使用另一个类来执行任务。依赖类通常不是使用它的类的成员,而是临时创建,使用,然后销毁,或从外部源传递到成员函数。

在容器类中,一个类提供一个容器来容纳另一种类型的多个对象。值容器是存储它保持所述对象的副本的组合物。参考容器是存储指针或引用所述容器外的对象的集合。

std :: initializer_list可用于实现构造函数,赋值运算符和其他接受列表初始化参数的函数。std :: initailizer_list位于<initializer_list>标头中。

对象关系组成聚合关联依赖
关系类型整体/部分整体/部分无关无关
成员可以属于多个类没有
成员存在由类管理没有没有
方向性单向单向单向或双向单向
关系动词部分使用依赖于

Quiz Time

本章非常简单,比以前的章节更抽象,因此这个测验将简短而重要。

1)以下描述了什么类型的关系(组合,聚合,关联或依赖)?
1a)包含动物类型(枚举)和名称(字符串)的Animal类。
解决方案
组成 - 动物类型和名称在动物之外没有用途。
1b)带有save()函数的文本编辑器类,它接受File对象。save()函数将编辑器的内容写入磁盘。
解决方案
依赖关系 - 文本编辑器类使用File对象执行保存到磁盘的任务。
1c)冒险家类,可以携带各种物品,如剑,魔杖,药水或法术书。这些物品可以被其他冒险者丢弃和拾取。
解决方案
聚合 - 当项目与冒险者相关联时,冒险者拥有它们。当时任何人都不能使用冒险者使用的剑。但冒险家并没有管理物品的存在。
1d)程序员使用计算机在互联网上观看猫视频。
解决方案
关联 - 程序员和计算机是不相关的,除非程序员使用计算机观看小猫在Roombas上骑行。
1e)包含CPU类的Computer类。可以从计算机中删除CPU并自行测试。
解决方案
聚合 - 计算机有一个CPU,但不管理它的存在。
2)选择一个:如果你可以使用(组合,聚合,关联或依赖)设计一个类,那么你应该。
解决方案
组成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值