過去一週我們提到了物件導向程式設計的重要概念,像是類別、抽象類別、介面,以及四大特徵:抽象、封裝、繼承、多型。
這裡讓我嘗試用一段話來整理這些內容之間的關係:
「物件導向程式設計」是程式設計典範當中的其中一種,透過「物件」來模擬真實世界的事物,其中包含了事物本身的屬性與操作方式,以及和其他事物之間的互動關係。
為了有效率的模擬真實世界的事物,我們開始將事物分門別類,建立各種「類別」,並在從不同類別當中抽取共同特質,建立 parent 類別或是「抽象類別」,持續建立類別之間的關係與階層結構(繼承關係)。就像是生物學當中的「界門綱目科屬種」的分類與階層關係。另一方面,我們也透過「介面」,來描述物件類別在繼承關係之外,能夠獲得(或展現)的特質與能力。
上面提到的「抽取共同特質」的過程,就是一個「抽象」的過程,讓我們能夠專注在事物真正重要的特質或概念上,隱藏其他實際的細節。而另一方面,我們可以透過「繼承」來取得並實作 parent 類別中的抽象概念或方法,以及避免撰寫重複的程式碼。
「封裝」限制了物件之間的互動權限,隱藏了實作細節,提高程式的安全性、穩定性、易用性,並降低錯誤的發生。「多型」的概念和實現能力,則讓程式碼本身具備拓展性和重複使用性,讓我們能夠更有能力的去模擬這個複雜的世界
「物件導向程式設計」是一種程式設計典範,當中包含了許多的特徵,而能夠支援(部分支援)這些特徵的程式語言,就可以廣義的稱作「物件導向程式語言」。
然而使用物件導向程式語言,不代表自己寫的程式就是依循物件導向程式設計。語言是一種工具,設計是一種思考方式。
當我們能夠模擬真實世界的事物之後,便能夠透過程式碼、建立應用程式來處理真實世界的問題。然而,真實世界其實不斷的在變動,我們今天寫的程式碼,也許就無法面對明天的狀況。或者是,我們需要花費大量的心力來調整程式碼,才能應付這個變動的世界。
為了讓程式碼本身有更好的維護性、更容易拓展以面對各種變化,因此前輩們整理出了程式碼的設計原則 (Design Principles)。其中一個(一組)著名的設計原則就是 SOLID:
在後續的章節當中,會開始介紹 SOLID。同樣的,SOLID 不是萬能,但至少提供了一個思考框架,讓我們開始思考如何好好的架構我們的程式碼。