鍍金池/ 教程/ Ruby/ Ruby面向?qū)ο?/span>
Ruby for循環(huán)
Ruby教程
Ruby文件I/O
Ruby迭代器
Ruby哈希
Ruby日期時(shí)間
Ruby類和對(duì)象
Ruby快速入門(30分鐘)
Ruby redo/retry語句
Ruby模塊
Ruby解析XML(REXML)
Ruby if-else語句
Ruby的功能特點(diǎn)
Ruby break/next語句
Ruby方法
Ruby是什么?
Ruby與Python比較
Ruby Case語句
Ruby目錄
Ruby范圍
Ruby異常
Ruby套接字編程(Socket)
Ruby字符串
Ruby安裝配置
Ruby運(yùn)算符
Ruby while/do...while循環(huán)語句
Ruby第一個(gè)HelloWorld程序
Ruby until循環(huán)語句
Ruby注釋
Ruby塊
Ruby數(shù)據(jù)類型
Ruby面向?qū)ο?/span>
Ruby正則表達(dá)式
Ruby數(shù)組
Ruby變量
Ruby多線程編程

Ruby面向?qū)ο?/h1>

Ruby是一種真正面向?qū)ο蟮恼Z言,可以嵌入超文本標(biāo)記語言。 Ruby中的一切都是一個(gè)對(duì)象。 所有的數(shù)字,字符串甚至類都是一個(gè)對(duì)象。 整個(gè)Ruby語言基本上建立在對(duì)象和數(shù)據(jù)的概念上。

OOP是一種使用對(duì)象及其交互來設(shè)計(jì)應(yīng)用程序和計(jì)算機(jī)程序的編程概念。

以下是OOP中的一些基本概念:

  • 封裝
  • 多態(tài)性
  • 繼承
  • 抽象化

封裝:它隱藏來自其他對(duì)象的類的實(shí)現(xiàn)細(xì)節(jié),這由于該類對(duì)其余的代碼不可用。 其主要目的是保護(hù)數(shù)據(jù)免受數(shù)據(jù)非法操縱。

多態(tài): 以不同的方式為不同的數(shù)據(jù)輸入表示一個(gè)運(yùn)算符或者函數(shù)。

繼承: 它從預(yù)定義類創(chuàng)建新類。 新類繼承其父類的行為,父類也稱為超類。 以這種方式,可以使預(yù)定義的類更可重用和有用。

抽象: 它通過針對(duì)問題的建模分類來隱藏類的復(fù)雜性。

Ruby類

Ruby類定義數(shù)據(jù)類型的藍(lán)圖(或模板)。 它定義了該類名稱是什么意思。

一個(gè)類定義是使用class關(guān)鍵字,后跟類名稱,并以end關(guān)鍵字結(jié)束。

通常,類的名稱必須以大寫字母開頭。 具有多個(gè)單詞的類名稱時(shí),在每個(gè)單詞首字母大寫并且不用分隔字符在一起組成。

創(chuàng)建類

使用以下命令創(chuàng)建一個(gè)名稱為:Dog 的類,

#!/usr/bin/ruby   
# file : dog.rb

class Dog

  def initialize(name="Wong")
    @name = name
  end

  def say_welcome
    puts "Welcome  #{@name}!"
  end

  def say_bye
    puts "Bye  #{@name}, See you soon."
  end
 end

創(chuàng)建一個(gè)新類: Dog 。 @name是可用于Dog類的所有方法的實(shí)例變量。它在say_welcomesay_bye方法中使用。

Ruby對(duì)象

在Ruby中,一切東西都是一個(gè)對(duì)象。 當(dāng)創(chuàng)建對(duì)象時(shí),它們通過方法進(jìn)行來執(zhí)行具體的操作。 因此,一個(gè)對(duì)象是數(shù)據(jù)和方法的組合。

要?jiǎng)?chuàng)建一個(gè)對(duì)象,首先要定義一個(gè)類。定義一個(gè)類可用于創(chuàng)建多個(gè)對(duì)象。 使用new關(guān)鍵字聲明對(duì)象。

創(chuàng)建對(duì)象

示例:

在上一步中,已經(jīng)創(chuàng)建了一個(gè)名為Dog的類。 現(xiàn)在來創(chuàng)建Dog類的一個(gè)對(duì)象: aDog,并使用以下命令,

aDog = Dog.new('旺財(cái)')

完整示例代碼 -

