炒菜模型——各類編程範式

  版權申明:本文爲博主窗戶(Colin Cai)原創,歡迎轉帖。如要轉貼,必須註明原文網址

  http://www.cnblogs.com/Colin-Cai/p/9431665.html 

  做者:窗戶

  QQ/微信:6679072

  E-mail:6679072@qq.com

  我這裏以炒菜爲例來給出各類編程範式的示例。html

 

過程式編程sql

 

  生活的經驗告訴咱們如下的物理現實,事情是按照時間的順序一個步驟接一個步驟的發展。編程裏有一個範式就模擬了這樣的經驗,就是過程式編程。編程

  若是如今有一些剛從超市買回來的菜,要吃進肚子,按照過程式編程,能夠以下表示:微信

 

    洗()函數式編程

    切()函數

    炒()學習

    吃()人工智能

 

  以上的代碼中,括號外爲動詞,括號內爲名詞。熟悉過程式的咱們都知道,這裏動詞對應於函數,名詞對應於函數的參數。spa

 

 

函數式編程htm

 

  咱們觀察上述的過程式編程對於炒菜這個問題描述,不難發現,這四步的名詞都是菜,但動詞卻不同。

  因而咱們換個思想,咱們所要作的實際上都是不斷的改變菜的狀態:

  1) 先是經過洗這個動做把菜變成乾淨的菜,()則獲得乾淨的菜;

  2) 而後乾淨的菜再經過切這個動做獲得切好的菜,注意,這裏乾淨的菜是切這個動做的對象,而(菜)則是獲得乾淨的菜,換句話說是切這個動做的對象是(),因此這裏的總體動做是(());

  3) 而後切好的菜經過炒這個動做作成熟的菜,從而到這裏的總體工做是((()));

  4) 最後吃的是炒好的菜,總體的動做是(((())))。

 

  因而代碼就是

    吃(((())))

 

  以上的代碼和過程式編程有很大差異,它突出的是把對象經過動做不斷的變換,而這裏的動詞其實就是函數。因此這種類型的編程叫函數式編程。

 

 

邏輯式編程

 

  邏輯式編程是從另一個思路去編程。它強調的是咱們事先知道一系列事實,而後經過這些事實自動推出合理的結果。

  代碼可能長這樣:

 

    洗乾淨的菜 <- (髒的菜)

    切好的菜 <- (洗乾淨的菜)

    炒好的菜 <- (切好的菜)

    吃菜 <- (炒好的菜)

     吃菜 <- 髒的菜

 

  以上就輸出吃菜的步驟,問號是咱們具體須要查詢的目的,而其餘的都是事先已經知道的事實,這些事實的排列順序無所謂。

  看看這個像不像人的行爲?人先學會一堆看起來彼此獨立的知識,而後用這些知識去本身解決遇到的問題,解決問題的過程其實是人腦在已知的知識中不斷搜索。

  因此這種編程範式用於早期的人工智能。 

 

 

面向對象編程

  

  面向對象編程並不是是一個孤立的編程範式,它通常和以上幾種編程範式綁定在一塊兒。咱們最多見的面向對象編程一般主要基於過程式編程。

  面向對象的思想是把處理抽象爲數據、方法,再把數據、方法打包抽象爲對象,在對象的基礎上提取共性抽象爲類,這些則爲封裝,再引入繼承、多態等性質來體現類與類之間的關係。

  炒菜總體圍繞着菜來,那麼咱們能夠將圍繞菜的一切當作一個對象,用面向對象描述,可能以下:

    

    .()

    .()

    .()

    .()

 

面向對象+函數式

  

  面向對象也會常常和函數式結合在一塊兒,明確了程序中的數據對象,而函數則是對象的方法,而對象方法的調用流體現了對象的轉換。

    

    .().().().()

 

  上述每一個方法的調用都會返回一個新的對象,從而又可使用方法。這種方始的編程目前很流行。

 

回到計算機

 

  計算機不少東西實際是來源於生活,可是大多時候,咱們在生活中的不少經驗是表達的不夠規範的。而計算機中咱們要學習的其實是把這些經驗形式化、規範化,引入更加抽象化的元素,好比數學,以便反覆應用乃至推廣。

  上面列舉的各類編程範式,思惟的重心彼此都有明顯差別,咱們學習不一樣的範式實際上也是爲了避免同角度的看待問題,以求思路更加寬廣。

相關文章
相關標籤/搜索