相信大家學習程式的道路上應該會多多少少都會碰到物件導向這個專有名詞,Ruby 這個語言也具有這樣的特性,今天就先為大家來簡單說明一下這個概念吧!!

物件導向基本概念、

物件導向主要裡面包含了 4 大主要概念,抽象化封裝繼承多型

抽象化(Abstraction):

把真實世界的事物,轉化成物件的概念。把物件相關的資料抽取出來,定義成為物件的屬性(attributes) 以及方法 (methods)。

想像成你要創造一個電腦物件,他具有可以記錄筆記、上網、玩遊戲等等的功能,把這樣的概念轉化成程式碼中,就是所謂的抽象化。可能可以用更具體的軟體功能舉例,你設計使用者,他有帳號密碼,可以建立文章、設定頭貼、加好友….等等,這一串分析你身旁某個東西的特性或外觀時,就是抽象化的動作。

封裝(Encapsulation):

封裝就是要讓使用者可以使用這個物件,但不讓使用者知道內部的邏輯。

在 Ruby 可以對變數及方法來進行封裝:

  • 封裝變數:實體變數(@variable)及類別變數(@@viable)就是封裝在類別內部,類別外部是無法使用。
  • 封裝方法:像是 private 或是 protected 可以把方法包起來,變成私有方法。

繼承(Inheritance):

繼承是子類別(subclass)會繼承父類別(superclass)的屬性和方法。

想像成,像是我會滑滑板,我的小孩繼承我也學會滑滑板。

在 Ruby 中要使用繼承是用 < 這個符號。
如果父層跟子層都有同樣的方法時,想要使用子層的方法可以在子層的方法內加上 super,
就可以覆蓋掉父層的方法。

多型(Polymorphism):

定義具有不同功能但是名稱完全相同的方法或屬性的類別。
想像狗和貓都有「叫」的方法,但是呼叫狗的「叫」方法,狗會”旺旺”叫;呼叫貓的「叫」,貓則會”喵喵”叫。

物件概念

物件(object) = 狀態(state) + 行為(behavior)

可以把上面的概念套用在現實生活中,看到的動植物、人、工具、物品,都可通稱為之物件(Object)。物件會有狀態跟行為,例如狗是「黑色」、「短毛」、「年紀 3 歲」等狀態,可以進行「吃飯」、「睡覺」、「走路」等行為。

Ruby 中的物件?

Ruby 是一款物件化相當徹底的程式語言,之前的章節有提到過,在 Ruby 的世界,你看得到的所有東西幾乎都是物件,數字、字串、陣列、雜湊 等等都是一種物件。

Ruby中的物件(Object)是一個類別(Class)所製造出來的實體(Instance)。
物件由類別所產生出來。把類別想像成模具,而物件就是透過模具所刻印出來的實體。
舉例來說,可以想像一個雞蛋糕(instance),是透過模具(class)

從同一個類別所產生出來的物件,均為各個獨立的物件,有著不同的屬性(state/attribute)或行為(behavior/method),也是各個不同的實體(instance)。


參考資料:

  1. Ruby 物件導向程式語言(Object Oriented Programming)
  2. Ruby 的繼承鍊 (1) - 如何實踐物件導向
  3. Ruby 封裝 vs 繼承
  4. Wiki - 物件導向程式設計
  5. 為你自己學 Ruby on Rails