Ruby是一種真正物件導向的語言,可以嵌入超文件標示語言。 Ruby中的一切都是一個物件。 所有的數位,字串甚至類都是一個物件。 整個Ruby語言基本上建立在物件和資料的概念上。
OOP是一種使用物件及其互動來設計應用程式和計算機程式的程式設計概念。
以下是OOP中的一些基本概念:
封裝:它隱藏來自其他物件的類的實現細節,這由於該類對其餘的程式碼不可用。 其主要目的是保護資料免受資料非法操縱。
多型: 以不同的方式為不同的資料輸入表示一個運算子或者函式。
繼承: 它從預定義類建立新類。 新類繼承其父類別的行為,父類別也稱為超類。 以這種方式,可以使預定義的類更可重用和有用。
抽象: 它通過針對問題的建模分類來隱藏類的複雜性。
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
是可用於Dog
類的所有方法的範例變數。它在say_welcome
和say_bye
方法中使用。
在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會根據一個跟蹤路徑來查詢。可以使用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不支援多級繼承。而是支援混合型(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中,建構函式叫作: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>