13.1 - 欢迎来到面向对象的世界

Key Takeaway

在 1.3 - 对象和变量 中,我们将C++中的对象定义为:“一段可以被用来存储值的内存”。一个具有名字的对象称为变量。

在传统编程领域(本节课之前介绍的内容都属于传统编程领域),程序基本上就是一系列计算机指令,它们定义了数据(通过对象),然后操作这些数据(通过语句和函数)。数据和函数共同作用同于计算所需的结果,但它们各自是独立的个体。因为这种独立性,传统的编程技术通常无法为现实世界中的事务提供直观的表示法。程序员需要将属性(变量)和行为(函数)恰当的联系起来,才能确保程序正确工作。其代码看上去多是下面这样:

1
driveTo(you, work);

面向对象编程又是什么呢?就像许多事情一样,也许通过类比最容易理解。看看你周围的事物——你看到的任何东西可以被称之为对象:书籍、建筑、食物甚至是你自己。对象通常包含两个主要的组成部分:1. 一组相关的属性(例如:重量、颜色、尺寸、体积、形状等等)。2. 它可以表现出的一些行为(例如:被打开、加热东西等等)。这些属性和行为是密不可分的。

面向对象编程(OOP)为程序员提供了一种将属性和行为打包成一个自包含、可重用“组件”的能力。其代码风格看上去像下面这样:

1
you.driveTo(work);

上面的代码不仅读起来更清楚,还更清楚目标是什么(you),调用了什么行为(开车到某个地方)。我们不再是专注于编写函数,而是专注于定义一个包含了一系列被妥善定义的行为的对象。这就是这种范式被称为“面向对象”的原因。

这么做是程序员可以以更模块化的方式编写程序,程序也更容易编写和理解,还提供了更高程度的代码重用性。通过定义如何与对象交互,以及对象如何与其他对象交互,这些对象还提供了一种更直观的方式来处理数据。

注意,面向对象编程并不是要取代传统的编程方式。它只是我们处理复杂问题时的又一种工具罢了。

面向对象编程还带来了其他一些有用的概念:继承封装抽象多态性。我们将在接下来的几章教程中涵盖所有这些概念。面向对象包含了很多新的内容,但是一旦你对它熟悉起来并对它产生兴趣,你可能再也不想回到纯粹的传统编程中去了。

注意,术语"对象"一词似乎已有些不堪负重,同时也带来了不小的混乱。在传统编程中,对象是存储值的一块内存。在面向对象编程中,“对象”意味着它既是传统编程意义上的对象,也是属性和行为的组合。从现在开始,当我们使用术语“对象”时,我们将指面向对象意义上的“对象”。