物件導向的反思

來源:互聯網
上載者:User

<p$1$2$3$4$5$6> 

物件導向有三個特性:封裝、繼承、多態。

封裝是不容置疑的,就算不是物件導向,一樣有封裝的開發思想。

多態,是能夠減少閱讀難度的方法,對合作開發有很大的協助。

<p$1$2$3$4$5$6> 

最讓人質疑,也是最有特色的是繼承。

物件導向用很形象的思維,創造性的將現實世界的種類別關係納入開發指導中,但是正是這種類比,讓我產生了一種憂慮。是不是這個目標太過理想,反而讓人們忽視了其實質。

肯定的,現實世界的種類別關係確實很普遍,我們完全有理由相信,編程使用類似的思想是有價值的,但是對於如何借鑒值得研究。

現在的物件導向繼承方法,實質是什嗎?舉例說:有個類D,繼承自類B,類D實質上就是類B的簡單修改版。用物件導向的語言來說,就是“使用原有功能,保持介面,添加功能”,或者“修正基類的功能”。

第一、介面基本一致。

第二、功能稍作改變。

因此,一般來說,繼承就是為了建立一組“類族”,他們有很強的相似性。

為什麼說繼承有問題,在於繼承極為容易被濫用。

最近我重新思考了這個問題,得出來的結論是:繼承是一項高層應用,而不是一個基本設計概念。將一個具體的應用策略作為基礎設計思想,是相當危險的,降低了設計的成效。

我認為,物件導向其實質是模組化的組件思想,其中“封裝”作為基礎,“介面”作為通訊手段,“多態”作為“介面”的基本屬性,從而達到組件於組件之間的松耦合,搞內聚狀態。如果,沒有封裝,就不可能達到高內聚的設計要求,如果沒有介面,或者介面不具備多態,組件和組件之間就沒有真正意義上的分離,封裝也沒有任何意義,也不能達到松耦合的設計目標。

因此,我覺得,“物件導向”這個提法,著眼於將概念性模型執行個體化這個角度,雖說有一定的合理性,但是從另一個角度,稱作“面向組件”編程或者更能概括其設計思想。

總結:

物件導向有幾個相關的理論。

1.概念性模型。所謂的概念性模型,就是將現實中的一組相關操作和對應的資料,組成一個單一的概念來描述的思想。比如,吃,喝,拉,撒,就可以組成人這個概念來描述。概念性模型是將現實的事物,抽象化成一組操作和資料的方法。

2.組件化思想。根據建立的概念性模型,引入封裝,介面等技術手段,實現組件化,達到高內聚松耦合的設計目標。

3.設計模式。設計模式基於組件化,建立一套卓有成效的,關於組件和組件之間的結構關係的設計方案。

物件導向理論不包含:

1.演算法

2.資料結構

我們知道“程式=演算法+資料結構”,物件導向卻不包含這兩個,說明物件導向只是上層建築,而不包含其底層支援。學習物件導向,是無法“做程式”的,但是對於本身懂得“做程式”的人來說,他就是一個有力的幫手。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.