還記得一開始自學程式語言時,大家一定或多或少都聽過一個名詞 物件導向
。然後身為程式新手和非程式相關科系畢業的你也許會開始 Google 它到底是什麼意思,然後你會在 維基百科 上查到諸如此類的解釋:
物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有物件概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、程式碼與方法。物件則指的是類別的實體。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,物件裡的程式可以存取及經常修改物件相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的物件。
當下看完名詞解釋,如果你和筆者一樣只是個普通人的話應該根據名詞解釋還是無法了解一個抽象的概念,然後可能因為你強盛的好奇心,會繼續在網路上搜尋更多的文章來理解這樣抽象的概念,但有可能你會發現閱讀更多文章後仍然似懂非懂,不要擔心這是屬於正常的現象。
上述所描寫的正是筆者個人學習上的經歷,看了些許文章後,仍然覺得少了點什麼才能對整體抽象的理論有更進一步的理解。直到閱讀了 Practical Object-Oriented Design: An Agile Primer Using Ruby
才發現作者 Sandi Metz 很懂得如何引導新手走入物件導向的大門。例如談論到物件導向時一定會提到的幾個重要原則:SOLID
(單一功能
、開閉原則
、李氏替換
、介面隔離
、依賴反轉
)當你看過這些原則後對於實際開發上該怎麼應用上,根據筆者個人的學習經驗似乎只會產生更多的疑問。但作者似乎知道與其講那些理論,不如透過探討實際的程式碼由淺入深的方式一步一步告訴你如果同樣的程式碼,採用物件導向的方式撰寫程式碼會有什麼優缺點?如果不使用物件導向的方式去寫可能會造成後續維護程式碼上困難?筆者看完那本書後終於對物件導向有了更深一層的概念,它也提供了思考程式碼「為什麼要這樣寫會更好?」的方向,而不僅僅是停在「把程式碼寫出來會動就好⋯⋯」的層面上。
接下來在本系列文章中,將汲取書中的智慧,去嘗試以深入淺出的方式探討書中部分物件導向的觀念與實際的應用情境。準備好與筆者一同參加本次的鐵人賽了嗎?別回頭,往前跑就對了!