編程范式 (Programming paradigm)

編程范式

Programming paradigm

范参咙,模范龄广、典范也。范式即模式蕴侧、方法择同。常見的編程范式有:函數(shù)式編程、程序編程净宵、面向?qū)ο缶幊糖貌拧⒅噶钍骄幊痰取?/p>

在面向?qū)ο缶幊痰氖澜纾绦蚴且幌盗邢嗷プ饔茫ǚ椒ǎ┑膶?duì)象(Class Instances)塘娶,而在函數(shù)式編程的世界归斤,程序會(huì)是一個(gè)無狀態(tài)的函數(shù)組合序列。

不同的編程語言也會(huì)提倡不同的“編程范型”刁岸。一些語言是專門為某個(gè)特定的范型設(shè)計(jì)的脏里,如Smalltalk和Java支持面向?qū)ο缶幊獭6鳫askell和Scheme則支持函數(shù)式編程『缡铮現(xiàn)代編程語言的發(fā)展趨勢(shì)是支持多種范型迫横,如 C#、Java 8+酝碳、Kotlin矾踱、 Scala、ES6+ 等等疏哗。

1.命令式編程(Imperative programming)

計(jì)算機(jī)的硬件負(fù)責(zé)運(yùn)行使用命令式的風(fēng)格來寫的機(jī)器碼呛讲。計(jì)算機(jī)硬件的工作方式基本上都是命令式的。大部分的編程語言都是基于命令式的返奉。高級(jí)語言通常都支持四種基本的語句:

(1)運(yùn)算語句

一般來說都表現(xiàn)了在存儲(chǔ)器內(nèi)的數(shù)據(jù)進(jìn)行運(yùn)算的行為贝搁,然后將結(jié)果存入存儲(chǔ)器中以便日后使用。高階命令式編程語言更能處理復(fù)雜的表達(dá)式芽偏,產(chǎn)生四則運(yùn)算和函數(shù)計(jì)算的結(jié)合雷逆。

(2)循環(huán)語句

容許一些語句反復(fù)運(yùn)行數(shù)次。循環(huán)可依據(jù)一個(gè)默認(rèn)的數(shù)目來決定運(yùn)行這些語句的次數(shù)污尉;或反復(fù)運(yùn)行它們膀哲,直至某些條件改變。

(3)條件分支

容許僅當(dāng)某些條件成立時(shí)才運(yùn)行某個(gè)區(qū)塊被碗。否則某宪,這個(gè)區(qū)塊中的語句會(huì)略去,然后按區(qū)塊后的語句繼續(xù)運(yùn)行锐朴。

(4)無條件分支

容許運(yùn)行順序轉(zhuǎn)移到程序的其他部分之中兴喂。包括跳躍(在很多語言中稱為Goto)、副程序和Procedure等。

循環(huán)瞻想、條件分支和無條件分支都是控制流程压真。

早期的命令式編程語言,例如匯編蘑险,都是機(jī)器指令滴肿。雖然硬件的運(yùn)行更容易,卻阻礙了復(fù)雜程序的設(shè)計(jì)佃迄。

1954年開始開發(fā)的FORTRAN泼差,是第一個(gè)編譯型的編程語言,支持命名變量呵俏、復(fù)雜表達(dá)式堆缘、副程序和其他一些功能。后來的二十年中普碎,大量的其他高級(jí)命令式編程語言被發(fā)明出來吼肥。

在1980年后,面向?qū)ο缶幊逃醒杆俚陌l(fā)展麻车;面向?qū)ο缶幊陶Z言均有著命令式的風(fēng)格缀皱,但引入了類和對(duì)象的核心概念,從此編程進(jìn)入了 OOP 時(shí)代动猬。

2.面向?qū)ο缶幊蹋∣bject-oriented programming啤斗,OOP)

