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

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

轉自--獵奇古今,加上其餘python

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

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

好比煮咖啡這件事,先拿必定量的咖啡豆,而後磨成粉末,再倒入咖啡機,等待幾分鐘,就煮好了咖啡。大概過程是這樣的
函數

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

面向函數呢,就是將編程分紅N件事情,分配每件事情爲一個函數,而後要按步驟執行函數完成!
設計

一樣是上面的例子,咱們能夠這樣實現對象

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

面向對象就不同了,將整個任務封裝成一個大的類,在這個類裏面詳細分解執行每一個步驟,只須要執行類就能夠完成任務程序設計

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

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

總結

面向過程:須要你本身去一步一步的執行

面向函數:也是須要本身去一步一步執行,只是執行的過程已經提早設定好了

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

所以,在我看來,面向過程和對象,是本身在幹活,面向對象,是先創造機器人,而後讓機器人去幹活。

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

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

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

總的來講:面向對象是將事物高度抽象化,面向對象必須先創建抽象模型,以後直接使用模型就好了;面向過程是一種自頂向下的編程!

本人認識:

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

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

這些基本研究考察單元的特性決定了: 當基本單元構建完成以後如何重用(所謂重用就是在不一樣地方屢次使用)這些代碼,若是你有對象你就直接使用對象類;若是你的基本單元是函數,那麼你重用的只是函數,不然不能重用就要在不一樣地方重寫了!若,你的基本單元是命令,那麼別處的你彷佛只能複製代碼了,納尼?若你須要的是各類服務相似的,好比點外賣,你只要,再點擊一下,我要了。。。

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

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

相關文章
相關標籤/搜索