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 類別案例

#