面向過程、面向函數、面向對象的區別淺談


Python的面向過程、面向函數、面向對象的區別淺談

轉自--獵奇古今,加上其他

有人之前私信問我,python編程有面向過程、面向函數、面向對象三種,那么他們區別在哪呢?

面向過程就是將編程當成是做一件事,要按步驟完成!

比如煮咖啡這件事,先拿一定量的咖啡豆,然后磨成粉末,再倒入咖啡機,等待幾分鍾,就煮好了咖啡。大概過程是這樣的

整個過程是按步驟一步一步執行,最終達到目標!

面向函數呢,就是將編程分成N件事情,分配每件事情為一個函數,然后要按步驟執行函數完成!

同樣是上面的例子,我們可以這樣實現

分解整個任務,執行每個單獨小任務,該哪個任務執行,就通知對方即可,執行的過程呢,已經提前封裝在函數內了!

面向對象就不一樣了,將整個任務封裝成一個大的類,在這個類里面詳細分解執行每個步驟,只需要執行類就可以完成任務

還以上面例子來說,面向對象就是我不再自己煮咖啡了,而且先設計一個機器人,告訴它煮咖啡的每個步驟(這里注意,你可以使用別人機器人提前設定好的程序哦),然后放在一邊,當我想煮咖啡的時候,只需要給機器人一個指令,就自動煮好一杯咖啡了!在代碼中是這樣的

只需要告訴機器人,去煮咖啡,一會機器人會自動將咖啡煮好並報告結果!

總結

面向過程:需要你自己去一步一步的執行

面向函數:也是需要自己去一步一步執行,只是執行的過程已經提前設定好了

面向對象:讓機器人去執行 ,因為已經設定好執行步驟,你只需等待結果就好了

因此,在我看來,面向過程和對象,是自己在干活,面向對象,是先創造機器人,然后讓機器人去干活。

站在計算機程序角度來講,面向過程(函數)和面向對象的本質理解為:

面向過程(函數)的程序設計把計算機程序視為一系列的命令集合,即一組函數的順序執行。為了簡化程序設計,面向過程把函數繼續切分為子函數,即把大塊函數通過切割成小塊函數來降低系統的復雜度。

而面向對象的程序設計把計算機程序視為一組對象的集合,而每個對象都可以接收其他對象發過來的消息,並處理這些消息,計算機程序的執行就是一系列消息在各個對象之間傳遞。

總的來說:面向對象是將事物高度抽象化,面向對象必須先建立抽象模型,之后直接使用模型就行了;面向過程是一種自頂向下的編程!

本人認識:

第一,研究考察的基本單元(粒度)及其特性,命令,函數,還是對象?第二,如何使用這些粒度單元,讓他們相互作用,誰先誰后的調度;第三,要看實際業務與哪個粒度比較接近,不要硬套,否則就如拿着java搞匯編一樣,誰蛋疼誰知道。還有其他范式,如聲明式,響應式。

進一步:
命令范式(腳本過程),就是將各種單詞組成一段話。
函數式,你拿了一個插排,開啟開關(輸入參數:電壓220伏特),打開電飯鍋(輸入參數:15min等),盛入飯碗;每個步驟都用函數傳入參數完成,這個結構較松散,插排不一定要跟電飯鍋有個特別的關系。你說要搞個什么專門做飯系統之類,就像oop了,插排就專有了,它與電飯鍋關系就緊密了,都屬於做飯系統內部成員。
面向對象(合適的對象具有較好內聚性),給你一台機器(對象)讓它干活,你需要打開電源,按下制作命名,然后按下結束。
聲明式,如sql, 把要干的活用個句子描述好了就行了。
響應式比oop更隨性了,直接發一個短信(如幫我把這事弄一下。。)過去對方就幫你干活了,其他的你根本不用管。

這些基本研究考察單元的特性決定了: 當基本單元構建完成之后如何重用(所謂重用就是在不同地方多次使用)這些代碼,如果你有對象你就直接使用對象類;如果你的基本單元是函數,那么你重用的只是函數,否則不能重用就要在不同地方重寫了!若,你的基本單元是命令,那么別處的你似乎只能復制代碼了,納尼?若你需要的是各種服務類似的,比如點外賣,你只要,再點擊一下,我要了。。。

正是這些狀況,各種編程方式就有不同的性質表現和結構組成,正所謂動機決定表現,總體運行機理決定樣本一樣。各自范式酌情恰當使用才是最牛,硬拗勉強未必好過。。

也有更多的空間划分隔離和狀態保持


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM