<p$1$2$3$4$5$6>
物件導向有三個特性:封裝、繼承、多態。
封裝是不容置疑的,就算不是物件導向,一樣有封裝的開發思想。
多態,是能夠減少閱讀難度的方法,對合作開發有很大的協助。
<p$1$2$3$4$5$6>
最讓人質疑,也是最有特色的是繼承。
物件導向用很形象的思維,創造性的將現實世界的種類別關係納入開發指導中,但是正是這種類比,讓我產生了一種憂慮。是不是這個目標太過理想,反而讓人們忽視了其實質。
肯定的,現實世界的種類別關係確實很普遍,我們完全有理由相信,編程使用類似的思想是有價值的,但是對於如何借鑒值得研究。
現在的物件導向繼承方法,實質是什嗎?舉例說:有個類D,繼承自類B,類D實質上就是類B的簡單修改版。用物件導向的語言來說,就是“使用原有功能,保持介面,添加功能”,或者“修正基類的功能”。
第一、介面基本一致。
第二、功能稍作改變。
因此,一般來說,繼承就是為了建立一組“類族”,他們有很強的相似性。
為什麼說繼承有問題,在於繼承極為容易被濫用。
最近我重新思考了這個問題,得出來的結論是:繼承是一項高層應用,而不是一個基本設計概念。將一個具體的應用策略作為基礎設計思想,是相當危險的,降低了設計的成效。
我認為,物件導向其實質是模組化的組件思想,其中“封裝”作為基礎,“介面”作為通訊手段,“多態”作為“介面”的基本屬性,從而達到組件於組件之間的松耦合,搞內聚狀態。如果,沒有封裝,就不可能達到高內聚的設計要求,如果沒有介面,或者介面不具備多態,組件和組件之間就沒有真正意義上的分離,封裝也沒有任何意義,也不能達到松耦合的設計目標。
因此,我覺得,“物件導向”這個提法,著眼於將概念性模型執行個體化這個角度,雖說有一定的合理性,但是從另一個角度,稱作“面向組件”編程或者更能概括其設計思想。
總結:
物件導向有幾個相關的理論。
1.概念性模型。所謂的概念性模型,就是將現實中的一組相關操作和對應的資料,組成一個單一的概念來描述的思想。比如,吃,喝,拉,撒,就可以組成人這個概念來描述。概念性模型是將現實的事物,抽象化成一組操作和資料的方法。
2.組件化思想。根據建立的概念性模型,引入封裝,介面等技術手段,實現組件化,達到高內聚松耦合的設計目標。
3.設計模式。設計模式基於組件化,建立一套卓有成效的,關於組件和組件之間的結構關係的設計方案。
物件導向理論不包含:
1.演算法
2.資料結構
我們知道“程式=演算法+資料結構”,物件導向卻不包含這兩個,說明物件導向只是上層建築,而不包含其底層支援。學習物件導向,是無法“做程式”的,但是對於本身懂得“做程式”的人來說,他就是一個有力的幫手。