#!/usr/bin/ruby   
# file : dog.rb

class Dog

  def initialize(name="Wong")
    @name = name
  end

  def say_welcome
    puts "Welcome  #{@name}!"
  end

  def say_bye
    puts "Bye  #{@name}, See you soon."
  end
 end


# 創(chuàng)建對(duì)象

aDog = Dog.new('旺財(cái)')

aDog.say_welcome

aDog.say_bye

執(zhí)行上面示例代碼,得到結(jié)果如下 -

F:\worksp\ruby>ruby dog.rb
Welcome  旺財(cái)!
Bye  旺財(cái), See you soon.

F:\worksp\ruby>

Ruby方法

方法是在類的主體內(nèi)定義的函數(shù)。 Ruby中的數(shù)據(jù)只能通過方法訪問。 當(dāng)調(diào)用方法時(shí),Ruby會(huì)根據(jù)一個(gè)跟蹤路徑來查找??梢允褂?code>ancestors方法找出方法名稱。

定義方法

方法用def關(guān)鍵字定義,并以end關(guān)鍵字結(jié)尾。

定義一個(gè)方法:get_name,所下示例顯示。

F:\worksp\ruby>irb
irb(main):006:0> def get_name
irb(main):007:1>   puts "My name is Maxsu"
irb(main):008:1> end
=> :get_name
irb(main):009:0> get_name
My name is Maxsu
=> nil
irb(main):010:0>

def關(guān)鍵字開始方法名稱的定義。 然后編寫方法的具體實(shí)現(xiàn)。 最后一行 end 表示該方法定義完成。

實(shí)例方法

實(shí)例方法也使用def關(guān)鍵字定義,只能在類實(shí)例中使用。

示例:

#!/usr/bin/ruby -w   
# file : instance-methods.rb

# define a class   
class Circle   
   # constructor method   
   def initialize(r)   
      @radius = r   
   end   
   # instance method   
   def getArea   
      3.14 * @radius * @radius   
   end   
end   

# create an object   
circle = Circle.new(200)   

# call instance methods   
a = circle.getArea()   
puts "Area of the box is : #{a}"

執(zhí)行上面代碼,得到以下結(jié)果 -

F:\worksp\ruby>ruby instance-methods.rb
Area of the box is : 125600.0

F:\worksp\ruby>

Ruby繼承

在繼承中,使用預(yù)定義的類創(chuàng)建新類。新創(chuàng)建的類稱為派生類,派生類的類稱為基類。 通過繼承可以重新使用代碼,從而降低程序的復(fù)雜性。

Ruby不支持多級(jí)繼承。而是支持混合型(mixins)。

在Ruby中,<字符用于創(chuàng)建一個(gè)子類。 語法如下所示:

parentClass < subClass

示例

#!/usr/bin/ruby   
# file : inheritance.rb
class Parent   

    def initialize   
        puts "Parent class created"   
    end   
end   

class Child < Parent   

   def initialize   
       super   
       puts "Child class created"   
   end   
end   

Parent.new   
Child.new

在上面的例子中,創(chuàng)建了兩個(gè)類:一個(gè)是Base類,另一個(gè)是派生的Child類。super方法調(diào)用Parent類的構(gòu)造函數(shù)。

最后的兩行實(shí)例化了這兩個(gè)類。

執(zhí)行上面示例代碼,得到以下結(jié)果 -

F:\worksp\ruby>ruby inheritance.rb
Parent class created
Parent class created
Child class created

F:\worksp\ruby>

在輸出中,首先創(chuàng)建Parent類的對(duì)象,派生的Child類也調(diào)用其父類的構(gòu)造函數(shù),然后創(chuàng)建Child類。

Ruby構(gòu)造函數(shù)

創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用構(gòu)造函數(shù),并且不返回任何值。 在Ruby中,構(gòu)造函數(shù)叫作:initialize。

構(gòu)造函數(shù)的主要目的是啟動(dòng)對(duì)象的狀態(tài),它們不能被繼承。使用super方法調(diào)用父對(duì)象構(gòu)造函數(shù)。

示例:

#!/usr/bin/ruby   
# file: class-initialize.rb
class Parent   

    def initialize   
        puts "Parent is created"   
    end   

end   

Parent.new

執(zhí)行上面代碼,得到以下結(jié)果 -

F:\worksp\ruby>ruby class-initialize.rb
Parent is created

F:\worksp\ruby>