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

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

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

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

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

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

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

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

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

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

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

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

只需要告訴機器人,去煮咖啡,一會機器人會自動將咖啡煮好并報告結果!
1312654-20181122101744174-1550604471.png

總結

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

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

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

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

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

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

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

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

1312654-20181122101913306-113273975.png

1312654-20181122101951199-157070562.png

本人認識:

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

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

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

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

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

轉載于:https://www.cnblogs.com/wdmx/p/9999420.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js算法初窺06(算法模式03-函數式編程)

在解釋什么是函數式編程之前,我們先要說下什么是命令式編程,它們都屬于編程范式的一種。命令式編程其實就是一塊一塊的代碼,其中包括了我們要執行的邏輯或者判斷或者一些運算。也就是按部就班的一步一步完成我們所需要的邏輯。而函數式編程則…

[mmdetection] - win10配置mmdetection(1.1和2.0) + 訓練網絡(faster-rcnn、mask-rcnn)

pytorch配置 - 參考 mmdetextion 配置(win10) mmdetection訓練faster-rcnn (win10) mmdetection訓練mask-rcnn (win10) mmdetection 2.0配置(win10) mmdetection 2.0訓練Faster-RCNN(win10) mmdetection 2.0全家桶訓練(終結版) labelme安裝教程 l…

13、Spring Boot 2.x 多數據源配置

1.13 Spring Boot 2.x 多數據源配置 完整源碼: Spring-Boot-Demos轉載于:https://www.cnblogs.com/Grand-Jon/p/9999779.html

[pytorch、學習] - 3.5 圖像分類數據集

參考 3.5. 圖像分類數據集 在介紹shftmax回歸的實現前我們先引入一個多類圖像分類數據集 本章開始使用pytorch實現啦~ 本節我們將使用torchvision包,它是服務于PyTorch深度學習框架的,主要用來構建計算機視覺模型。torchvision主要由以下幾部分構成: torchvision.datasets: …

python自動化第三周---文件讀寫

1.python文件對象提供了三個“讀”方法: read()、readline() 和 readlines()。每種方法可以接受一個變量以限制每次讀取的數據量。 read() 每次讀取整個文件,它通常用于將文件內容放到一個字符串變量中。如果文件大于可用內存,為了保險起見&a…

最詳細的java泛型詳解

來源:最詳細的java泛型詳解 對java的泛型特性的了解僅限于表面的淺淺一層,直到在學習設計模式時發現有不了解的用法,才想起詳細的記錄一下。 本文參考java 泛型詳解、Java中的泛型方法、 java泛型詳解 1. 概述 泛型在java中有很重要的地位&a…

[pytorch、學習] - 3.6 softmax回歸的從零開始實現

參考 3.6 softmax回歸的從零開始實現 import torch import torchvision import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.6.1. 獲取和讀取數據 batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_si…

Django基礎必備三件套: HttpResponse render redirect

1. HttpResponse : 它的作用是內部傳入一個字符串參數, 然后發給瀏覽器 def index(request):return HttpResponse(ok) 2. render : 可以接收三個參數, 一是request參數, 二是待渲染的 html 模板文件, 三是保存具體數據的字典參數 def index(request):return render(request, …

React 簡單實例 (React-router + webpack + Antd )

React Demo Github 地址 經過React Native 的洗禮之后,寫了這個 demo ;React 是為了使前端的V層更具組件化,能更好的復用,同時可以讓你從操作dom中解脫出來,只需要操作數據就會改變相應的dom; 而React Nat…

[pytorch、學習] - 3.7 softmax回歸的簡潔實現

參考 3.7. softmax回歸的簡潔實現 使用pytorch實現softmax import torch from torch import nn from torch.nn import init import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.7.1. 獲取和讀取數據 batch_size 256 train_iter…

【模板】NTT

NTT模板 #include<bits/stdc.h> using namespace std; #define LL long long const int MAXL22; const int MAXN1<<MAXL; const int Mod998244353; int rev[MAXN],A[MAXN],B[MAXN],C[MAXN]; int fast_pow(int a,int b){int ans1;while(b){if(b&1)ans1ll*ans*a%…

centos 7 php7 yum源

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 轉載于:https://www.cnblogs.com/myJuly/p/10008252.html

[pytorch、學習] - 3.9 多重感知機的從零開始實現

參考 3.9 多重感知機的從零開始實現 import torch import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.9.1. 獲取和讀取數據 batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size)3.9.2. 定義模型參…

C語言逗號運算符和逗號表達式基礎總結

逗號運算符的作用&#xff1a; 1&#xff0c;起分隔符的作用&#xff1a; 定義變量用于分隔變量&#xff1a;int a,b輸入或輸出時用于分隔輸出表列 printf("%d%d",a,b) 2,用于逗號表達式的順序運算符 語法&#xff1a;表達式1&#xff0c;表達式2&#xff0c;...,表達…

java基礎-泛型舉例詳解

泛型 泛型是JDK5.0增加的新特性&#xff0c;泛型的本質是參數化類型&#xff0c;即所操作的數據類型被指定為一個參數。這種類型參數可以在類、接口、和方法的創建中&#xff0c;分別被稱為泛型類、泛型接口、泛型方法。 一、認識泛型 在沒有泛型之前,通過對類型Object的引用來…

MySQL數據庫視圖(view),視圖定義、創建視圖、修改視圖

原文鏈接&#xff1a;https://blog.csdn.net/moxigandashu/article/details/63254901轉載于:https://www.cnblogs.com/chrdai/p/9131881.html

[pytorch、學習] - 3.10 多重感知機的簡潔實現

參考 3.10. 多重感知機的簡潔實現 import torch from torch import nn from torch.nn import init import numpy as np import sys sys.path.append("..") import d2lzh_pytorch as d2l3.10.1. 定義模型 num_inputs, num_outputs, num_hiddens 784, 10, 256 # 參…

【匯編語言】——第三章課后總結

第三章 的書本上主要有以下幾個內容&#xff1a; 1.內存中字的存儲 字單元&#xff1a;即存放一個字型數據&#xff08;16位&#xff09;的內存單元&#xff0c;由兩個地址連續的內存單元組成。 小端法&#xff1a;高地址內存單元中存放字型數據的高位字節&#xff0c;低地址內…

如何從 Android 手機免費恢復已刪除的通話記錄/歷史記錄?

有一個有合作意向的人給我打電話&#xff0c;但我沒有接聽。更糟糕的是&#xff0c;我錯誤地將其刪除&#xff0c;認為這是一個騷擾電話。那么有沒有辦法從 Android 手機恢復已刪除的通話記錄呢&#xff1f;” 塞繆爾問道。如何在 Android 上恢復已刪除的通話記錄&#xff1f;如…

springBoot 登錄攔截器

1、首選創建一個繼承HandlerInterceptor的攔截器 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /*** 攔…