這篇文章給大家分享的是有關多范式的編程語言是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
多范式的編程語言有:1、面向對象編程,提高軟件的重用性、靈活性和擴展性;2、函數式編程,以數學函數為編程語言建模的核心的編程范式;3、泛型編程,提供了更高層級的抽象。
多范式的編程語言有:
概要:
本文主要講述了三種編程范式——面向對象編程、函數式編程、泛型編程的概念
編程范式
編程范式是程序語言背后的思想。代表了程序設計者認為程序應該如何被構建和執行的看法。常見的編程范式有:過程式,面向對象,函數式,泛型編程等。
一些編程語言是專門為某種特定范式設計的,例如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這樣追求純粹的函數式編程語言,更多的可能只是一個偏學術的語言實驗。
再重復一次上一節的提到理由,這個世界是如此得豐富多彩,使用單一模式為世界建模并不會成功。
面向對象與函數式編程
如果,我們按語言范式給現在流行的語言分類。支持面向對象的編程語言應該會是最長的隊伍?,F在大部分流行的現代編程語言都是面相對象的,它們都會允許你創建對象。但同時,你會發現比較流行的幾個編程語言,Python,Scala,甚至Java都或多或少得受到了函數式編程語言的影響。它們都引入一些函數式編程的概念,讓你一定程度上可以編寫出具有函數式風格的代碼。
在熟悉了類面向對象編程語言之后,再接觸函數式編程語言,常常會覺得耳目一新,甚至會隱約覺得函數式語言是救世良方。那我們是否應該就此徹底轉向函數式編程語言呢?使用Haskell拯救世界。
面向對象編程語言在大規模實踐之后,我們確實更深刻地了解了它們的缺點(例如,難以編寫多線程環境下的軟件應用;繼承并不是代碼復用的好方法)。函數式語言也確實有不少優點,有些優點恰恰就能解決面向對象語言的問題(純函數十分適應多線程環境,純函數天生就是模塊化的,對于代碼復用十分友好)。但是,函數式編程也許也存在某些問題。而這些問題,可能在更大規模的業界實踐之后才會暴露出來?,F在我們已經可以確信,單純以對象為世界建模是有困難的。那么以數學模型來為世界建??赡芤膊⒉粫玫侥睦锶???梢源_信的是,它們都有自己擅長的領域和環境。我們現在仍然還無法使用某種編程范式來解決所有問題。
而更大的現實是無數企業已經在面向對象編程語言上做了巨大的投資,即使現在面向對象編程已經暴露出一些問題,而函數式編程又呈現出不少能解決這些問題的優點,任何一個謹慎的人都不會,也不可能馬上拋棄面向對象編程,徹底全面地轉向函數式編程語言。
現實的選擇是支持面向對象編程的同時,提供函數式的支持。這樣,在大部分面向對象游刃有余的地方,你仍然可以使用面向對象的方法。而在適合函數式編程的地方,而你又擁有函數式編程的思維和能力時,你還是可以函數式的編程方法改善生產力。
3、泛型編程-美好的點綴
泛型編程是另外一個有趣的話題。泛型為程語言提供了更高層級的抽象,即參數化類型。換句話說,就是把一個原本特定于某個類型的算法或類當中的類型信息抽象出來。這個抽象出來的概念在C++的STL(Standard Template Library)中就是模版(Template)。STL展示了泛型編程的強大之處,一出現就成為了C++的強大武器。除C++之外,C#,Java,Haskell等編程語言都引入了泛型概念。
泛型編程是一個稍微局部一些的概念,它僅僅涉及如何更抽象地處理類型,即參數化類型。這并不足以支撐起一門語言的核心概念。我們不會聽到一個編程語言是純泛型編程的,而沒有其他編程范式。但正因為泛型并不會改變程序語言的核心,所以在大多數時候,它可以很好的融入到其他的編程方式中。C++,Scala,Haskell這些風格迥異的編程語言都支持泛型。泛型編程提供了更高的抽象層次,這意味著更強的表達能力。這對大部分編程語言來說都是一道美味佐餐美酒。
在Swift中,泛型得到廣泛使用,許多Swift標準庫是通過泛型代碼構建出來的。例如Swift的數組和字典類型都是泛型集。這樣的例子在Swift中隨處可見。
總結
這幾篇系列文章中,將主要以Swift為例,講解多范式編程語言。系列文章分為三部分討論Swift所支持三種編程范式:
面向對象編程范式
函數式編程范式
泛型編程
感謝各位的閱讀!關于“多范式的編程語言是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。