面向對象和基於對象的區別是多態,和繼承無關。
基於對象僅僅支持了抽象數據類型的功能,繼承也不過體現了一種is-a的關系,也是抽象數據類型,只是建立了一個層次體系。但是什么是面向對象呢?就是根 據對象的實際類型不同,可以自動完成不同的行為,而僅僅通過一致的調用形式。換句話說,也就是虛函數實現的多態。以上觀點,在OO設計中已經得到了公認, 多態的另一種實現方法是泛型。
“面向對象”和“基於對象”兩個不同的概念。面向對象的三大特點(封裝,繼承,多態)卻一不可,通常“基於對象”使用對象,但是無法利用現有的對象模板產生新的對象類型,繼而產生新的對象,也就是說“基於對象”沒有繼承的特點,而“多態”是表示為父類類型的子類對象實例,沒有了繼承的概念也就無從談論“多態”。現在的很多流行技術都是基於對象的,它們使用一些封裝好的對象,調用對象的方法, 設置對象的屬性。但是它們無法讓程序員派生新對象類型。他們只能使用現有對象的方法和屬性。所以當你判斷一個新的技術是否是面向對象的時候,通常可以使用 后兩個特性來加以判斷。“面向對象”和“基於對象”都實現了“封裝”的概念,但是面向對象實現了“繼承和多態”,而“基於對象”沒有實現這些,的確很饒 口。
從事面向對象編程的人按照分工來說,可以分為“類庫的創建者”和“類庫的使用者”。使用類庫的人並不都是具備了面向對象思想的人,通常知道如何繼承和派生新對象就可以使用類庫了,然而我們的思維並沒有真正的轉過來,使用類庫只是在形式上是面向對象,而實質上只是庫函數的一種擴展。面向對象是一種思想,是我們考慮事情的方法,通常表現為我們是將問題的解決按照過程方式來解決呢,還是將問題抽象為一個對象來解決它。很多情況下,我們會不知不覺的按照過程方式來解決它,而不是考慮將要解決問題抽象為對象去解決它。
面向對象主要有幾個特性,封裝、繼承、多態。沒有封裝就不能繼承,沒有繼承就沒有運行時的多態。基於對象並不是單獨的理論,而是面向對象的初級階段,就是只有封裝。只能是把屬性、方法放進類中,實例化對象調用。學習面向對象要從基礎知識入手,學會定義類、接口的定義、繼承。然后要深入細致的研究現實事物,把現實事物或是需求文檔中的名詞抽象出來生成類或屬性,如果是主語,多半還要根據整句的描述生成方法,定義類結構。之所以叫抽象,是因為定義類成員時要忽略掉系統不需要的其它東西。慢慢你就發現原來寫程序要不停的增刪代碼和重構。
轉自:http://blog.sina.com.cn/s/blog_4ca200e20100hstp.html