怎樣為一個(gè)模糊不清的問題找到一個(gè)最恰當(dāng)?shù)拿枋觯▎栴}描述)? 抽象(Abstraction)通常是我們用來簡化復(fù)雜的現(xiàn)實(shí)問題的方法赁咙。

在面向?qū)ο蟪绦蚓幊汤锱チ?jì)算機(jī)程序會(huì)被設(shè)計(jì)成彼此相關(guān)的對(duì)象。對(duì)象則指的是類的實(shí)例彼水。它將對(duì)象作為程序的基本單元崔拥,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性猿涨、靈活性和擴(kuò)展性握童,對(duì)象里的程序可以訪問及經(jīng)常修改對(duì)象相關(guān)連的數(shù)據(jù)姆怪。

對(duì)象包含數(shù)據(jù)(字段叛赚、屬性)與方法。

面向?qū)ο蟪绦蛟O(shè)計(jì)可以看作一種在程序中包含各種獨(dú)立而又互相調(diào)用的對(duì)象的思想稽揭,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設(shè)計(jì)主張將程序看作一系列函數(shù)的集合俺附,或者直接就是一系列對(duì)計(jì)算機(jī)下達(dá)的指令。面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個(gè)對(duì)象都應(yīng)該能夠接受數(shù)據(jù)溪掀、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對(duì)象事镣,因此它們都可以被看作一個(gè)小型的“機(jī)器”,即對(duì)象揪胃。目前已經(jīng)被證實(shí)的是璃哟,面向?qū)ο蟪绦蛟O(shè)計(jì)推廣了程序的靈活性和可維護(hù)性氛琢,并且在大型項(xiàng)目設(shè)計(jì)中廣為應(yīng)用。此外随闪,支持者聲稱面向?qū)ο蟪绦蛟O(shè)計(jì)要比以往的做法更加便于學(xué)習(xí)阳似,因?yàn)樗軌蜃屓藗兏唵蔚卦O(shè)計(jì)并維護(hù)程序,使得程序更加便于分析铐伴、設(shè)計(jì)撮奏、理解。反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)当宴。

當(dāng)我們提到面向?qū)ο蟮臅r(shí)候畜吊,它不僅指一種程序設(shè)計(jì)方法。它更多意義上是一種程序開發(fā)方式户矢。在這一方面玲献,我們必須了解更多關(guān)于面向?qū)ο笙到y(tǒng)分析和面向?qū)ο笤O(shè)計(jì)(Object Oriented Design,簡稱OOD)方面的知識(shí)梯浪。許多流行的編程語言是面向?qū)ο蟮?它們的風(fēng)格就是會(huì)透由對(duì)象來創(chuàng)出實(shí)例青自。

重要的面向?qū)ο缶幊陶Z言包含Common Lisp、Python驱证、C++延窜、Objective-C、Smalltalk抹锄、Delphi逆瑞、Java、Swift伙单、C#获高、Perl、Ruby 與 PHP等吻育。

面向?qū)ο缶幊讨心钛恚ǔ@美^承父類,以實(shí)現(xiàn)代碼重用和可擴(kuò)展性布疼。

3.聲明式編程(Declarative programming)

一種編程范式摊趾,與命令式編程相對(duì)立。
它描述目標(biāo)的性質(zhì)游两,讓計(jì)算機(jī)明白目標(biāo)砾层,而非具體過程。
聲明式編程不用告訴計(jì)算機(jī)問題領(lǐng)域贱案,從而避免隨之而來的副作用肛炮。
而命令式編程則需要用算法來明確的指出每一步該怎么做。

聲明式編程通常被看做是形式邏輯的理論,把計(jì)算看做推導(dǎo)侨糟。
聲明式編程因大幅簡化了并行計(jì)算的編寫難度碍扔,自2009起備受關(guān)注。

常見的聲明式編程語言有:

數(shù)據(jù)庫查詢語言(SQL秕重,XQuery)
正則表達(dá)式
邏輯編程
函數(shù)式編程
組態(tài)管理系統(tǒng)等蕴忆。

