Latest web development tutorials

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