跳转到内容

编程概念:面向对象编程 (OOP)

来自 Wikibooks,开放世界的开放书籍

试卷 1 - ⇑ 编程基础 ⇑

← 面向对象编程 面向对象编程的要素 面向对象编程的特点 →


OOP 的关键要素

[编辑 | 编辑源代码]

使用 OOP 设计或编写程序时,有四个关键要素

  • 对象
  • 方法
  • 属性

在 OOP 中,对象是复合数据:它将其他事物组合成一个单一的包。如上所述,使对象独一无二的是它将数据(例如整数、字符串、引用)与代码(即过程)结合在一起。

在大多数语言中,对象不存在于源代码中:您不能直接“写下”一个对象。相反,您必须逐个创建对象,填充各个数据和代码片段。

重要的是要记住,对象不仅包含数据,它本身也是数据。程序一旦开始运行,您就可以自由更改对象内部任何数据片段的值,并且在大多数语言中,您还可以更改对象本身的元素(数据、代码)。

示例:对象

典型的对象可以是出现在屏幕上的东西(例如,图片、文本框等)或编程的一部分(例如角色、连接、粒子等)。

要使用任何值(数字 7,单词 Apple),我们需要一个数据类型。数字有数据类型,例如“整数”,文本有数据类型,例如“字符串”。

为了定义对象并在源代码中使用它们,我们需要一个数据类型。类是对象的的类型。每个类都定义了特定的一组数据和特定过程,这些数据和过程将构成特定对象。


类作为模板

[编辑 | 编辑源代码]

由于对象很复杂,内部包含许多不同的变量和过程,因此类比普通数据类型更复杂。大多数 OOP 语言为类提供了额外的功能来帮助我们使用和创建它们。

类不仅定义了对象的类型,而且通常还为新对象定义默认值。这使我们能够像使用模板或饼干切割器一样使用类:单个类可以创建许多相同的对象。类甚至可以在创建每个对象时对其进行少量更改,我们稍后会看到。

由于对象本身就是数据,因此即使它们一开始相似或相同,也可以在创建后分别修改每个对象。

示例:类和对象
您可以使用相同的类作为模板来创建(实例化)许多对象
示例:类和对象

让我们看看下面的例子

class car
  private maxSpeed as integer
  public fuel as integer
  public sub setSpeed(byVal s as integer)
    maxSpeed = s
  end sub
  public function getSpeed() as integer
    return maxSpeed
  end function
  public sub refuel(byVal x as integer)
    console.writeline("pumping gas!")
    fuel = fuel + x
  end sub
  public function getFuel() as integer
    return fuel
  end function
  public sub drive()
    fuel = fuel - 1
  end sub
end class

您可以看到该类名为 car,它具有

  • 两个属性:maxSpeed, fuel
  • 五个方法
    • 三个过程:setSpeed, refuel, drive
    • 两个函数:getSpeed, getFuel

请记住,这是一个类,因此只是一个模板,我们需要使用对象“创建”它

过程(和函数)可以在任何地方创建,并且可以在任何时间被任何代码使用。在 OOP 中,我们希望限制一些过程(和函数),以便它们只能作用于与其关联的对象内部的数据。这些受限版本有一个特殊的名称:方法。

每个方法都是一个过程,具有两个特殊功能

  • 我们可以根据方法所附加的对象和创建该对象的类来限制哪些源代码可以访问该方法
  • 方法可以访问一个特殊变量,该变量是其附加到的对象和/或类。根据语言的不同,此变量通常命名为“self”、“this”或“Me”(“self”用于 Delphi/Pascal、Ruby 和(惯例)Python,“this”来自 Java 和 C#,“Me”来自 VB.Net)。

数据可以在任何地方创建,并且可以被任何代码在任何时间使用。在 OOP 中,我们希望限制一些数据,以便它只能被同一对象中的方法操作。这些受限变量有一个特殊的名称:属性。

每个属性都是一个变量,具有三个特殊功能

  • 创建对象的类通常为每个属性提供默认值或起始值
  • 属性可以选择对其他代码隐藏
  • 属性可以选择对其他代码可见,但不可编辑(只有属性对象的代码(方法)可以编辑该属性)

注意:属性进一步分为两种类型:字段和属性。所有字段和所有属性都是属性,但具有额外的专门化。有关精确差异,请参阅封装部分。

示例:属性

在上面的示例中,我们存储了燃料和最大速度。

综合起来

[编辑 | 编辑源代码]
练习:面向对象简介
类和对象有什么区别?

答案

  • 类是一个无法执行的模板
  • 对象是类的实例,可以执行
  • 一个类可以用来创建多个对象
类的主要组成部分是什么?

答案

方法和属性

结构和类有什么区别?

答案

结构没有方法

华夏公益教科书