面向對象編程和麪向過程的區別

面向對象和麪向過程的區別,實在是難用一兩句話說明白。
 
面向過程是一種直接的編程方法,它是按照編程語言的思路考慮問題。尤其是想C語言這種過程式語言,它就是通過順序執行一組語句來實現一個功能,這些語句的執行過程就是整個程序。不同的語言解決同一個問題的過程是不一樣的。
 
面向對象是一種抽象度更高的編程方法。它把眼光集中在了要解決問題本身而不是語言上。它的目標是使模塊的抽象度更高,可複用性更好。面向對象的目的就是可複用。
 
舉個例子,比如我們要寫一個計算器程序。這個計算機目前只要求有加減乘除四種運算。
 
用面向過程的方法,我們可能直接就寫一個main函數。然後就開始定義一些數據結構,然後就開始寫add,sub,multi,div等函數,去實現功能。
 
用面向對象的方法,我們會先定義一個Calculator類。然後定義一些必要的數據成員,然後在定義add,sub,multi,div這四個成員函數(這四個函數的功能實現和上面四個應該是基本一樣的)。
 
從上面的實現來看,這兩種實現方法的差別不是很大,甚至第二種看上去還有些多此一舉。
 
接下來,我們要擴展這個計算器,讓它能計算指數。
 
用面向過程的方法,我們會將上面實現的代碼全部copy過來,然後再增加一個power函數。
用面向對象的方法,我們會定義一個CalculatorEx類公有繼承自Calculator,再在CalculatorEx中實現Power函數。
 
上面只是一個簡單的擴展,二者的區別就明顯起來。面向過程是純代碼級的複用。面向對象的複用方式更爲優雅,它可以是代碼級的,也可以是類級的,也可以是接口級的,也可以是組件級的,甚至是服務級的。拋下這些複用概念不說。我們假設第一次實現的並不是簡單的四個功能,而是一個複雜的庫,第二次增加的也不是一個功能而是一個擴展庫。這時候面向對象的優勢就會比較明顯的體現出來。面向過程是鬆散部件,而面向對象是一個體系。
 
我說的這些都是自己的理解,可能並不完全正確。對於面向對象有一個官方的定義,但是不同人有不同的理解。所以裏面的很多東西都需要在學習的過程中去理解體會。但是,如果不動手做點東西,對這些概念很難理解到位。
 
還有就是,C,C++,Java這些都是語言,他們之間並沒有是不是面向對象的區別。用C同樣可以寫面向對象的程序,看看Linux的內核代碼就知道了。C++,Java一樣可以寫面向過程的程序,他們之所以叫面向對象的編程語言是因爲他們提供的語言特性更易於實現面向對象的編程方法,並不是說他們只能做面向對象編程。
 
還有就是並不是說面向對象一定優於面向過程。在很多領域是無法實施面向對象的方法,如硬件編程和嵌入式編程這種實時性和效率要求高的領域就無法用到面向對象。面向對象的主要領域還是用在大型,複雜型的軟件系統中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章