多範式的程式語言有:1、物件導向編程,提升軟體的重用性、彈性與擴充性;2、函數式編程,以數學函數為程式語言建模的核心的程式範式;3、泛型編程,提供了更高層級的抽象。
本文操作環境:Windows7系統,Dell G3電腦。
多重範式的程式語言有:
概要:
本文主要講述了三種程式設計範式-物件導向程式設計、函數式程式設計、泛型程式設計的概念
程式設計範式
程式設計範式是程式語言背後的想法。代表了程式設計者認為程式應該如何被建構和執行的看法。常見的程式設計範式有:過程式,面向對象,函數式,泛型程式設計等。
有些程式語言是專門為某種特定範式設計的,例如C語言是過程式設計語言;Smalltalk和Java是較純粹的物件導向程式語言;Haskell是純粹的函數式程式語言。另外一些程式語言和程式設計範式的關係並不一一對應,例如Python,Scala,Groovy都支援物件導向和某種程度上的函數式程式設計。 C 是多範式程式語言成功的典範。 C 支援和C語言一樣的過程式程式設計範式,同時也支援物件導向程式設計範式,STL(Standard Template Library)讓C 具有了泛型程式設計能力。支持多種範式可能是C 直到現在仍然具有強大的生命力的原因之一。
Swift是一門典型的多範式程式語言,即支援物件導向程式設計範式,也支援函數式程式設計範式,同時也支援泛型程式設計。 Swift支援多種程式設計範式是由其創造目標決定的。 Swift創造的初衷就是提供一門實用的工業語言。不同於Haskell這類出自大學和研究機構的學術性質的程式語言。蘋果推出Swift時就帶著明確的商業目的:Mac OS和iOS系統的主要程式語言Objective-C已顯老態,Swift將使得蘋果系統的開發者擁有一門更現代的程式語言,從而促進蘋果整個生態圈的良性發展。
Swift的設計和開發無不體現著「實用的工業語言」這個目標。這決定了Swift無法做極端的語言實驗,它需要在理智地面對現實的基礎上,謹慎地尋求突破。這決定了Swift需要繼承歷史遺產,照顧現在大多數程式設計師的現實需求,同時面向未來有所發展。
1、物件導向-繼承遺產
物件導向程式設計將物件作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴展性。
物件導向程式設計的核心概念:
多態,指由繼承而產生的相關的不同的類,其物件對同一訊息會做出不同的回應;
繼承,在某種情況下,一個類別會有「子類別」。子類比原本的類別(稱為父類別)要更加具體化;
封裝,物件導向程式設計隱藏了某一方法的具體執行步驟,取而代之的是透過訊息傳遞機制傳送訊息給它。
以物件建構程式的基本單元的物件導向程式語言中。多態提供了更高的抽象能力,使得我們可以設計出更通用的程式。繼承提供了一種複用程式碼的方法。封裝提供一種使用其他程式碼更為便捷安全的機制。
現在絕大部分程式設計師的工作語言仍然是物件導向程式語言。大部分流行的現代程式語言都會允許你創建物件。使用物件導向程式語言,易於建立軟體模型。因為,物件很類似乎很容易和現實世界上的所有事物和概念。但程式設計實踐表明,並不是任何東西成為物件都是一件好事情。舉一個Java中的蹩腳的例子:Java中只有物件才能作為參數傳入函數(當然還有原始型別primitive type)。所以為了將函數傳遞給另外一個函數,你需要將函數包裹在一個物件中,通常會用一個匿名類,因為這個類別不會有其他作用,只是為了讓Java的一切皆為物件的設計高興。
Java擁有純粹的物件導向概念。它從設計之初,就希望以一切皆為物件的純物件模型來為世界建模。但發展到現在,Java中加入了越來越多非物件的東西。引入了閉包,從而獲得了函數式程式設計中的一級函數;引入泛型,從而獲得了參數化的類型。這可能暗示了,這個世界是如此得豐富多彩,使用單一模式為世界建模並不會成功。
2、函數式程式設計-發展
函數式程式設計是一種以數學函數為程式語言建模的核心的程式設計範式。它將計算機運算視為數學函數計算,並且避免使用程式狀態以及可變物件。
函數式程式設計思想主要有兩點:
以函數為程式語言建模的核心;
避免狀態和可變性。
函數是函數式程式設計的基石。函數式程式語言的程式碼就是由一個個函數的組合而成的。寫函數式語言的過程就是設計函數。大規模程式由成千上萬的函數組成,為了有效的組合這些函數。函數式程式語言,會盡量避免狀態,避免可變物件。沒有可變的狀態,就使得函數式語言中的函數變成純函數。純函數更容易模組化,更容易理解,對於復用是友善的。
函數式程式語言也產生了一些有用的程式設計工具:
一級函數,閉包;
#########################################################################################柯里化函數;############惰性求值。 ############這些在後面的章節都會提到。這些程式設計工具也越來越多地出現在其他程式語言中。 ######函數式程式語言並不年輕,它的歷史和物件導向程式設計一樣悠久。 1958年被創造出來的LISP是最古老的函數式程式語言。它比C語言年代更為久遠。但直到最近函數式程式設計思想才逐漸被重視。幾乎所有新發明的程式語言都或多或少受到了函數式程式設計思想的影響。 Python,Scala,Groovy,Swift都有一級函數,閉包。使得你可以將函數直接傳給另一個函數,函數也能夠以返回值形式被另一個函數傳回。消除狀態,提供不變性的好處越來越多被接受,Scala,Groovy,Swift都提供了方便地聲明不可變對象的方法,以支持你編寫更趨近於函數式的風格的程式碼。 ######函數程式語言有其優秀的地方,也許將來會成為一個重要的程式設計範式。但是,函數式程式語言的重要性可能更多會體現在影響其他程式語言的發展上。未來,可能很難出現一門主要以函數式程式設計範式設計的程式語言成為主流的程式語言。如同Java這樣的以單一程式設計範式(物件導向)構建,而成為主流的程式語言的機會應該不多了。而如同Haskell這樣追求純粹的函數式程式語言,更多的可能只是一個偏學術的語言實驗。 ######再重複一次上一節的提到理由,這個世界是如此得豐富多彩,使用單一模式為世界建模並不會成功。 #########物件導向與函數式程式設計#########如果,我們以語言範式為現在流行的語言分類。支援物件導向的程式語言應該會是最長的隊伍。現在大部分流行的現代程式語言都是面相物件的,它們都會允許你創建物件。但同時,你會發現比較流行的幾個程式語言,Python,Scala,甚至Java都或多或少得受到了函數式程式語言的影響。它們都引入一些函數式程式設計的概念,讓你一定程度上可以寫出具有函數式風格的程式碼。 ######在熟悉了類別物件導向程式語言之後,再接觸函數式程式語言,常常會覺得耳目一新,甚至會隱約覺得函數式語言是救世良方。那我們是否應該就此徹底轉向函數式程式語言呢?使用Haskell拯救世界。 ######物件導向程式語言在大規模實踐之後,我們確實更深刻地了解了它們的缺點(例如,難以編寫多執行緒環境下的軟體應用;繼承並不是程式碼復用的好方法)。函數式語言也確實有不少優點,有些優點恰恰就能解決物件導向語言的問題(純函數十分適應多執行緒環境,純函數天生就是模組化的,對於程式碼重複使用十分友善)。但是,函數式程式設計也許也存在某些問題。而這些問題,可能在更大規模的業界實踐之後才會被揭露出來。現在我們已經可以確信,單純以物件為世界建模是有困難的。那麼以數學模型為世界建模可能也不會好到哪裡去。可以確信的是,它們都有自己擅長的領域和環境。我們現在仍然還無法使用某種程式設計範式來解決所有問題。 ######而更大的現實是無數企業已經在物件導向程式語言上做了巨大的投資,即使現在物件導向程式設計已經暴露出一些問題,而函數式程式設計又呈現出不少能解決這些問題的優點,任何一個謹慎的人都不會,也不可能馬上拋棄物件導向編程,徹底全面地轉向函數式程式語言。 ######現實的選擇是支援物件導向程式設計的同時,提供函數式的支援。這樣,在大部分物件導向游刃有餘的地方,你仍然可以使用物件導向的方法。而在適合函數式程式設計的地方,而當你又擁有函數式程式設計的思維和能力時,你還是可以函數式的程式設計方法來改善生產力。 #########3、泛型程式設計-美好的點綴#######
泛型程式設計是另一個有趣的話題。泛型為程語言提供了更高層級的抽象,即參數化類型。換句話說,就是把一個原本特定於某個類型的演算法或類別當中的型別資訊抽象化出來。這個抽像出來的概念在C 的STL(Standard Template Library)中就是模版(Template)。 STL展示了泛型程式設計的強大之處,一出現就成為了C 的強大武器。除C 之外,C#,Java,Haskell等程式語言都引入了泛型概念。
泛型程式設計是一個稍微局部一些的概念,它只涉及如何更抽像地處理類型,即參數化類型。這並不足以支撐起一門語言的核心概念。我們不會聽到一個程式語言是純泛型程式設計的,而沒有其他程式設計範式。但正因為泛型並不會改變程式語言的核心,所以在大多數時候,它可以很好的融入其他的程式設計方式。 C ,Scala,Haskell這些風格迥異的程式語言都支援泛型。泛型程式設計提供了更高的抽象層次,這意味著更強的表達能力。這對大部分程式語言來說都是一道美味佐餐美酒。
在Swift中,泛型被廣泛使用,許多Swift標準函式庫是透過泛型程式碼建構出來的。例如Swift的陣列和字典類型都是泛型集合。這樣的例子在Swift中隨處可見。
總結
這幾篇系列文章中,將主要以Swift為例,講解多範式程式語言。系列文章分為三部分討論Swift所支援三種程式設計範式:
物件導向程式設計範式
函數式程式設計範式
泛型程式設計
更多相關知識,請造訪常見問題欄位!
以上是多範式的程式語言有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!