Ruby 類和物件

Ruby 類和物件

Ruby 是一種完美的面向物件程式語言。面向物件程式語言的特性包括:

  • 資料封裝
  • 資料抽象
  • 多型性
  • 繼承

這些特性將在 面向物件的 Ruby 中進行討論。

一個面向物件的程式,涉及到的類和物件。類是個別對象建立的藍圖。在面向物件的術語中,您的自行車是自行車類的一個例項。

以車輛為例,它包括車輪(wheels)、馬力(horsepower)、燃油或燃氣罐容量(fuel or gas tank capacity)。這些屬性形成了車輛(Vehicle)類的資料成員。藉助這些屬性您能把一個車輛從其他車輛中區分出來。

車輛也能包含特定的函式,比如暫停(halting)、駕駛(driving)、超速(speeding)。這些函式形成了車輛(Vehicle)類的資料成員。因此,您可以定義類為屬性和函式的組合。

類 Vehicle 的定義如下:

例項

Class Vehicle { Number no_of_wheels Number horsepower Characters type_of_tank Number Capacity Function speeding { } Function driving { } Function halting { } }

通過給這些資料成員分配不同的值,您可以建立類 Vehicle 的不同例項。例如,一架飛機有三個輪子,馬力 1,000,燃油罐容量為 100 升。以同樣的方式,一輛汽車有四個輪子,馬力 200,煤氣罐容量為 25 升。

在 Ruby 中定義類

為了使用 Ruby 實現面向物件程式設計,您需要先學習如何在 Ruby 中建立物件和類。

在 Ruby 中,類總是以關鍵字 class 開始,後跟類的名稱。類名的首字母應該大寫。類 Customer 如下所示:

class Customer end

您可以使用關鍵字 end 終止一個類。 中的所有資料成員都是介於類定義和 end 關鍵字之間。

Ruby 類中的變數

Ruby 提供了四種類型的變數:

  • 區域性變數:區域性變數是在方法中定義的變數。區域性變數在方法外是不可用的。在後續的章節中,您將看到有關方法的更多細節。區域性變數以小寫字母或 _ 開始。
  • 例項變數:例項變數可以跨任何特定的例項或物件中的方法使用。這意味著,例項變數可以從物件到物件的改變。例項變數在變數名之前放置符號(@)。
  • 類變數:類變數可以跨不同的物件使用。類變數屬於類,且是類的一個屬性。類變數在變數名之前放置符號(@@)。
  • 全域性變數:類變數不能跨類使用。如果您想要有一個可以跨類使用的變數,您需要定義全域性變數。全域性變數總是以美元符號($)開始。

例項

使用類變數 @@no_of_customers,您可以判斷被建立的物件數量,這樣可以確定客戶數量。

例項

class Customer @@no_of_customers=0 end

在 Ruby 中使用 new 方法建立物件

物件是類的例項。現在您將學習如何在 Ruby 中建立類的物件。在 Ruby 中,您可以使用類的方法 new 建立物件。

方法 new 是一種獨特的方法,在 Ruby 庫中預定義。new 方法屬於方法。

下面的例項建立了類 Customer 的兩個物件 cust1 和 cust2:

cust1 = Customer. new cust2 = Customer. new

在這裡,cust1 和 cust2 是兩個物件的名稱。物件名稱後跟著等號(=),等號後跟著類名,然後是點運算子和關鍵字 new

自定義方法來建立 Ruby 物件

您可以給方法 new 傳遞引數,這些引數可用於初始化類變數。

當您想要宣告帶引數的 new 方法時,您需要在建立類的同時宣告方法 initialize

initialize 方法是一種特殊型別的方法,將在呼叫帶引數的類的 new 方法時執行。

下面的例項建立了 initialize 方法:

例項

class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end end

在本例項中,您可以宣告帶有 id、name、addr 作為區域性變數的 initialize方法。在這裡,defend 用於定義 Ruby 方法 initialize。在後續的章節中,您將學習有關方法的更多細節。

initialize 方法中,把這些區域性變數的值傳給例項變數 @cust_id、@cust_name 和 @cust_addr。在這裡,區域性變數的值是隨著 new 方法進行傳遞的。

現在,您可以建立物件,如下所示:

cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

Ruby 類中的成員函式

在 Ruby 中,函式被稱為方法。中的每個方法是以關鍵字 def 開始,後跟方法名。

方法名總是以小寫字母開頭。在 Ruby 中,您可以使用關鍵字 end 來結束一個方法。

下面的例項定義了一個 Ruby 方法:

class Sample def function statement 1 statement 2 end end

在這裡,statement 1statement 2 是類 Sample 內的方法 function 的主體的組成部分。這些語句可以是任何有效的 Ruby 語句。例如,我們可以使用方法 puts 來輸出 Hello Ruby,如下所示:

class Sample def hello puts "Hello Ruby!" end end

下面的例項將建立類 Sample 的一個物件,並呼叫 hello 方法:

#!/usr/bin/ruby class Sample def hello puts "Hello Ruby!" end end # 使用上面的類來建立物件 object = Sample. new object.hello

這將會產生下面的結果:

Hello Ruby!

簡單的案例研究

如果您想要做更多有關類和物件的練習,這裡有一個案例研究:

Ruby 類案例