Chiayin's blog

【2020 12th鐵人賽】Ruby名詞解釋總匯 - Day 10 : Ruby的「物件導向程式設計-類別」

字數統計: 830閱讀時間: 3 min
2022/10/30

類別與實體 class and instance

*英文發音
首先來聽聽英文發音~。
class
Yes

instance
Yes

什麼是類別呢?

這裡例舉個實際的例子讓大家明白。

首先請問大家,有沒有吃過紅龜粿呢>ˇ</!我最喜歡吃這種古早味的點心了,雖然吃下去會很胖也很常噎到,但是包蘿蔔絲的素食紅龜粿或草仔粿好好吃唷~,都會很珍惜、小心翼翼地、滿懷感激吃下去。

那麼,紅龜粿和類別有什麼關聯呢?咳咳,是這樣子的,製作紅龜粿會有個模具,稱之為「粿模」(或叫做「粿印」、「粿模」、「餅印」),在傳統的農業社會時代,每逢年過節,家家戶戶都會使用各式各樣的「粿模」印製代表吉祥、長壽、豐收……等各種不同樣貌的紅龜粿唷!

同樣的模具,可以印製多個長得相同的紅龜粿,這就是「類別(Class
)」的概念,紅龜粿則是屬於該類別的物件,就稱為「實體(Instance)」。

如何定義類別?

在Ruby世界中,要建置一個物件,首先要定義類別的特徵,然後建立一個實體。

使用classend來實現這件事,並在範圍中定義類別的方法(method)defend,對應於該類別物件的某些行為。

要注意的是:類別的命名規則,必須是「常數」,也就是首字英文字母要大寫。

範例如下:

1
2
3
4
5
class Rabbit
def eat(food)
puts "#{food}好吃營養又健康!"
end
end

PS:在字串裡面使用#{},便可以使用定義好的變數

產生實體

定義好Rabbit類別後,便可以產生許多相同的實體,並賦予他們不同的行為唷。

範例:

1
2
3
4
5
6
7
melody = Rabbit.new
rhythm = Rabbit.new

melody.eat "蔬菜"
-> # 印出來 蔬菜好吃營養又健康!
ryhthm.eat "紅蘿蔔"
-> # 印出來 紅蘿蔔好吃營養又健康!

繼承

說到類別,也會同樣講到繼承。

日常生活中的物件類別都會分有階層,如我們所熟悉的生物分類法:界、門、綱、目、科、屬、種。

兔子哺乳類,而哺乳類都屬於動物。由這樣的概念推導,我們將共同特徵分在同一類,較小的類別會繼承 (inherit) 具有所屬較大類別的特徵。如果所有哺乳類都會吃東西,那麼所有兔子也會吃東西。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Animal
def eat
puts "食物好吃!"
end
end

class Rabbit < Animal
def speak
puts "我愛你"
end
end

melody = Rabbit.new
melody.eat
-> # 印出來 食物好吃
melody.speak
-> # 印出來 我愛你

new出來的melody繼承Animal,因此同時具有eat、speak的方法唷!

實體變數(instance variable)

在實務上,在設計Rails專案時,最常使用的是「實體變數(instance variable)」。

實體變數的寫法為在變數前面加一個@,顧名思義,是活在每個實體裡的變數,而且每個實體之間互不相影響。

在Rails專案中,可以串連Controller與View之間的關聯唷。

參考資料

本文於 2020-09-17 發表在舊網站。

發佈日期:2022-10-30

更新日期:2022-10-30

CATALOG
  1. 1. 類別與實體 class and instance
    1. 1.1. 什麼是類別呢?
    2. 1.2. 如何定義類別?
    3. 1.3. 產生實體
    4. 1.4. 繼承
    5. 1.5. 實體變數(instance variable)
    6. 1.6. 參考資料