鍍金池/ 教程/ Ruby/ Ruby 類和對(duì)象
Ruby 方法
Ruby 語(yǔ)法
Ruby 注釋
Ruby 簡(jiǎn)介
Ruby 數(shù)據(jù)庫(kù)訪問(wèn) - DBI 教程
Ruby 安裝 - Unix
Ruby 數(shù)據(jù)類型
Ruby 異常
Ruby 類案例
Ruby 命令行選項(xiàng)
Ruby CGI Sessions
Ruby 類和對(duì)象
Ruby 環(huán)境
Ruby 面向?qū)ο?/span>
Ruby 變量
Ruby Dir 類和方法
Ruby CGI方法
Ruby 塊
Ruby JSON
Ruby File 類和方法
Ruby 安裝 - Windows
Ruby 判斷
Ruby CGI編程
Ruby 發(fā)送郵件 – SMTP
Ruby XML, XSLT 和 XPath 教程
Ruby 迭代器
Ruby 數(shù)組
Ruby 模塊
Ruby 正則表達(dá)式
Ruby CGI Cookies
Ruby Web Services 應(yīng)用 - SOAP4R
Ruby 循環(huán)
Ruby 多線程
Ruby Socket 編程
Ruby 環(huán)境變量
Ruby 日期 & 時(shí)間
Ruby 范圍
Ruby 字符串
Ruby 哈希(Hash)
Ruby 運(yùn)算符
Ruby 文件的輸入與輸出

Ruby 類和對(duì)象

Ruby 是一種完美的面向?qū)ο缶幊陶Z(yǔ)言。面向?qū)ο缶幊陶Z(yǔ)言的特性包括:

  • 數(shù)據(jù)封裝
  • 數(shù)據(jù)抽象
  • 多態(tài)性
  • 繼承

這些特性將在 面向?qū)ο蟮?Ruby 中進(jìn)行討論。

一個(gè)面向?qū)ο蟮某绦颍婕暗降念惡蛯?duì)象。類是個(gè)別對(duì)象創(chuàng)建的藍(lán)圖。在面向?qū)ο蟮男g(shù)語(yǔ)中,您的自行車是自行車類的一個(gè)實(shí)例。

以車輛為例,它包括車輪(wheels)、馬力(horsepower)、燃油或燃?xì)夤奕萘浚╢uel or gas tank capacity)。這些屬性形成了車輛(Vehicle)類的數(shù)據(jù)成員。借助這些屬性您能把一個(gè)車輛從其他車輛中區(qū)分出來(lái)。

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

類 Vehicle 的定義如下:

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

通過(guò)給這些數(shù)據(jù)成員分配不同的值,您可以創(chuàng)建類 Vehicle 的不同實(shí)例。例如,一架飛機(jī)有三個(gè)輪子,馬力 1,000,燃油罐容量為 100 升。以同樣的方式,一輛汽車有四個(gè)輪子,馬力 200,煤氣罐容量為 25 升。

在 Ruby 中定義類

為了使用 Ruby 實(shí)現(xiàn)面向?qū)ο缶幊蹋枰葘W(xué)習(xí)如何在 Ruby 中創(chuàng)建對(duì)象和類。

在 Ruby 中,類總是以關(guān)鍵字 class 開(kāi)始,后跟類的名稱。類名的首字母應(yīng)該大寫。類 Customer 如下所示:

class Customer
end

您可以使用關(guān)鍵字 end 終止一個(gè)類。 中的所有數(shù)據(jù)成員都是介于類定義和 end 關(guān)鍵字之間。

