iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1

大名鼎鼎的oo (object-oriented),對沒有程式基礎或剛開始學寫程式的人來說,可能聽起來像是某種代號,但其實物件導向在程式設計領域非常重要! 而OO的基本原則,每個人都能夠掌握!

物件導向Object-oriented (oo)

物件導向暱稱為oo,是電腦科學領域中的一種程式設計方式,很多大家所熟知的程式語言,如Java, Python, PHP, C++ 等等都使用物件導向特性,就連原先其實物件導向特性不強的JavaScript在ES6版本後也加強了對類(class)的使用。
所以說瞭解物件導向,對學習程式語言是很有幫助的,但問題就在這了,大部分介紹物件導向的資料都複雜的不得了,等到讀者開始頓悟時,一堆技術債都已經欠的像玉山一樣高了。物件導向說到底是一個抽象概念,但請不要害怕這裡說的抽象概念,使用抽象概念能讓之後寫程式更方便,請聽我娓娓道來。

物件最外層是類(class),他就像是一個外包裝,涵蓋了一些東西,例如: Kayne West的專輯就是一個類(class)

https://ithelp.ithome.com.tw/upload/images/20200923/201295301kCPn15MSt.jpg

在這專輯裡有13首歌曲,時長68 分42秒,演唱者除了肯爺外還有其他合作的歌手,除此之外,每一首歌有不同的詞曲製作人,這是一個得葛萊美最佳饒舌專輯得作品…等等,這些特性全都被包在這個稱為My Beautiful Dark Twisted Fantasy的專輯(類)中,好專輯不買嗎?(怎麼講一講變成開始推銷肯爺的專輯呢?

接下來,介紹物件導向的三大特性以及五大原則。

物件導向特性

物件導向三大特性:

  1. 封裝(Encapsulation)
    意思是指公開必要公開的資訊,不須公開的資訊則隱藏起來,以例子來說,看看專輯,從外包裝來看他給予一定的資訊,如這個專輯的演唱人是誰,但更深入的資訊都被隱藏起來要打開專輯才能看到。

  2. 繼承(Inhertitance)
    子類會繼承父類擁有的所有特性,以專輯來說,每一個專輯都來自很久以前出現的第一個專輯原型,從這個專輯原型衍伸出不同樣式的專輯,所有的子類專輯都共同有父類專輯的特性,例如:裡面一定有至少一張唱片。

  3. 多型(polymorphism)
    對不同類(class)做同一種操作,將得到不同的結果,想像將專輯CD放進CD撥放器裡,不同的專輯將撥放出不同的音樂。

SOLID原則

物件導向的五大原則:

  1. 單一職責原則(Single responsibility principle, SRP)
    讓一個函數(function)只做一件事,這樣在發生錯誤時能將錯誤快速定位,也可以避免寫出傳說中的義大利麵程式。

  2. 開放封閉原則(Open-Close principle, OCP)
    開放指的是對繼承開放,封閉指的是子類不可往上更改父類的內容。如果想擴充系統的功能要用子類的繼承與相依性注入等方式擴充。

  3. 里氏替換原則(Liskov substitution principle, LSP)
    子類能在不影響程式運作的方式代替父類所做的事,也就是說就算子類很叛逆多了一堆新功能,也是可以代替爸爸的位置讓程式繼續run下去。

  4. 接口隔離原則(Interface segregation principle, ISP)
    針對不同用戶只開放該用戶需要的介面,這樣可以避免掉不相關的需求意外產生異動。表示不需要的東西就不用給用戶,以必免意外被更動到。

  5. 依賴反轉原則(Dependency inversion principle, DIP)
    當高階模組A內部使用低階模組B時,高階模組A不應該依賴低階模組B,如果要改變時,兩個模組都應該依賴另外的抽象介面。

推薦書籍

一些收藏小私心分享:

  • The Pragmatic Programmer程序員修煉之道︰從小工到專家 - Andrew Hunt和David Thomas 著
  • Clean code 代碼整潔之道 - Robert Martin 著

上一篇
天啊!要怎麼把紙本與Excel上的資料載入系統裡?
下一篇
沒用過Microflows就不算用過低代碼平台!
系列文
Mendix從入門到了解,工程師和業務都要知道低代碼平台是什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言