核心思想
1 概要
从根本上说,我认为面向对象编程(OOP)是一种编程思想和方法论,而不仅仅是一系列语言特性。它的核心在于,我们尝试将现实世界中的事物、概念及其相互关系,通过一种更加直观、模块化的方式映射到计算机程序中。传统的过程式(函数式)编程(Procedural Programming)关注的是做什么,将程序看作是一系列按顺序执行的函数或指令。而 OOP 则关注的是谁来做,它将程序的核心构建块从函数变成了对象(Object)。
2 OOP的优势
一种抽象和建模的工具:OOP 教会我们如何识别问题领域中的关键“角色”(即对象),并抽象出它们的共同特征(属性)和行为(方法)。
例如,在开发一个银行系统时,我们会想到“账户”、“客户”、“交易”这些实体,而不是一堆孤立的函数和数据的杂乱组合。这种方式更贴近人类的思维习惯,使得软件设计更加直观和易于理解。一种管理复杂性的策略:随着软件规模的增长,无序的函数和全局数据会导致代码像一团乱麻,难以维护和扩展。
OOP 通过 封装(Encapsulation)、继承(Inheritance) 和 多态(Polymorphism) 这三大支柱,为我们提供了管理和组织这种复杂性的强大工具。它鼓励将数据和操作数据的函数 打包 在一起,形成一个独立的、高内聚的单元(对象),从而降低了模块间的耦合度。
提升软件质量的基石:
可维护性 (Maintainability):通过封装,修改一个对象的内部实现不会影响到程序的其他部分,只要其对外接口保持不变。
可复用性 (Reusability):通过继承,我们可以轻松地在现有类的基础上创建新类,复用代码,避免重复造轮子。
可扩展性 (Extensibility):通过多态,我们可以编写出通用的、可接受多种对象类型的代码。当需要增加新功能时,
往往只需要添加一个新的子类,而无需修改现有代码,这符合“开闭原则”(Open-Closed Principle)。
总而言之,OOP 是一种旨在构建灵活、可维护、可扩展的高质量软件的编程范式。它通过模拟现实世界的对象交互来组织代码,从而降低了大型软件项目的开发和维护难度。
3 OOP的核心思想
3.1 封装 (Encapsulation)
封装是将数据(属性)和操作这些数据的函数(方法)捆绑在一个名为**类(Class)**的单元中。C++ 通过 class
和 struct
关键字来实现这一点,并提供了访问控制修饰符来保护数据:
public
:公开的,任何地方都可以访问。这是对象与外部世界交互的接口。protected
:受保护的,只有该类及其子类的成员函数可以访问。private
:私有的,只有该类的成员函数可以访问。这是封装的核心,实现了“数据隐藏”,防止外部代码随意篡改对象内部状态。
3.2 继承 (Inheritance)
继承允许我们创建一个新类(派生类或子类),它会继承一个或多个现有类(基类或父类)的属性和方法。这极大地促进了代码复用,并构建出清晰的层次结构。C++ 支持单继承和多重继承。
3.3 多态 (Polymorphism)
多态的字面意思是“多种形态”,它允许我们使用一个统一的接口来处理不同类型的对象。在 C++ 中,多态主要通过虚函数(Virtual Functions)和抽象基类(Abstract Base Classes)来实现,这被称为运行时多态(Runtime Polymorphism)。
- 虚函数 (
virtual
):在基类中用virtual
关键字声明的函数,允许派生类对其进行重写(Override)。当通过基类的指针或引用调用这个函数时,程序会在运行时根据指针或引用实际指向的对象类型,来决定调用哪个版本的函数。 - 纯虚函数 (
= 0
):一种特殊的虚函数,它没有实现体。包含纯虚函数的类被称为抽象基类,不能被实例化,主要用作定义接口。