ruby是真正的物件導向語言,一切皆為物件,甚至基本資料型別都是物件
class box
# 建構函式
def initialize(w,h)
@with, @height = w, h #加@的是例項變數
end# get方法
def getwidth
@with # 預設最後一條語句的返回值作為函式返回值
enddef getheight
@height
end# set方法
def setwidth(w)
@with = w
end# 例項方法
def getarea
@with * @height
endendbox = box.new(10, 20)
box.setwidth 15
puts box.getwidth
puts box.getheight
puts box.getarea
ruby中,例項變數前面要加@,外部無法直接讀寫,要自己寫get,set方法來訪問。ruby提供了一種方便的屬性宣告方法來更方便地做訪問控制:
class box
# 宣告外部可讀,要用符號型別
attr_reader :label
# 宣告外部可寫
attr_writer :width, :height
def initialize(w,h,label)
@width, @height = w, h
@label = label
enddef getarea
@width * @height,
endendbox = box.new(10, 20,'box')
puts box.label
box.width = 15
puts box.getarea
attr_accessor宣告相當於reader+writer
類變數前面加上@@就可以,類方法只要前面加上self即可
class box
# 初始化類變數
@@count = 0
def initialize(w,h)
@width, @height = w, h
@@count += 1
end# 類方法
def self.printcount
puts "box count is #"
endendbox1 = box.new(10, 20)
box2 = box.new(15, 20)
box.printcount
我們經常會對類做一些封裝,因此訪問控制還是必要的。ruby的成員變數的訪問控制在前面用get、set訪問控制已經解決。方法的控制有三個級別:
舉例
class box
def initialize(w,h)
@width, @height = w, h
enddef getarea
caculate
@area
enddef caculate
@area = @width * @height
end# 方法的許可權控制宣告
private :caculate
endbox = box.new(10, 20)
puts box.getarea
# 定義基類
class box
def initialize(w,h)
@width, @height = w, h
enddef getarea
@width*@height
endend# 定義子類
class bigbox < box
def printarea
# 繼承基類方法和變數
puts getarea
endendbox = bigbox.new(10,20)
box.printarea
class box
attr_reader :width, :height
def initialize(w,h)
@width, @height = w,h
enddef getarea
@width*@height
endendclass bigbox < box
# 過載方法
def getarea
@area = @width * @height
puts "big box area is: #"
end# 運算子過載
def +(other) # 定義 + 來執行向量加法
bigbox.new(@width + other.width, @height + other.height)
endendbox1 = bigbox.new(10,20)
box2 = bigbox.new(5,10)
box1.getarea
box3 = box1+box2
box3.getarea
ruby中的物件導向應該說非常簡潔優雅,不愧是純粹的物件導向語言。 Ruby和物件導向概覽
摘要 irb 互動式ruby 在irb中輸入源 並按回車鍵,會立即看到結果。有時這種環境被稱為即時或互動式環境 irb 互動式ruby。在irb中輸入源 並按回車鍵,會立即看到結果。有時這種環境被稱為即時或互動式環境。ruby中一切都是物件。puts 1 10。1是物件,10也是物件。它們都是fix...
Ruby中的物件導向
物件導向是ruby的核心思想,我先列舉幾個單詞然後來解釋他們各自的意思。class state,method,instance,object,constructor,new,id,instance,variables,message class是生產類的母體,而constructor是生產類的機器。...
Ruby 物件導向程式設計的一些高階應用
1.send的用法 在ruby中可以在執行時,來決定那個物件被呼叫,send方法就是做這個的,他接受乙個symbol變數為引數。首先來個非常非常的簡單的例子 class foo def foo aa endendputs foo.new.send foo 當然也可以使用send方法,不過為了和可能出...