類別、介面、抽象這些詞, 應該算是物件導向的基礎知識, 但由於他有一點抽象, 很多人還是覺得跟他們有些距離, 解釋也不一定到位。面試時大家又很愛問, 似乎想要知道你對物件導向的認知到哪邊。小弟有幸在 10 年前參加公司的讀書會討論這兩本書 :《物件導向設計模式 - 可再利用物件導向軟體之要素》與《Effective C++ 3/e 中文版 - 改善程式與設計的 55 個具體作法》看完之後雖然還是沒有具體答案, 但肯定直到現在都有一個「物件導向感覺」的。 以下請謙虛參拜。 Object 物件 《物件導向設計模式》 物件導向程式是由物件所構成。物件將資料和可施於其上的程序包裝在一起, 此處的程序通常較作 method 或操作 (operation)。當物件收到客戶端 (client) 送來的要求 (request), 或稱為訊息 (message) 時, 就會執行對應的操作。 訊息是唯一可令物件執行操作的管道, 操作則是唯一可改變物件內部狀態的管道。有了這些限制, 物件內部狀態可說是被妥為封裝了起來 (encapsulation) : 無法接觸及, 無法自外界窺伺。 Interface 介面 《物件導向設計模式》 介面是物件導向系統的基石。 物件所宣告的每一個操作, 都得訂出該操作的名字、參數、回傳值, 也就是該操作的外貌簽名 (Signature)。所有已訂定的物件操作之 Signature, 稱為此物件的介面 (Interface)。 物件的介面, 界定出能送給此物件的訊息類型; 只有符合物件介面的 signature, 才能送給此物件。想辨識物件, 只有靠介面這條路; 若不知道介面, 便無從得知物件的資訊, 也無法叫他做任何事。物件介面並不含任何時做事項 — 物件有權自主決定該如何時做這些操作。 兩物件即使介面完全一樣, 也可能會有完全不同的實作。 《Effective C++》 對於其他語言轉換至 C++ 陣營的程式員而言, 另一個可能造成困惑的術語是介面 (interface)。 Java 和 .NET 語言都提供 interfaces 為語言元素, 但 C++ 沒有。當使用術語「介面」時, C++ 通常談的是函式的簽名 (signature) 或 class...
劍心 ~紀念軟體開發 10+ 年~ ~紀念寶寶 元 年~