程式設計正規化(Programmingparadigm)

程式設計師詩人發表於2018-08-31

程式設計正規化

Programming paradigm

範,模範、典範也。正規化即模式、方法。常見的程式設計正規化有:函數語言程式設計、程式程式設計、物件導向程式設計、指令式程式設計等。

在物件導向程式設計的世界,程式是一系列相互作用(方法)的物件(Class Instances),而在函數語言程式設計的世界,程式會是一個無狀態的函式組合序列。

不同的程式語言也會提倡不同的“程式設計範型”。一些語言是專門為某個特定的範型設計的,如Smalltalk和Java支援物件導向程式設計。而Haskell和Scheme則支援函數語言程式設計。現代程式語言的發展趨勢是支援多種範型,如 C#、Java 8+、Kotlin、 Scala、ES6+ 等等。

1.指令式程式設計(Imperative programming)

計算機的硬體負責執行使用命令式的風格來寫的機器碼。計算機硬體的工作方式基本上都是命令式的。大部分的程式語言都是基於命令式的。高階語言通常都支援四種基本的語句:

(1)運算語句

一般來說都表現了在儲存器內的資料進行運算的行為,然後將結果存入儲存器中以便日後使用。高階指令式程式設計語言更能處理複雜的表示式,產生四則運算和函式計算的結合。

(2)迴圈語句

容許一些語句反覆執行數次。迴圈可依據一個預設的數目來決定執行這些語句的次數;或反覆執行它們,直至某些條件改變。

(3)條件分支

容許僅當某些條件成立時才執行某個區塊。否則,這個區塊中的語句會略去,然後按區塊後的語句繼續執行。

(4)無條件分支

容許執行順序轉移到程式的其他部分之中。包括跳躍(在很多語言中稱為Goto)、副程式和Procedure等。

迴圈、條件分支和無條件分支都是控制流程。

早期的指令式程式設計語言,例如彙編,都是機器指令。雖然硬體的執行更容易,卻阻礙了複雜程式的設計。

1954年開始開發的FORTRAN,是第一個編譯型的程式語言,支援命名變數、複雜表示式、副程式和其他一些功能。後來的二十年中,大量的其他高階指令式程式設計語言被發明出來。

在1980年後,物件導向程式設計有迅速的發展;物件導向程式語言均有著命令式的風格,但引入了類和物件的核心概念,從此程式設計進入了 OOP 時代。

2.物件導向程式設計(Object-oriented programming,OOP)

怎樣為一個模糊不清的問題找到一個最恰當的描述(問題描述)? 抽象(Abstraction)通常是我們用來簡化複雜的現實問題的方法。

在物件導向程式程式設計裡,計算機程式會被設計成彼此相關的物件。物件則指的是類的例項。它將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充套件性,物件裡的程式可以訪問及經常修改物件相關連的資料。

物件包含資料(欄位、屬性)與方法。

物件導向程式設計可以看作一種在程式中包含各種獨立而又互相呼叫的物件的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對計算機下達的指令。物件導向程式設計中的每一個物件都應該能夠接受資料、處理資料並將資料傳達給其它物件,因此它們都可以被看作一個小型的“機器”,即物件。目前已經被證實的是,物件導向程式設計推廣了程式的靈活性和可維護性,並且在大型專案設計中廣為應用。此外,支持者聲稱物件導向程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。

當我們提到物件導向的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。在這一方面,我們必須瞭解更多關於物件導向系統分析和麵向物件設計(Object Oriented Design,簡稱OOD)方面的知識。許多流行的程式語言是物件導向的,它們的風格就是會透由物件來創出例項。

重要的物件導向程式語言包含Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby 與 PHP等。

物件導向程式設計中,通常利用繼承父類,以實現程式碼重用和可擴充套件性。

3.宣告式程式設計(Declarative programming)

一種程式設計正規化,與指令式程式設計相對立。
它描述目標的性質,讓計算機明白目標,而非具體過程。
宣告式程式設計不用告訴計算機問題領域,從而避免隨之而來的副作用。
而指令式程式設計則需要用演算法來明確的指出每一步該怎麼做。

宣告式程式設計通常被看做是形式邏輯的理論,把計算看做推導。
宣告式程式設計因大幅簡化了平行計算的編寫難度,自2009起備受關注。

常見的宣告式程式語言有:

資料庫查詢語言(SQL,XQuery)
正規表示式
邏輯程式設計
函數語言程式設計
組態管理系統等。

宣告式程式設計透過函式、推論規則或項重寫(term-rewriting)規則,來描述變數之間的關係。它的語言執行器(編譯器或直譯器)採用了一個固定的演算法,以從這些關係產生結果。

很多文字標記語言例如HTML、MXML、XAML和XSLT往往是宣告式的。函數語言程式設計,特別是純函數語言程式設計,嘗試最小化狀態帶來的副作用,因此被認為是宣告式的。不過,大多數函數語言程式設計語言,例如Scheme、Clojure、Haskell、OCaml、Standard ML和Unlambda,允許副作用的存在。


相關文章