聲明式編程透過函數(shù)、推論規(guī)則或項(xiàng)重寫(term-rewriting)規(guī)則悲幅,來描述變量之間的關(guān)系套鹅。它的語言運(yùn)行器(編譯器或解釋器)采用了一個(gè)固定的算法,以從這些關(guān)系產(chǎn)生結(jié)果汰具。

很多文本標(biāo)記語言例如HTML卓鹿、MXML、XAML和XSLT往往是聲明式的留荔。函數(shù)式編程吟孙,特別是純函數(shù)式編程,嘗試最小化狀態(tài)帶來的副作用聚蝶,因此被認(rèn)為是聲明式的杰妓。不過,大多數(shù)函數(shù)式編程語言碘勉,例如Scheme巷挥、Clojure、Haskell验靡、OCaml倍宾、Standard ML和Unlambda,允許副作用的存在胜嗓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末高职,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辞州,更是在濱河造成了極大的恐慌怔锌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件变过,死亡現(xiàn)場(chǎng)離奇詭異埃元,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牵啦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門亚情,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妄痪,“玉大人哈雏,你說我怎么就攤上這事。” “怎么了裳瘪?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵土浸,是天一觀的道長。 經(jīng)常有香客問我彭羹,道長黄伊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任派殷,我火速辦了婚禮还最,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毡惜。我一直安慰自己拓轻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布经伙。 她就那樣靜靜地躺著扶叉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帕膜。 梳的紋絲不亂的頭發(fā)上枣氧,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音垮刹,去河邊找鬼达吞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荒典,可吹牛的內(nèi)容都是我干的宗挥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼种蝶,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼契耿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起螃征,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤搪桂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盯滚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踢械,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年魄藕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了内列。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡背率,死狀恐怖话瞧,靈堂內(nèi)的尸體忽然破棺而出嫩与,到底是詐尸還是另有隱情,我是刑警寧澤交排,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布划滋,位于F島的核電站,受9級(jí)特大地震影響埃篓,放射性物質(zhì)發(fā)生泄漏处坪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一架专、第九天 我趴在偏房一處隱蔽的房頂上張望同窘。 院中可真熱鬧,春花似錦部脚、人聲如沸塞椎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽案狠。三九已至,卻和暖如春钱雷,著一層夾襖步出監(jiān)牢的瞬間骂铁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工罩抗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拉庵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓套蒂,卻偏偏與公主長得像钞支,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子操刀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift的編程范式 編程范式是程序語言背后的思想烁挟。代表了程序語言的設(shè)計(jì)者認(rèn)為程序應(yīng)該如何被構(gòu)建和執(zhí)行。常見的編程...
    Bobby0322閱讀 2,585評(píng)論 4 43
  • 演唱會(huì)之后遺落滿地?zé)晒獍簦∨⒛瑢⑵鋼炱鸬男侣勔鹆舜蠹业臒嶙h欢唾。大家紛紛說那些成年人被這個(gè)只有六七歲的小女孩狠...
    莫琪葩閱讀 1,015評(píng)論 0 0
  • 操作環(huán)境為 Mac os且警,如果你是 Windows 請(qǐng)出門左轉(zhuǎn)。 一礁遣、檢查 SSH key 是否存在 在終端輸入:...
    bincn閱讀 8,535評(píng)論 1 16
  • 從今天開始斑芜,要認(rèn)認(rèn)真真地讀曾國藩。 讀書做事二十余年祟霍,總覺得不得要領(lǐng)杏头,幾度彷徨盈包,不知所從。也曾讀《論語》數(shù)遍大州,希望...
    讀小字閱讀 1,009評(píng)論 4 10
  • 晚上好 我感覺剛剛好像聽到幾聲雷聲 所以我覺得今晚可能睡不著了续语。 其實(shí)我兩點(diǎn)左右好像聽到鈴聲了…真的 然后又睡了 ...
    新建備忘錄閱讀 150評(píng)論 1 1