<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)

    最新隨筆

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码专区国产乱码电影| a级毛片毛片免费观看永久| 亚洲资源在线视频| 久久亚洲欧洲国产综合| 噜噜嘿在线视频免费观看| 2015日韩永久免费视频播放| 久久国产一片免费观看| 国产亚洲日韩在线a不卡| 亚洲熟妇无码八V在线播放| 亚洲精品中文字幕无乱码| 亚洲Av永久无码精品三区在线| 亚洲国产一成久久精品国产成人综合| 午夜成人免费视频| 无码永久免费AV网站| 亚洲一区二区三区免费观看| 无码中文字幕av免费放dvd| 中文字幕在线视频免费观看| 一级女人18片毛片免费视频| 色www免费视频| 美女被爆羞羞网站免费| 国产精品成人亚洲| 亚洲av成人无码网站…| 亚洲乱妇熟女爽到高潮的片| 亚洲AV成人影视在线观看 | v片免费在线观看| 黄色一级毛片免费看| 日本亚洲中午字幕乱码| 国产精品久久久久久亚洲小说| 亚洲精品久久无码| 亚洲AV无码XXX麻豆艾秋| 亚洲hairy多毛pics大全| 亚洲AV第一成肉网| 香港一级毛片免费看| 日亚毛片免费乱码不卡一区| 九九免费久久这里有精品23| www成人免费视频| 美女视频黄a视频全免费网站色窝| 免费国产成人α片| 99re在线免费视频| 可以免费看黄的网站| 天天摸夜夜摸成人免费视频|