Logo成贤计协指南

什么是面向对象

注意

面向对象无法在 C 中实现,因为 C 语言不支持类和对象的概念。

在前面的学习中,我们已经掌握了 C++ 的基础语法、数据类型、流程控制和函数等内容。这些知识让我们能够编写结构化的程序,实现各种功能。但随着程序规模的扩大,代码的复杂度也会迅速增加,维护和扩展变得越来越困难。这时,**面向对象编程(Object-Oriented Programming,简称 OOP)**的思想就显得尤为重要。

面向过程

在我们之前学习的内容中,其实用的都是面向过程编程(Procedural Programming)的思想(也可以称为函数式编程)。面向过程是一种以“过程(步骤)”为核心的编程方式,强调按照一定的顺序一步一步地执行操作,把问题分解为一个个函数,然后通过函数调用来完成任务。

举个例子:

main.cpp
#include <iostream>
using namespace std;

void washVegetables() { cout << "洗菜" << endl; }
void cutVegetables() { cout << "切菜" << endl; }
void cook() { cout << "炒菜" << endl; }

int main() {
    washVegetables();
    cutVegetables();
    cook();
    cout << "装盘" << endl;
    return 0;
}

在这个例子中,每个步骤都是一个函数,主函数负责按照顺序调用这些步骤,完成整个流程。

面向过程以“过程”为中心,强调操作和步骤的顺序,适合解决结构简单、流程明确的问题。代码组织方式以函数为主,数据和操作分离。

但是面向过程的缺点也很明显。随着程序规模变大,函数之间的关系会变得复杂,数据和操作分离,容易出现“屎山代码”;代码的复用性和可维护性较差(当然,C++ 的模板也可以解决,这会在后面的章节讲解),修改一个功能可能会影响到很多地方;不容易应对现实世界中复杂的对象和关系。因此,虽然面向过程适合小型、简单的程序,但在大型项目中,维护和扩展就变得非常困难。

这时,面向对象编程的优势就体现出来了。

面向对象

面向对象编程是另一种程序设计思想,它把现实世界中的事物抽象为“对象”,并通过对象之间的交互来完成任务。你可以把对象想象成一个“实体”,它既有自己的属性(数据),也有自己的行为(方法/函数)。

例如,我们可以把“学生”抽象为一个对象,把姓名、年龄作为对象的属性,把“学习”、“考试”作为对象的方法。

面向对象可以更好地组织和管理代码,提高代码的复用性和可维护性,更容易扩展和修改功能。因此,面向对象编程在大型软件开发中得到了广泛应用。

Tips

除了面向对象外,也有其他提高代码复用性的方法,如泛型编程(C++ 的模板)等。不同的编程范式各有优缺点,选择合适的编程范式可以根据具体需求和项目特点来决定。

接下来的章节中,我们将介绍面向对象的写法,包括类的定义、对象的使用、封装、继承和多态等内容。