面向对象与附加编程:类、对象与实例化

你好!欢迎来到现代计算机科学中最令人兴奋且最基础的概念:面向对象编程(Object-Oriented Programming,简称 OOP)。别担心,如果刚开始觉得术语有点晦涩,我们将会通过现实生活中的例子来一一拆解。

在这一章中,我们将学习如何围绕“事物”(对象)而非仅仅是操作序列来构建代码。这种方法能帮助我们构建大型、复杂的程序,使其更易于管理、调试和重用。熟练掌握类和对象是你在 A-Level 编程中取得成功的关键!

为什么要使用面向对象编程 (OOP)?

使用面向对象范式 (Object-Oriented Paradigm) 的核心原因在于,它能更准确地在代码中模拟现实世界的系统。它通过提供结构和组织性,帮助管理大型程序中的复杂性。

使用 OOP 的优势:

  • 模块化 (Modularity): 程序由独立的单元(对象)构成,使代码更容易测试和维护。
  • 可重用性 (Reusability): 一旦定义好一个类,就可以创建多个对象,而无需重复编写定义。
  • 抽象 (Abstraction): 你只需要与你所需要的部分交互,从而隐藏复杂的内部运作机制。
  • 可扩展性 (Scalability): 通过创建与现有类交互的新类,可以更轻松地添加新功能或扩展程序。


1. 类 (Classes):蓝图

想象一下,你要为一款模拟游戏制作 10 辆不同的赛车。你肯定不会把完整的设计图画 10 遍,对吧?你会创建一个总体的方案或模板。

在 OOP 中,这个总体方案就是类 (Class)

是一个定义或蓝图,它描述了该类型的所有对象将拥有的特征(数据)和行为(动作)。它本身不是对象,而是用于创建对象的结构。

由类定义的关键组成部分

类将数据和操作这些数据的函数结合在一起:

1. 属性或特性 (Property or Attribute):
这些是定义对象特征的数据项。它们就像包含在类定义中的变量。

  • 类比: 如果类是汽车 (Car),属性可能包括颜色 (Colour)最大速度 (MaxSpeed)引擎排量 (EngineSize)

2. 方法 (Method):
这些是类中定义的函数或子程序,它们描述了对象可以执行的动作,或者可以对该对象执行的动作。

  • 类比: 如果类是汽车 (Car),方法可能包括驾驶 (Drive())刹车 (Brake())鸣笛 (HonkHorn())

快速回顾:类结构

一个 = (数据/属性) + (函数/方法)


2. 对象 (Objects):实物

如果类是汽车的蓝图,那么对象就是行驶在路上的那辆真车。

对象是类的一个实例。它是根据类蓝图创建的具体实体。每个对象都拥有类中定义的属性的唯一值。

  • 示例: 如果我们有一个汽车 (Car) 类,我们可以创建两个对象:

对象 A (汽车 1):
属性:颜色 = 蓝色
属性:最大速度 = 200
方法:驾驶() (这个方法只对这辆蓝色汽车起作用)。

对象 B (汽车 2):
属性:颜色 = 红色
属性:最大速度 = 180
方法:驾驶() (这个方法只对这辆红色汽车起作用)。


你知道吗? 对象有时被称为实例 (Instances)。当你创建一个对象时,你就是在制作该类的一个实例。


3. 实例化与构造函数

我们如何将静态蓝图(类)转化为功能性的、驻留在内存中的实体(对象)呢?我们使用实例化 (Instantiation)

3.1 实例化(创建过程)

实例化是指从类定义创建新对象的过程。

步骤类比:做蛋糕(实例化)

1. 类: 蛋糕的配方(蓝图)。
2. 实例化: 混合原料并烘焙的实际过程。
3. 对象: 制作完成、可以享用(使用)的蛋糕。

当你编写类似 myCar = NEW Car() 的代码时,你就在执行实例化。这会告诉计算机分配内存,并根据汽车 (Car) 类的定义构建一个新对象。

3.2 构造函数 (Constructors)(初始设置)

当对象在实例化过程中被创建时,通常会立即调用一个特殊的方法来配置对象,这就是构造函数 (Constructor)

构造函数是一种特殊类型的方法,当对象从类中实例化时,它会被自动调用。

它的主要任务是将对象初始化为给定状态,这意味着它为对象的属性(特性)设置初始值、默认值或起始值。

  • 示例: 当你创建一个新的汽车对象时,构造函数可能会自动将速度设为 0,将引擎状态设为关闭,并分配车牌号。

需要避免的常见错误: 不要将构造函数与其他方法混淆。虽然它们都是类内部的函数,但构造函数仅在对象首次创建时执行*一次*,而其他方法(如驾驶())可以在对象的整个生命周期中被多次调用。

✏ 关键要点(定义链)

类 (Class) 是模板。
对象 (Object) 是基于模板的具体实体。
实例化 (Instantiation) 是创建对象的过程。
构造函数 (Constructor) 是在实例化期间运行的特殊方法,用于设置对象的初始数据(属性)。


4. 核心 OOP 概念概览(教学大纲定义)

教学大纲要求你熟悉以下概念,它们描述了 OOP 系统中使用的关系和结构化技术。我们在这里进行简要定义。

封装 (Encapsulation)

封装是将数据(属性)和操作这些数据的方法捆绑到一个单元(类/对象)中。至关重要的是,这意味着对象的内部运作和数据表示对外部世界是隐藏的,仅通过定义的方法来控制访问。这防止了数据的意外破坏。

继承 (Inheritance)

继承是一种关系,其中一个类(子类 (subclass)派生类)基于现有类(基类 (base class)父类),或者说是现有类的更专业化版本。子类会自动接收基类的所有属性和方法。

  • 类比: 卡车 (Truck)继承自通用的车辆 (Vehicle) 类。卡车会自动获得车辆引擎排量属性,但会添加其特有的属性,例如载货量 (CargoCapacity)
重写 (Overriding)

重写发生在子类重新定义(修改)其从基类继承的方法时。这使得子类对象在调用该方法时,能够表现出与基类略有不同、更专业化的行为。

  • 示例: 车辆卡车都有一个启动引擎 (StartEngine()) 方法。卡车类可以重写此方法以包含额外的检查,反映出启动重型卡车与启动小型汽车的不同。
关联 (Association)

关联是两个对象之间的关系,其中一个对象可以使用另一个对象。这是一种比继承(“是……的一种”)更弱的关系。它仅仅意味着两个类是链接在一起的,因为一个类需要另一个类的服务或数据。

  • 示例: 在足球模拟中,球队 (Team) 对象与多个球员 (Player) 对象存在关联。球队对象“拥有”或“使用”球员对象。