面向過程、面向函數、面向對象

來自

https://zhidao.baidu.com/question/2089034.html

 

面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象是把構成問題事務分解成各個對象(抽象出來),建立對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決了。
而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分爲 1、黑白雙方,這兩方的行爲是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行爲在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因爲通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。
功能上的統一保證了面向對象設計的可擴展性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,只用改動棋盤對象就行了,棋盤系統保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。
再比如我要把這個五子棋遊戲改爲圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分佈在了你的程序的每一個角落,要改動還不如重寫。但是如果你當初就是面向對象的設計,那麼你只用改動規則對象就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以了。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。
當然,要達到改動只是局部的需要設計的人有足夠的經驗,使用對象不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實,這樣設計出來的所謂面向對象的程序很難有良好的可移植性和可擴展性。

 

來自

https://ifeve.com/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%92%8C%E9%9D%A2%E5%90%91%E5%87%BD%E6%95%B0%E4%B9%8B%E4%BA%89/

早期編程大都是面向函數的。因爲早期的計算機都是用來做數據分析使用。是一種分析數據並獲得結果的過程。同樣的數據集會被不同的函數所使用。在這個時期裏面向函數也被稱爲面向過程。每個函數有着標準的輸入,輸出和處理。輸入和輸出的數據並不相同,寫在不同的紙帶上。所以不用擔心數據更改導致的狀態錯誤。後來因爲內存和硬盤的出現。函數輸入和輸出的目標統一變成了內存和硬盤。不但要考慮函數執行的過程是否會出現錯誤。還要考慮輸入和輸出的結果是否會導致迭代的錯誤。所謂迭代的錯誤是指函數重複執行是否會導致內存或硬盤的數據出錯。所以在這個時期被叫做面向函數編程

面向對象編程雖然很早就被創造出來。但因爲早期的計算機都是大型機,被用於大型數據處理。爲普通用戶開發的軟件非常稀少。也就更談不上用戶操作。直到微型計算機的面市這種情況纔得到了改觀。隨着微型計算的普及,大量面向普通用戶的應用開始出現。這些應用的特點是用戶的每個操作的數據範圍都較小。數據之間的交集也不多。面向對象的語言非常適合用來開發這些應用

 

來自

https://www.cnblogs.com/wang_yb/p/8558775.html

函數式 和 面向對象 比較

面向對象核心是狀態,函數式核心是數據

所以面向對象更適合對業務(複雜的狀態變化)的設計而函數式適合對功能(複雜的數據變化)的設計, 我想,這也是面向對象應用廣泛的原因之一,畢竟大部分人接觸的都是業務開發。

隨着面向對象設計方式的發展,理論是越來越完善,複雜度也越來越高,面向對象的設計方式很多時候不再把目光投向實際的問題, 而是追求所謂的設計技巧。 函數式編程則更加直接,將問題轉化爲對數據的處理,關注點更容易集中在問題本身。

 

個人總結

面向對象與面向過程的區別,在於面對問題需求的思路不同

面向過程:是把解決問題的步驟,一步一步分析列出來,一一實現

面向對象:是整體上分析,這個問題需求是由哪些事務構成,把這些構成抽象成一個個對象

面向過程適合複雜的數據變化設計(數據計算方面)面向對象更適合對業務複雜的狀態變化的設計(人機交互方面)

 

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