編程范式(Programming paradigm)

在面向?qū)ο缶幊痰氖澜纾绦蚴且幌盗邢嗷プ饔茫ǚ椒ǎ┑膶ο螅–lass Instances)室琢,而在函數(shù)式編程的世界,程序會是一個無狀態(tài)的函數(shù)組合序列。

不同的編程語言也會提倡不同的“編程范型”庐冯。一些語言是專門為某個特定的范型設(shè)計(jì)的,如Smalltalk和Java支持面向?qū)ο缶幊炭泊6鳫askell和Scheme則支持函數(shù)式編程≌垢福現(xiàn)代編程語言的發(fā)展趨勢是支持多種范型,如 C#玲昧、Java 8+栖茉、Kotlin、 Scala孵延、ES6+ 等等吕漂。

1.命令式編程(Imperative programming)

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

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

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

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

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

(3)條件分支

容許僅當(dāng)某些條件成立時(shí)才運(yùn)行某個區(qū)塊遍坟。否則拳亿,這個區(qū)塊中的語句會略去,然后按區(qū)塊后的語句繼續(xù)運(yùn)行愿伴。

(4)無條件分支

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

循環(huán)鹅经、條件分支和無條件分支都是控制流程。

早期的命令式編程語言怎诫,例如匯編瘾晃,都是機(jī)器指令。雖然硬件的運(yùn)行更容易幻妓,卻阻礙了復(fù)雜程序的設(shè)計(jì)蹦误。

1954年開始開發(fā)的FORTRAN,是第一個編譯型的編程語言肉津,支持命名變量强胰、復(fù)雜表達(dá)式、副程序和其他一些功能妹沙。后來的二十年中偶洋,大量的其他高級命令式編程語言被發(fā)明出來。

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

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

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

在面向?qū)ο蟪绦蚓幊汤铮?jì)算機(jī)程序會被設(shè)計(jì)成彼此相關(guān)的對象唬渗。對象則指的是類的實(shí)例典阵。它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中镊逝,以提高軟件的重用性壮啊、靈活性和擴(kuò)展性,對象里的程序可以訪問及經(jīng)常修改對象相關(guān)連的數(shù)據(jù)撑蒜。

對象包含數(shù)據(jù)(字段歹啼、屬性)與方法玄渗。

面向?qū)ο蟪绦蛟O(shè)計(jì)可以看作一種在程序中包含各種獨(dú)立而又互相調(diào)用的對象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設(shè)計(jì)主張將程序看作一系列函數(shù)的集合狸眼,或者直接就是一系列對計(jì)算機(jī)下達(dá)的指令藤树。面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個對象都應(yīng)該能夠接受數(shù)據(jù)、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對象拓萌,因此它們都可以被看作一個小型的“機(jī)器”岁钓,即對象。目前已經(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ì)啊央、理解。反對者在某些領(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)方面的知識靠闭。許多流行的編程語言是面向?qū)ο蟮?它們的風(fēng)格就是會透由對象來創(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)

一種編程范式份氧,與命令式編程相對立。
它描述目標(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)行器(編譯器或解釋器)采用了一個固定的算法欺矫,以從這些關(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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掠廓,隨后出現(xiàn)的幾起案子藏斩,更是在濱河造成了極大的恐慌,老刑警劉巖却盘,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狰域,死亡現(xiàn)場離奇詭異媳拴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兆览,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門屈溉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抬探,你說我怎么就攤上這事子巾。” “怎么了小压?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵线梗,是天一觀的道長。 經(jīng)常有香客問我怠益,道長仪搔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任蜻牢,我火速辦了婚禮烤咧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抢呆。我一直安慰自己煮嫌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布抱虐。 她就那樣靜靜地躺著昌阿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恳邀。 梳的紋絲不亂的頭發(fā)上懦冰,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音轩娶,去河邊找鬼儿奶。 笑死框往,一個胖子當(dāng)著我的面吹牛鳄抒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播椰弊,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼许溅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秉版?” 一聲冷哼從身側(cè)響起贤重,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎清焕,沒想到半個月后并蝗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭犯,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年滚停,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沃粗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡键畴,死狀恐怖最盅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情起惕,我是刑警寧澤涡贱,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站惹想,受9級特大地震影響问词,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勺馆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一戏售、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧草穆,春花似錦灌灾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豌鸡,卻和暖如春嘿般,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涯冠。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工炉奴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛇更。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓瞻赶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親派任。 傳聞我的和親對象是個殘疾皇子砸逊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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

  • 美好的皮囊千篇一律动知,有趣的靈魂卻是萬里挑一。生于世上员辩,別讓你的眼睛蒙蔽了心靈拍柒,別讓你的皮囊辜負(fù)了美麗的靈魂∏担——馬...
    馬尾書生閱讀 266評論 0 0
  • 看三峽博物館拆讯,意外遭遇潘玉良。毫無邏輯的一段邂逅养叛,也算是漫步愛好者的福利种呐。想不到潘玉良竟然畫得這樣好,有點(diǎn)震驚弃甥。本...
    諸葛小喬閱讀 573評論 0 0
  • 我不知道 雨滴接觸大漠時(shí)是否茫然無助 我不知道 清風(fēng)路過山峰時(shí)是否留戀駐足 我不知道 飛蛾撲向火焰時(shí)是否此生不負(fù) ...
  • 老宅爽室,是我離家前廝守生活的地方,呱呱墜地時(shí)淆攻,不僅留下了我的第一聲啼哭阔墩,而且作為魂?duì)抗世锏哪殠Ъ澳赣H的胎盤,也...
    頤海聽濤閱讀 1,421評論 8 15
  • Bash編程007——函數(shù)(一) 使用函數(shù)可以對程序進(jìn)行更好滴組織瓶珊,將一些相對獨(dú)立的代碼變成函數(shù)啸箫,可以提高程序的可...
    若夢兒閱讀 179評論 0 6