<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冒號課堂§2.1:命令范式

     

    冒號課堂

    第二課 重要范式(1)

     

    課前導讀

    這一課討論了五個最重要的編程范式:命令式、函數式、邏輯式、對象式和并發式。這些只是入門性的介紹,讀者領會其精神即可,細節上不必過于在意。

    本課共分四節——

    1.命令范式

    2.聲明范式

    3.對象范式

    4.并發范式


    2.1
    命令范式——一切行動聽指揮

    人生最偉大的目標是行動                                           ——《洛克菲勒的忠告》

    關鍵詞:編程范式,命令式,結構化編程,流程圖

    摘要:命令式編程簡談

     
    提問 

    • 什么是命令式編程?它為什么是最常見的編程范式?
    • 什么是結構化編程?結構化編程的主要思想是什么?

    講解

     第二課伊始,冒號開門見山:“首先介紹一下最原始也是我們最熟悉的編程范式:命令式編程imperative programming)。用命令式編寫的程序由命令序列組成,即一系列祈使句:‘先做這,再做那’,強調‘怎么做’。更學術點說,命令式編程是電腦——準確地講,是馮·諾伊曼機(von Neumann machine)——運行機制的抽象,即依序從內存中獲取指令和數據然后去執行。從范式的角度看,其世界觀是:程序是由若干行動指令組成的有序列表;其方法論是:用變量來儲存數據,用語句來執行指令。

    逗號小聲嘟囔著:“我們用的編程語言不都是命令式的嗎?”

    “應該說絕大多數語言是命令式的,但非命令式的語言也是存在的。關于后者,我們稍后再議。” 冒號糾正道,“這也在情理之中。語言的演化是漸進的,大多數語言追根溯源是匯編語言的升級,而作為與機器語言一一對應的匯編語言自然是命令式的,因而這種范式最為傳統和普及。”

    不料問號竟窮追不舍:“為什么機器語言就一定得是命令式呢?”

    “我很欣賞你這種打破砂鍋問到底的精神,不過你可以問到底,我卻不敢保證能答到底哦。”冒號有些逗趣地說。

    問號略帶靦腆地笑了。

    “從理論上而言,完全可以有非命令式的機器語言存在,前提是計算機采用了特殊的硬件實現,比如非馮·諾伊曼結構的數據流機dataflow machine)和歸約機reduction machine)。但這類計算機并未流行于市,相應的機器語言自然罕見了[1]。”冒號還是給出了理由。

    引號問:“命令式編程與人們常說的過程式編程是一回事嗎?”

    嚴格說來,過程式編程procedural programming)是指引入了過程(procedure)、函數(function)或子程序(subroutine/subprogram)的命令式編程。但由于現代的命令式語言均具備此特征,故二者往往不加區分。”冒號回應道。

    句號認為:“由于常用的語言基本上都是命令式的,其思想也與計算機的運行機制相符,一切對我們來說,似乎都是自然而然的事。”

    “單純的命令式思想的確很樸素,毋庸贅述。” 冒號承認,“但有必要提一下結構化編程structured programming或簡稱SP),它是在過程式編程的基礎上發展起來的。其本質是一種編程原則,提倡代碼應具有清晰的邏輯結構,以保證程序易于讀寫、測試、維護和優化。Pascal正是遵循結構化編程原則而設計的一種教學語言。為直觀起見,我們用圖來表現程序的結構化特征——”

    “這是一個流程圖(flowchart),或稱程序框圖,它描述了一個簡單程序:用戶從標準輸入中鍵入算術表達式,程序打印出結果,如此循環往復,直到用戶輸入字符‘q’為止。”冒號解釋道,“若以純粹的結構化編程的標準來衡量,該流程圖并未達標。”

    嘆號有些驚訝:“這個圖不是再清晰不過了嗎?”

    “根據結構化定理(structured program theorem[2],任何程序都可用順序(concatenation)、選擇(selection)和循環(repetition)等三種基本控制結構來表示。”冒號畫了幾幅圖——

    冒號指點著黑板:“結構化編程就是在三種基本結構的基礎上進行嵌套組合。如果將每個基本結構看作基本電器元件,編程就是將這些元件組裝成復雜的電路。請注意,所有基本元件都滿足‘單入口、單出口’(single entry, single exit,簡稱SESE)的原則,這使得電路井井有條,不會串線纏繞。”

    引號已經看出:“上面的流程圖無法用基本結構來組合,所以不是標準的結構化程序。”

    冒號提出要求:“你能改造一下嗎?”

    引號走上講臺,在前圖的基礎上作了些許調整——

    “嗯,不錯。這下流程圖可以拆解為基本結構了。”冒號表示認可,“二者的區別在于前者利用了break語句,在循環途中退出,后者通過引入quit標志(flag)保證了循環的完整性。”

    逗號的臉上寫下一個大大的問號:“難道連break語句都不能用嗎?”

    break語句只是在循環體內部的跳轉,合理地使用它能簡化代碼,不致影響整體結構,大可不必拘泥于教條。但goto語句可以跳到程序過程中的任一點,造成靜態程序static program)與動態進程dynamic process)之間的差異,影響程序可讀性,是要竭力避免的[3]。”冒號如是說道,“結構化編程的思想包括兩方面。在微觀上,主張循規守矩,采用順序、選擇和循環三種邏輯結構,摒棄或限制goto語句[4],以避免雜亂無章的代碼。在宏觀上,主張分而治之(divide and conquer),采用‘自頂向下(top-down) [5] 的設計,通過模塊化將一個較為復雜的系統分解為若干相對簡單的子系統,每個子系統可以獨立地進一步分解,直到容易編碼實現為止。這兩方面是互為因果、互為保障的——由基本結構拼裝而成的系統一定是模塊清晰、層次分明的;反之,系統逐步分解到最后,一定會演化成基本結構。”

    嘆號產生一個想法:“能從程序的流程圖上看出結構化編程與非結構化編程之間的區別嗎?”

    “一個按結構化編程思想設計的流程圖,每個模塊大小適中、模塊之間關系簡明、模塊內部線路清晰,單從視覺上就會給人一種美感。相反,如果采用非結構化的設計,流程圖往往結構如雜草般松散紊亂、脈絡如迷宮般錯綜復雜、箭頭如線頭般剪不斷理還亂,情節嚴重的會導致讀者頭暈目眩乃至抓狂吐血。”冒號極盡夸張之能事。

    眾人掩口失聲。


     ,插語

    [1] 數據流機支持數據流式語言,歸約機支持函數式語言。

    [2] 見參考文獻【1

    [3] 1967年,E.W. Dijkstra 在其著名論文“Goto statement considered harmful”中指出goto語句的危害性,主張廢除這種用法。

    [4] 1974年,Donald Knuth在論文“Structured Programming with Goto Statements”中認為goto語句仍有其合理性,應該限制而不是完全摒棄。

    [5] 也稱“自頂向下、逐步求精”。


    總結

    ·         命令式編程通過一系列改變程序狀態的指令來完成計算,聲明式編程只描述程序應該完成的任務。命令式編程模擬電腦運算,是行動導向的,關鍵在于定義解法,即“怎么做”,因而算法是顯性而目標是隱性的;聲明式編程模擬人腦思維,是目標驅動的,關鍵在于描述問題,即“做什么”,因而目標是顯性而算法是隱性的。

    ·         結構化編程是過程式編程的一種原則,其主要思想是:提倡在宏觀上采用‘自頂向下’的設計,微觀上采用順序、選擇和循環的邏輯結構,摒棄或限制goto語句,以保證程序結構清晰、易于調試和維護。


    “”
    參考

    [1] Corrado B?hm,Giuseppe JacopiniFlow Diagrams, Turing Machines and Languages with Only Two Formation Rules Communications of the ACM1966,9(5)366–371.

    [2] Ravi SethiProgramming Languages: Concepts & Constructs(英文版第2).北京:機械工業出版社,200259-77

    posted on 2008-11-03 23:16 鄭暉 閱讀(2913) 評論(2)  編輯  收藏 所屬分類: 冒號課堂

    評論

    # re: 冒號課堂——第二課:重要范式(上) 2008-10-23 10:59 haijiang

    看起來很累,能不能換一個配色方案???謝謝。  回復  更多評論   

    # re: 冒號課堂——第二課:重要范式(上) 2008-10-23 18:17 鄭暉

    @haijiang
    你指的是前景色還是背景色?具體有何建議?  回復  更多評論   

    導航

    統計

    公告

    博客搬家:http://blog.zhenghui.org
    《冒號課堂》一書于2009年10月上市,詳情請見
    冒號課堂

    留言簿(17)

    隨筆分類(61)

    隨筆檔案(61)

    文章分類(1)

    文章檔案(1)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 中文字幕免费在线视频| 亚洲国产精品精华液| 亚洲a一级免费视频| 亚洲精品成人片在线观看精品字幕 | 亚洲成AV人在线观看天堂无码| 久久久久亚洲精品成人网小说| 国产精品福利在线观看免费不卡| 99精品视频在线免费观看 | 91热久久免费精品99| 国产日产成人免费视频在线观看| 亚洲精品无码不卡在线播HE| 和老外3p爽粗大免费视频| 日韩av无码成人无码免费| 亚洲日韩中文字幕在线播放| 亚洲kkk4444在线观看| a毛片久久免费观看| 99精品一区二区免费视频| 亚洲午夜视频在线观看| 免费大片黄在线观看| 免费H网站在线观看的| 亚洲AV人无码综合在线观看 | avtt天堂网手机版亚洲| 日本三级在线观看免费| 亚洲成年轻人电影网站www| 最近中文字幕高清免费中文字幕mv| 亚洲天堂福利视频| 国产精品99久久免费观看| 一级毛片直播亚洲| 亚洲精品国产精品| 免费大黄网站在线看| 豆国产96在线|亚洲| 大学生a级毛片免费观看| 亚洲国产品综合人成综合网站| 亚洲免费在线视频| 亚洲乱码一区二区三区在线观看 | 热99RE久久精品这里都是精品免费| 亚洲图片在线观看| 成年人性生活免费视频| 久久亚洲国产最新网站| 亚洲精品成人区在线观看| 一级中文字幕免费乱码专区|