<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?hmGiuseppe JacopiniFlow Diagrams, Turing Machines and Languages with Only Two Formation Rules Communications of the ACM19669(5)366–371.

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

    posted on 2008-11-03 23:16 鄭暉 閱讀(2907) 評論(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)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线精品一卡乱码免费| 久久一本岛在免费线观看2020| 91九色视频无限观看免费| 狠狠色伊人亚洲综合成人| 国产福利免费视频 | 日韩在线一区二区三区免费视频| 免费无码又黄又爽又刺激| 亚洲人成综合网站7777香蕉| 67194成是人免费无码| 亚洲色偷偷色噜噜狠狠99| 成在线人永久免费视频播放| 亚洲AV无码XXX麻豆艾秋| 免费观看日本污污ww网站一区| 一级毛片成人免费看a| 亚洲自偷自偷在线制服| 免费无码又爽又刺激高潮软件 | 亚洲精品麻豆av| 十八禁在线观看视频播放免费| 久久精品国产精品亚洲蜜月| 免费观看激色视频网站bd| 亚洲日韩国产一区二区三区在线 | 久久久精品免费国产四虎| 久久亚洲美女精品国产精品 | 91手机看片国产永久免费| 亚洲日韩久久综合中文字幕| 国产一级高清视频免费看| 成人国产精品免费视频| 亚洲精品在线电影| 四虎影视永久免费观看网址 | 中文字幕在线免费看| 亚洲色图黄色小说| 国产精品成人四虎免费视频| sihu国产精品永久免费| 久久久久亚洲av无码专区导航| 最近中文字幕无吗高清免费视频| 免费一级特黄特色大片| 久久亚洲AV成人无码软件| 国产人成免费视频| 99爱免费观看视频在线| 国产精品亚洲一区二区三区| 亚洲中文字幕无码一区二区三区 |