对象关系

生活中充满了反复出现的模式、关系以及对象之间的层级结构。通过探究并理解这些模式,我们能够洞察现实对象的行为方式,进而深化对它们的认识。

举例而言,某天你走在街上,看见一个鲜黄色的物体附着在一丛绿色的灌木状物体上。你大概率会认出那抹亮黄是一朵花,而那丛绿色则是一株植物。尽管你从未见过这种特定植物,你依旧知道绿色部分是收集阳光的叶片,也明白花朵帮助植物繁衍。你同样清楚:一旦植物枯死,花朵也会随之凋谢。

然而,你为何能在首次见到这种植物时便推断出这一切?原因在于你掌握了“植物”这一抽象概念,并意识到眼前的植株正是该抽象概念的一个实例。你知道大多数植物都由叶片等部分组成,有些还会开花;你知道叶片与阳光互动(即便不清楚具体机理),也知道花朵的存在依赖于整株植物。正因你对植物的共性已有认知,你就能对眼前这株植物做出诸多推断。

同理,程序设计亦充斥着反复出现的模式、关系与层级结构。尤其在面向对象编程中,支配现实对象的那些模式同样适用于我们自行创建的编程对象。若能更深入地审视这些关系,我们就能更好地提升代码复用性,并编写出更具扩展性的类。

在前几章中,我们已经探讨了某些反复模式:通过循环与函数让某任务可重复执行;通过自定义枚举、结构体和类来实例化特定类型的对象。

我们也曾触及一些初级层级结构,例如数组(将若干元素组合成更大整体)以及递归(函数调用自身的一种变体)。

然而,我们尚未聚焦于## 对象之间的关系,特别是它们在编程语境下的含义。

对象之间的关系

现实世界里,两个对象可能拥有多种关系,我们使用专门的“关系类型”词汇来描述它们。例如:

  • 正方形“是一个”(is-a)形状。
  • 汽车“有一个”(has-a)方向盘。
  • 程序员“使用一个”(uses-a)键盘。
  • 花朵“依赖于”(depends-on)蜜蜂传粉。
  • 学生是班级的一“成员”(member-of)。
  • 你的大脑作为你自身的“一部分”(part-of)而存在(至少你能读到这里,我们姑且如此假设)。

所有这些关系类型在 C++ 中均有贴切映射。

本章将深入探讨“part-of”“has-a”“uses-a”“depends-on”以及“member-of”等关系类型的细微之处,并阐释它们在 C++ 类设计中的实用价值。我们还将顺带讨论几个难以归类的相关主题。

随后两章,我们将通过 C++ 的继承模型与虚函数专门研究“is-a”关系——没错,这可是重头戏。

好了,背景交代完毕。让我们开始吧。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"