Ruby 類中的變量

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

  • 局部變量:局部變量是在方法中定義的變量。局部變量在方法外是不可用的。在后續(xù)的章節(jié)中,您將看到有關(guān)方法的更多細(xì)節(jié)。局部變量以小寫字母或 _ 開(kāi)始。
  • 實(shí)例變量:實(shí)例變量可以跨任何特定的實(shí)例或?qū)ο笾械姆椒ㄊ褂?。這意味著,實(shí)例變量可以從對(duì)象到對(duì)象的改變。實(shí)例變量在變量名之前放置符號(hào)(@)。
  • 類變量:類變量可以跨不同的對(duì)象使用。類變量屬于類,且是類的一個(gè)屬性。類變量在變量名之前放置符號(hào)(@@)。
  • 全局變量:類變量不能跨類使用。如果您想要有一個(gè)可以跨類使用的變量,您需要定義全局變量。全局變量總是以美元符號(hào)($)開(kāi)始。

實(shí)例

使用類變量 @@no_of_customers,您可以判斷被創(chuàng)建的對(duì)象數(shù)量,這樣可以確定客戶數(shù)量。

class Customer
   @@no_of_customers=0
end

在 Ruby 中使用 new 方法創(chuàng)建對(duì)象

對(duì)象是類的實(shí)例?,F(xiàn)在您將學(xué)習(xí)如何在 Ruby 中創(chuàng)建類的對(duì)象。在 Ruby 中,您可以使用類的方法 new 創(chuàng)建對(duì)象。

方法 new 是一種獨(dú)特的方法,在 Ruby 庫(kù)中預(yù)定義。new 方法屬于_類_方法。

下面的實(shí)例創(chuàng)建了類 Customer 的兩個(gè)對(duì)象 cust1 和 cust2:

cust1 = Customer. new
cust2 = Customer. new

在這里,cust1 和 cust2 是兩個(gè)對(duì)象的名稱。對(duì)象名稱后跟著等號(hào)(=),等號(hào)后跟著類名,然后是點(diǎn)運(yùn)算符和關(guān)鍵字 new

自定義方法來(lái)創(chuàng)建 Ruby 對(duì)象

您可以給方法 new 傳遞參數(shù),這些參數(shù)可用于初始化類變量。

當(dāng)您想要聲明帶參數(shù)的 new 方法時(shí),您需要在創(chuàng)建類的同時(shí)聲明方法 initialize

initialize 方法是一種特殊類型的方法,將在調(diào)用帶參數(shù)的類的 new 方法時(shí)執(zhí)行。

下面的實(shí)例創(chuàng)建了 initialize 方法:

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

在本實(shí)例中,您可以聲明帶有 id、name、addr 作為局部變量的 _initialize_方法。在這里,defend 用于定義 Ruby 方法 initialize。在后續(xù)的章節(jié)中,您將學(xué)習(xí)有關(guān)方法的更多細(xì)節(jié)。

initialize 方法中,把這些局部變量的值傳給實(shí)例變量 @cust_id、@cust_name 和 @cust_addr。在這里,局部變量的值是隨著 new 方法進(jìn)行傳遞的。

現(xiàn)在,您可以創(chuàng)建對(duì)象,如下所示:

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

Ruby 類中的成員函數(shù)

在 Ruby 中,函數(shù)被稱為方法。_類_中的每個(gè)方法是以關(guān)鍵字 def 開(kāi)始,后跟方法名。

方法名總是以小寫字母開(kāi)頭。在 Ruby 中,您可以使用關(guān)鍵字 end 來(lái)結(jié)束一個(gè)方法。

下面的實(shí)例定義了一個(gè) Ruby 方法:

class Sample
   def function
      statement 1
      statement 2
   end
end

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

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

下面的實(shí)例將創(chuàng)建類 Sample 的一個(gè)對(duì)象,并調(diào)用 hello 方法:

#!/usr/bin/ruby

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

# 使用上面的類來(lái)創(chuàng)建對(duì)象
object = Sample. new
object.hello

這將會(huì)產(chǎn)生下面的結(jié)果:

Hello Ruby!

簡(jiǎn)單的案例研究

如果您想要做更多有關(guān)類和對(duì)象的練習(xí),這里有一個(gè)案例研究:

Ruby 類案例