前言
本文主要想用日常生活的例子,解釋 object oriented programming 出產的原因,以上。
正文
從不相干的事開始?
小菜是一個很愛打籃球的小伙子,每一天下午都會去他家附近的大學練習投籃。但是小菜是一個很健忘的人,常常東西用完不會物歸原處,所以常常在出門前忙進忙出找鑰匙找錢包找手機。
每天出門打籃球前也不例外,球衣球褲襪子在房間;籃球鞋在玄關;籃球在雜物間;水壺通常插在書包;運動毛巾放在廁所;所有東西都放在家裡各個地方。
這樣的配置對於健忘的小菜非常不友善,出門前手忙腳亂,還常常到了球場後發現忘記帶了某個用具或是球沒氣了。
為了解決這個問題,小菜想到了一個好方法。與其將東西收在家裡的各個角落,何不以活動為分類標準,準備幾個大包包,把要用到的用具依照活動分類丟進去,出們時就直接帶著包包就好,不用再東找西找了。
於是他準備了一個大袋子,把所有打籃球會用到的用具都丟進去,打球時只要把背包背起來就可以了。
試了幾個月後,小菜發現這方法真的很好用,不單是籃球,包括上課、上班、爬山他都分別準備了一個袋子將需要的用品分裝到各個包包裡。
這麼做不但方便整理,使用起來也更符合直覺,小菜不用再多花心思就可以把所有東西一次帶齊,要用的要穿的,甚至是需要的資料(運動中心的會員證),通通包再一起。
回到 object oreinted
鏡頭拉回我們的主題 object oriented,我們先看看維基百科對於 object oriented 的定義:
是種具有物件概念的程式設計典範,同時也是一種程式開發的抽象方針。它可能包含資料、特性、程式碼與方法。物件則指的是類別(class)的實例。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式程式設計裡,電腦程式會被設計成彼此相關的物件
傳統的見解認為,寫程式就是對電腦下指令,每一行程式碼、function 都是一個具特定功能的指令,對電腦下達命令。
為了在接下來可以少寫幾個字,在這邊就用一下法律人最愛的命名方式稱此思維為指令說 Object oriented 則稱為物件說吧。(客觀指令說,主觀指令說,主客觀指令說? 好啦沒有)。
物件說的則展現了完全不同的思維。
在 object oriented 的設計思維之下,認為程式碼的設計應該要以物件(object)為單位,在物件裡封裝所有需要用到的資料以及功能。這樣子的話,就可以透過操縱 object 來操作特定資料,整體而言更好維護,使用起來也更加直覺。
看到這邊有沒有發現其實 object oriented 的概念其實跟小菜的收納方法很類似?
小菜將籃球用品全部放在同個袋子,方便整理、使用;工程師則是將需要用到的 property、method 全部放在同一個 object 裡,這樣做的話,在維護上和操作上都更方便、符合直覺。