Ruby面向對象

Ruby是一種真正面向對象的語言,可以嵌入超文本標記語言。 Ruby中的一切都是一個對象。 所有的數字,字符串甚至類都是一個對象。 整個Ruby語言基本上建立在對象和數據的概念上。

OOP是一種使用對象及其交互來設計應用程序和計算機程序的編程概念。

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

  • 封裝
  • 多態性
  • 繼承
  • 抽象化

封裝:它隱藏來自其他對象的類的實現細節,這由於該類對其餘的代碼不可用。 其主要目的是保護數據免受數據非法操縱。

多態: 以不同的方式爲不同的數據輸入表示一個運算符或者函數。

繼承: 它從預定義類創建新類。 新類繼承其父類的行爲,父類也稱爲超類。 以這種方式,可以使預定義的類更可重用和有用。

抽象: 它通過針對問題的建模分類來隱藏類的複雜性。

Ruby類

Ruby類定義數據類型的藍圖(或模板)。 它定義了該類名稱是什麼意思。

一個類定義是使用class關鍵字,後跟類名稱,並以end關鍵字結束。

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

創建類

使用以下命令創建一個名稱爲: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

創建一個新類: Dog[@name](https://github.com/name "@name")是可用於Dog類的所有方法的實例變量。它在say_welcomesay_bye方法中使用。

Ruby對象

在Ruby中,一切東西都是一個對象。 當創建對象時,它們通過方法進行來執行具體的操作。 因此,一個對象是數據和方法的組合。

要創建一個對象,首先要定義一個類。定義一個類可用於創建多個對象。 使用new關鍵字聲明對象。

創建對象

示例:

在上一步中,已經創建了一個名爲Dog的類。 現在來創建Dog類的一個對象: aDog,並使用以下命令,

aDog = Dog.new('旺財')

完整示例代碼 -

#!/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


# 創建對象

aDog = Dog.new('旺財')

aDog.say_welcome

aDog.say_bye

執行上面示例代碼,得到結果如下 -

F:\worksp\ruby>ruby dog.rb
Welcome  旺財!
Bye  旺財, See you soon.

F:\worksp\ruby>

Ruby方法

方法是在類的主體內定義的函數。 Ruby中的數據只能通過方法訪問。 當調用方法時,Ruby會根據一個跟蹤路徑來查找。可以使用ancestors方法找出方法名稱。

定義方法

方法用def關鍵字定義,並以end關鍵字結尾。

定義一個方法: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關鍵字開始方法名稱的定義。 然後編寫方法的具體實現。 最後一行 end 表示該方法定義完成。

實例方法

實例方法也使用def關鍵字定義,只能在類實例中使用。

示例:

#!/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}"

執行上面代碼,得到以下結果 -

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

F:\worksp\ruby>

Ruby繼承

在繼承中,使用預定義的類創建新類。新創建的類稱爲派生類,派生類的類稱爲基類。 通過繼承可以重新使用代碼,從而降低程序的複雜性。

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

在Ruby中,<字符用於創建一個子類。 語法如下所示:

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

在上面的例子中,創建了兩個類:一個是Base類,另一個是派生的Child類。super方法調用Parent類的構造函數。

最後的兩行實例化了這兩個類。

執行上面示例代碼,得到以下結果 -

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

F:\worksp\ruby>

在輸出中,首先創建Parent類的對象,派生的Child類也調用其父類的構造函數,然後創建Child類。

Ruby構造函數

創建對象時自動調用構造函數,並且不返回任何值。 在Ruby中,構造函數叫作:initialize

構造函數的主要目的是啓動對象的狀態,它們不能被繼承。使用super方法調用父對象構造函數。

示例:

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

    def initialize   
        puts "Parent is created"   
    end   

end   

Parent.new

執行上面代碼,得到以下結果 -

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

F:\worksp\ruby>