基於對象和物件導向的區別,對象物件導向區別
基本上每個程式員都聽過物件導向(Object-oriented)和基於對象(Object-based)這兩個概念。其實這兩個概念並沒有很明顯的界線,不過現在業界比較統一的認為只有完全具有封裝、繼承、多態三大特點的才能夠叫做物件導向,否則即使設計中蘊含了一些對象的概念,也頂多稱為基於對象。
基於對象是過程化語言自然演化而來,隨著ADT思想的成熟而成熟,七十年代到八十年代初曾經非常流行,但是很快被風頭更盛的物件導向給遮蓋了,最典型的代表是Ada83。一貫被人認為是過程化語言代表的C語言,在實際應用中基本上使用的是基於對象的思想。雖然默默無聞,但是基於對象思想下開發的軟體,實際上構成了我們現在的軟體工業基礎。
物件導向發源於60年代的挪威,第一個物件導向語言是Simula,思想成熟於80-90年代。其標誌就是繼承和多態。物件導向思想的主要曆史貢獻是催生了面向組件思想,簡化了日常編程。從嚴肅的軟體工程意義上來講,物件導向究竟是不是“一個曆史性的進步”,還有待曆史檢驗,但是這種思想方法現在已經成為主流,所以無論是不是進步,已經成為現實。
通常基於對象是使用對象,意味著它們有像C++的結構加函數這樣的對象,然而這隻是到達物件導向語言的一部分,停留在把函數捆綁在結構內部的語言是基於對象的。但是無法利用現有的對象模板產生新的物件類型,繼而產生新的對象,也就是說基於對象一般沒有繼承的特點。沒有了繼承的概念也就無從談論多態。現在的很多流行技術都是基於對象的,它們使用一些封裝好的對象,調用對象的方法,設定對象的屬性。但是它們無法讓程式員派生新物件類型。他們只能使用現有對象的方法和屬性。所以當你判斷一個新的技術是否是物件導向的時候,通常可以使用後兩個特性來加以判斷。例如:C++是物件導向的,而VB只是基於對象的。當然,搜尋現在國內大量的書籍與資料(包括大量教材)的作者都無法分清兩者之間的區別,把VB稱為物件導向,誤人子弟。
教 基於對象與物件導向的不同
物件導向的三大特點(封裝,繼承,多態)缺一不可。
通常“基於對象”是使用對象,但是無法利用現有的對象模板產生新的物件類型,繼而產生新的對象,也就是說“基於對象”沒有繼承的特點。而“多態”表示為父類類型的子類對象執行個體,沒有了繼承的概念也就無從談論“多態”。
現在的很多流行技術都是基於對象的,它們使用一些封裝好的對象,調用對象的方法,設定對象的屬性。但是它們無法讓程式員派生新物件類型。他們只能使用現有對象的方法和屬性。
所以當你判斷一個新的技術是否是物件導向的時候,通常可以使用後兩個特性來加以判斷。“物件導向”和“基於對象”都實現了“封裝”的概念,但是物件導向實現了“繼承和多態”,而“基於對象”沒有實現這些,的確很饒口。
簡單地說:基於對象不能繼承,更談不上多態.
另外:
VC++是物件導向的,而VB只是基於對象的!當然,現在國內大量的書籍與資料(包括大量教材)的作者都無法分清兩者之間的區別,把VB稱為物件導向,誤人子弟!
完全物件導向編程與基於物件導向編程有什不同?
應該是一個意思,