我所理解的面向過程與面向對象

我所理解的面向過程與面向對象

在大學的計算機系中,最常被拿出來討論的一個問題,也是大學生上Java語言基礎課所要面對的第一個問題,就是面向過程與面向對象的區別。但這些關於這兩種思想的討論往往最後會演變成C與Java區別的討論或者C與C++區別的討論。

在程序裏,面向過程是通過一個個函數之間的相互調用完成的,面向對象是利用編程語言提供的類、接口、繼承、封裝、多態等特性體現的。所以人們總是把面向過程與C語言聯繫起來,把面向對象與Java等語言聯繫起來。

誠然,C語言的特性導致了它更適合面向過程編程,而Java或者C++的特性導致了它們更適合面向對象編程。然而這些並不是這兩種編程思想的真正區別。用C語言照樣可以實現面向對象,用Java或者C++照樣可以面向過程編程,語言往往不是這類問題的關鍵。

面向過程和麪向對象,是兩種不同的編程思想。既然是思想,那麼它就影響了人們解決問題的思考方式。假如我想吃個漢堡。面向過程就是烤麪包片->烤肉->塗醬料->切菜->拼裝等一系列動作,每次想吃漢堡我都會這麼做,因爲漢堡的製造過程就是如此。而使用面向對象,我會在想吃漢堡的時候直接去找一家肯德基。

面向過程意味着解決問題的時候先將問題分解爲過程,再通過完成一個個過程達到最終的目標,它直觀,非常符合人們正常的思考方式。而面向對象則需要先對問題進行抽象,得到問題的抽象結構,再通過對象之間的相互作用解決問題。

很多人往往還有另一種錯誤的想法:面向對象優於面向過程。這又是編程語言惹的禍!那些被C語言坑慘了的學生,習慣性地把Java程序更好寫歸功於面向對象而不是GC。我的態度是:編程思想並沒有優劣之分。選用什麼思想構建程序,往往取決於問題的複雜程度、抽象程度、程序的規模和運行時間。

面向過程更適合那些簡單的問題。面向對象則適合抽象程度更高的問題。假如只是臨時地想計算一下某個公式,沒必要專門抽象出一個公式類。想構建一個web頁面,則沒必要控制整個程序運行的每一步…

有趣的是,有時候這兩種思想是同時存在於同一個程序中的

最後需要說明的一點是:編程思想跟編程語言一樣,只是一個工具,只是爲了更好地編寫優質、易讀、易維護、低耦合度的代碼。如果被思想縛住了手腳,那就得不償失了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章