Ruby物件導向

2022-08-12 11:03:15 字數 2649 閱讀 5580

​ 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方法,不過為了和可能出...