8.1 欢迎来到面向对象的世界¶
回看 1.3 课 —— 变量的介绍,我们在 C++ 中把对象定义为:“一块内存中一你可以储存值的空间“。一个对象带有名字的对象叫变量。
在传统的编程中,程序通常都是一系列的给计算机的指令,并且定义了一些数据,并且紧接着处理这些数据(通过一些函数)。数据和函数被分成不同实体,最终结合到一起来产生想要的结果。由于两者的分离,传统的计算机通常不能提供非常直观的对于现实的表示。如何管理、链接这些属性(变量)和行为(函数),以一个合适的方式,都取决于程序员。这种方式大约会使得代码成为以下的样子:
driveTo(you, work);
那么,什么是面向对象编程?像很多概念那样,最简单最容易的理解方式就是举个例子类比一下。超你周围看一样 —— 你看到的每一件物件都是对象:书本📚、建筑,食物,甚至是你自己。对象有两个主要的组件:1)一系列的属性(例如:质量,颜色,尺寸,硬度,形状等等),2)一系列的行为展示出来(例如:被打开,加热一些物品等等)。这些属性和行为是不能分离的。
面向对象编程提供了给我们一些能力去定义一个对象,对象的属性和表现都封装在一个自治的,可复用的包中。这使得代码看起来更像这样
you.driveTo(work);
这时不仅仅读起来更加清晰,这个主语(你)是谁,并且行为被调用(开车去某处)都清晰无比。相比起专注于写函数,我们却专注于定义拥有一些行为的集合的对象。这是为什么范式被叫做面向对象编程。
这允许程序以更加模块化的形式被写出,是的他们编写起来更容易,理解起来也是,同时能够提供一个高级别的代码可复用性。这些对象也提供了一个直观的方式,让我们定义我们如何与对象交互,处理数据,也让我们定义这些对象怎么和其他对象交互。
注意 OOP 并没有替代传统的编程方式,然而,它在你的给你了一些额外的工具,以便在必要时处理代码复杂性。
OOP 也带来了一系列其他的有用的概念,如:继承[inheritance],封装[encapsulation],抽象[abstraction],多态[polymorphism](一条给语言设计者的哲学:永远不要使用一个小的单词当一个大的单词可以做同样的事),我们将会一点点覆盖这些概念,在接下来几章教程中。有大量的新材料,但是一旦你已经熟悉面向对象编程的话,你就不会再次回到原来的纯传统编程了。
注意术语”对象“可能超过了想表达的,这也许会造成一些困扰。在传统的编程中,一个对象时一块存储值达到内存,仅此而已。在 OOP 中,一个对象意味着他也能是一个传统编程中的对象,也能结合属性和方法。从这点出发,当我们使用术语“对象”时,我们将在面向对象的意义上提到对象。