iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
Modern Web

網頁前後端寶石庫-礦坑補完計畫系列 第 20

Day 20 Ruby 封裝 vs 繼承

封裝

先請 wiki 大大出來講個話:

在物件導向程式設計方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式介面的實作細節部份包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取物件內部實作細節的手段,這個手段是由程式語言本身來提供的。封裝被視為是物件導向的四項原則之一。
適當的封裝,可以將物件使用介面的程式實作部份隱藏起來,不讓使用者看到,同時確保使用者無法任意更改物件內部的重要資料,若想接觸資料只能通過公開接入方法(Publicly accessible methods)的方式( 如:"getters" 和"setters")。它可以讓程式碼更容易理解與維護,也加強了程式碼的安全性。

阿修說文解字

封裝就是要讓使用者可以使用這個物件,但不讓使用者知道內部的邏輯。
在 Ruby 可以對變數及方法做封裝:

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

繼承

依舊請 wiki 大大出來講個話:

繼承(英語:inheritance)是物件導向軟體技術當中的一個概念。如果一個類別B「繼承自」另一個類別A,就把這個B稱為「A的子類」,而把A稱為「B的父類別別」也可以稱「A是B的超類」。繼承可以使得子類具有父類別別的各種屬性和方法,而不需要再次編寫相同的代碼。
有些程式語言支援多重繼承,即一個子類可以同時有多個父類別,比如C++程式語言;而在有些程式語言中,一個子類只能繼承自一個父類別,比如Java程式語言,這時可以透過實作介面來實現與多重繼承相似的效果。

阿修說文解字

繼承就是把對方的方法複製一份到我這邊用。
像是如果爸爸會打桌球,小孩繼承爸爸,那小孩也會打桌球。
在 Ruby 內要使用繼承是用 < 這個符號。
假設父層跟子層都有同樣的方法時,如果想要使用子層的方法可以在子層的方法內加上 super,
如此便可以覆蓋掉父層的方法。

參考:
[1]Ruby 程式語言入門
[2]封裝 (物件導向程式設計)
[3]繼承 (電腦科學)
[4]什麼是物件導向中的封裝、繼承和多型特性?


上一篇
Day 19 Ruby Proc vs Lambda
下一篇
Day 21 Ruby 類別 vs 模組
系列文
網頁前後端寶石庫-礦坑補完計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言