【Ruby】物件導向:物件、類別、實體 - 筆記欄目
關於 Ruby 中的物件(Object)類別(Class)與實體(Instance)的學習筆記
前提:初學者的學習筆記,僅供參考,敬請指教~
物件導向是什麼?
Ruby 是一款物件導向程式語言
物件導向程式語言(Object Oriented Programming),簡稱 OOP。 是指使用「物件」(Object)來做設計,在物件導向的程式語言世界中,幾乎所有的一切都可以視為物件。
例如在 Ruby 世界裡,「幾乎」什麼都是物件(只有 Block 不是物件)。
那麼,所謂的物件是什麼呢?
物件(object) - 從類別(class)生出的實體(instance)
- 物件 object
- 類別 class
- 實體/實例 instance
類別是一個比較抽象的概念,我們可以把類別當做「藍圖」或是「模具」,它是用來定義實體的。在實際的操作中,我們會將程式碼包裝成一個個類別,藉由類別所產生的物件,我們可以對物件的資料進行傳遞與處理。
在物件導向的程式語言中,物件(Object)是一個類別(Class)所製造出來的實體(instance)
- 物件(object):由類別所產生。
- 把類別(class)想像成模具,而物件(Object)就是由模具(class)所刻印出來的實體(instance)。
類別(class)
類別的命名規定 = 必須是常數(開頭大寫字母)
我們先定義一個類別 Cat,它有一個方法是 eat:
class Cat # 定義一個 class 叫做 Cat
def eat(food) # 定義方法
puts "#{food} 好好吃!!"
end
end
我們來看看從類別生出的實體如何使用方法:
class Cat
def eat(food)
puts "#{food} 好好吃!!"
end
end
kitty = Cat.new
# 透過 Cat.new 方法,生出 Kitty 物件
# kitty 是從類別(class)Cat 產出的實體(instance)
kitty.eat "魚"
# 印出:魚 好好吃!
實體(instance)
接著,我們來捋順這個例子裡實體與類別的關係:
Kitty 是 Cat 這個類別 (class)產生出的實體(instance)。
想像 Cat 是一個烤盤,定義了一個方法 eat ,烤好的雞蛋糕都可以使用 eat。我們透過 Cat.new 可以烤出多個雞蛋糕。kitty 是從 Cat 這個烤盤烤出來的雞蛋糕,所以它可以使用 eat 這個方法。
class Cat # 定義一個 class 叫做 Cat
def eat(food) # 定義方法
puts "#{food} 好好吃!!"
end
end
kitty = Cat.new # kitty 是實體 ; Cat 是類別
kitty.eat "鮪⿂罐頭" #=> 印出「鮪⿂罐頭 好好吃!!」
nancy = Cat.new # nancy 是實體 ; Cat 是類別
nancy.eat "⼩魚餅干" #=> 印出「⼩小⿂餅干 好好吃!!」
繼承(inheritance)
類別之間,也可以繼承。但與其說是繼承,不如說是分類
繼承(inheritance):把共同的特徵放在同一個分類(class)
class 動物 # 有一個動物類別
end
class 靈長⽬ < 動物 # 靈長目類別繼承動物類別
def 五指對握
# do something
end
end
class ⼈ < 靈長目 # 人類別繼承靈長目類別
end
從人類別生出的 me 還有 you,都繼承了靈長目類別的方法(五指對握)。
me = ⼈.new
you = 人.new
me.五指對握()
you.五指對握()
練習題
請建立一個小狗 Dog 類別及一個小貓 Cat 類別,並從都是繼承自動物 Animal 類別,而且都有實作走路 walk 及吃東西 eat 這兩個方法。
class Animal
def walk
# do something
end
def eat
# do something
end
end
class Dog < Animal
end
class Cat < Animal
end
#因為Cat和Dog都繼承了Animal,所以可以呼叫Animal的方法
kitty = Cat.new
kitty.walk
kitty.eat
lucky = Dog.new
lucky.walk
kitty.eat
參考資料: