跳轉到內容

程式設計概念:面向物件程式設計 (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 中,我們希望限制一些資料,以便它只能被同一物件中的方法操作。這些受限變數有一個特殊的名稱:屬性。

每個屬性都是一個變數,具有三個特殊功能

  • 建立物件的類通常為每個屬性提供預設值或起始值
  • 屬性可以選擇對其他程式碼隱藏
  • 屬性可以選擇對其他程式碼可見,但不可編輯(只有屬性物件的程式碼(方法)可以編輯該屬性)

注意:屬性進一步分為兩種型別:欄位和屬性。所有欄位和所有屬性都是屬性,但具有額外的專門化。有關精確差異,請參閱封裝部分。

示例:屬性

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

綜合起來

[編輯 | 編輯原始碼]
練習:面向物件簡介
類和物件有什麼區別?

答案

  • 類是一個無法執行的模板
  • 物件是類的例項,可以執行
  • 一個類可以用來建立多個物件
類的主要組成部分是什麼?

答案

方法和屬性

結構和類有什麼區別?

答案

結構沒有方法

華夏公益教科書