過程式程式設計
生活的經驗告訴我們以下的物理現實,事情是按照時間的順序乙個步驟接乙個步驟的發展。程式設計裡有乙個正規化就模擬了這樣的經驗,就是過程式程式設計。
如果現在有一些剛從超市買回來的菜,要吃進肚子,按照過程式程式設計,可以如下表示:
洗(菜)
切(菜)
炒(菜)
吃(菜)
以上的**中,括號外為動詞,括號內為名詞。熟悉過程式的我們都知道,這裡動詞對應於函式,名詞對應於函式的引數。
函式式程式設計
我們觀察上述的過程式程式設計對於炒菜這個問題描述,不難發現,這四步的名詞都是菜,但動詞卻不一樣。
於是我們換個思想,我們所要做的實際上都是不斷的改變菜的狀態:
1) 先是通過洗這個動作把菜變成乾淨的菜,洗(菜)則得到乾淨的菜;
2) 然後乾淨的菜再通過切這個動作得到切好的菜,注意,這裡乾淨的菜是切這個動作的物件,而洗(菜)則是得到乾淨的菜,換句話說是切這個動作的物件是洗(菜),所以這裡的整體動作是切(洗(菜));
3) 然後切好的菜通過炒這個動作做成熟的菜,從而到這裡的整體工作是炒(切(洗(菜)));
4) 最後吃的是炒好的菜,整體的動作是吃(炒(切(洗(菜))))。
於是**就是
吃(炒(切(洗(菜))))
以上的**和過程式程式設計有很大差別,它突出的是把物件通過動作不斷的變換,而這裡的動詞其實就是函式。所以這種型別的程式設計叫函式式程式設計。
邏輯式程式設計
邏輯式程式設計是從另外乙個思路去程式設計。它強調的是我們事先知道一系列事實,然後通過這些事實自動推出合理的結果。
**可能長這樣:
洗乾淨的菜<-洗(髒的菜)
切好的菜<-切(洗乾淨的菜)
炒好的菜<-炒(切好的菜)
吃菜<-吃(炒好的菜)
?吃菜<-髒的菜
以上就輸出吃菜的步驟,問號是我們具體需要查詢的目的,而其他的都是事先已經知道的事實,這些事實的排列順序無所謂。
看看這個像不像人的行為?人先學會一堆看起來彼此獨立的知識,然後用這些知識去自己解決遇到的問題,解決問題的過程實際上是人腦在已知的知識中不斷搜尋。
所以這種程式設計正規化用於早期的人工智慧。
物件導向程式設計
物件導向程式設計並非是乙個孤立的程式設計正規化,它一般和以上幾種程式設計正規化繫結在一起。我們最常見的物件導向程式設計通常主要基於過程式程式設計。
物件導向的思想是把處理抽象為資料、方法,再把資料、方法打包抽象為物件,在物件的基礎上提取共性抽象為類,這些則為封裝,再引入繼承、多型等性質來體現類與類之間的關係。
炒菜整體圍繞著菜來,那麼我們可以將圍繞菜的一切看成乙個物件,用物件導向描述,可能如下:
菜.洗()
菜.切()
菜.炒()
菜.吃()
回到計算機
計算機很多東西實際是**於生活,但是大多時候,我們在生活中的很多經驗是表達的不夠規範的。而計算機中我們要學習的實際上是把這些經驗形式化、規範化,引入更加抽象化的元素,比如數學,以便反覆應用乃至推廣。
上面列舉的各種程式設計正規化,思維的重心彼此都有明顯差異,我們學習不同的正規化實際上也是為了不同角度的看待問題,以求思路更加寬廣。
以豆瓣網為例,講解restful api設計規範
目前比較成熟的一套網際網路應用程式的api設計理論應該盡量將api部署在專用網域名稱之下 v2 user 1000001?apikey 應該將api的版本號放入url v2 user 1000001?apikey 在restful架構中,每個 代表一種資源 resource 所以 中不能有動詞,只能...
為各種主機環境程式設計
由於windows環境本身的特性,有很多因素隨使用者偏愛或配置而不同。下列因素會影響發 布到其他計算機的應用程式 螢幕解析度和顏色濃度。字型。windows版本。輔助應用程式。dll位置。一 螢幕解析度和顏色濃度 windows桌面的大小和計算機上可用的顏色數是可配置的並依賴於安裝的硬體。在開發程 ...
以類為單位的程式設計思想
如果你感覺現在的程式設計很混亂,那麼,請記住一句話 現在的程式設計,是以類為單位的。類可以理解為是一種資料型別,也可以理解為是乙個子程式。如果說結構體是一種資料型別的話,那類則是一種特殊的結構體,這個結構體裡,除了資料型別,還有 也就是函式。如果說int i 1 是開闢乙個儲存單元,把資料1放進去的...