iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Modern Web

Ruby新手村的礦工日記系列 第 15

[ Day 15 ] Ruby 中的物件導向程式設計

  • 分享至 

  • xImage
  •  

在之前的章節中有提過 Ruby 是一個以物件導向為設計的程式語言,而在學其他程式語言時,多少都會碰到物件導向這個名詞吧!
今天就來補一下這個物件導向的坑吧!

物件導向程式設計

我們先來看一下維基百科怎麼說吧!

物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式設計典範,同時也是一種程式開發的抽象方針。它可能包含資料、特性、程式碼與方法。物件則指的是類別(class)的實例。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式程式設計裡,電腦程式會被設計成彼此相關的物件。

霹哩啪拉講了一堆,但是還是看不懂對吧!
簡單來說,它主要包含三大概念:

  • 封裝
  • 繼承
  • 多型

封裝 (Encapsulation)

封裝的目的是為了讓使用者不需知道物件內部是如何運作,就能透過操作介
面,完成使用的目的,如電視遙控器。

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

  • 封裝變數
    實體變數(@variable)及類別變數(@@variable)是封裝在類別內部的,類別外部無法存取。
  • 封裝方法
    private 或是 protected 可以把方法關起來,變成私有方法。

繼承 (Inheritance)

讓一個類別(子類別subclass)繼承另一個類別(父類別superclass)的方法和屬性。

白話文就是你要的我也要!
舉例來說,鴨子會游泳,那小鴨也繼承了鴨子會游泳的能力。

在 Ruby 中可以用 < 這個符號來繼承:

class Duck
  def swim
    # ......
  end
end

class Duckling < Duck
end

這樣小鴨就繼承了鴨子的會游泳的能力了。

多型 (Polymorphism)

指由繼承而產生的相關的不同的類別,其物件對同一訊息會做出不同的響應。

像是狗和雞都有「叫」這一方法,但是呼叫狗的「叫」,狗會吠叫;呼叫雞的「叫」,雞則會啼叫。

class Animal
  def initialize(name)
    @name = name
  end

  def action
    puts "我們是動物,都會叫"
  end
end

class Dog < Animal
  def action 
    puts "我是#{@name},我會吠"
  end
end

class Chicken < Animal
  def action 
    puts "我是#{@name},我會啼"    
  end
end

dog = Dog.new("狗")
dog.action

chicken = Chicken.new("雞")
chicken.action

參考資料:

  1. 為你自己學 Ruby on Rails
  2. 維基百科-物件導向程式設計
  3. 什麼是物件導向中的封裝、繼承和多型特性?
  4. Ruby 物件導向程式語言

上一篇
[ Day 14 ] Ruby 區塊一塊一塊~
下一篇
[ Day 16 ] Ruby 類別 (class)
系列文
Ruby新手村的礦工日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言