程序設(shè)計(jì)語言與編碼_第1頁
程序設(shè)計(jì)語言與編碼_第2頁
程序設(shè)計(jì)語言與編碼_第3頁
程序設(shè)計(jì)語言與編碼_第4頁
程序設(shè)計(jì)語言與編碼_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第六章 程序設(shè)計(jì)語言與編碼首都師范大學(xué) 教育技術(shù)系方海光做為軟件工程過程的一個(gè)階段,程序編碼是設(shè)計(jì)的繼續(xù)。程序設(shè)計(jì)語言的特性和程序設(shè)計(jì)風(fēng)格會(huì)深刻地影響軟件的質(zhì)量和可維護(hù)性。為了保證程序編碼的質(zhì)量,程序員必須深刻理解、熟練掌握并正確地運(yùn)用程序設(shè)計(jì)語言的特性。此外,還要求源程序具有良好的結(jié)構(gòu)性和良好的程序設(shè)計(jì)風(fēng)格。26.1.1 程序設(shè)計(jì)語言的分類大體上,程序設(shè)計(jì)語言分為以下幾類:(1)機(jī)器語言(2)匯編語言(3)高級(jí)語言(4)4GL由于高級(jí)語言種類繁多,我們可以從應(yīng)用特點(diǎn)、語言內(nèi)在特點(diǎn)和對(duì)客觀系統(tǒng)的描述三個(gè)不同的角度來對(duì)高級(jí)語言進(jìn)行分類。3(1)基礎(chǔ)語言(例:FORTRAN,BASIC,COBOL

2、和ALGOL)(2)結(jié)構(gòu)化語言(例:ALGOL,PL/1,PASCAL,C,Ada)(3)專用語言(例:APL,LISP,PROLOG,BLISS,F(xiàn)ORTH)1、從應(yīng)用特點(diǎn)的角度來分4(1)系統(tǒng)實(shí)現(xiàn)語言(例:C語言)(2)靜態(tài)高級(jí)語言(例:FORTRAN、COBOL)(3)塊結(jié)構(gòu)高級(jí)語言(例:PASCAL,ALGOL)(4)動(dòng)態(tài)高級(jí)語言2、從語言內(nèi)在特點(diǎn)的角度來分5(2)面向?qū)ο笳Z言對(duì)象+消息(1)面向過程語言數(shù)據(jù)結(jié)構(gòu)+算法3、從描述客觀系統(tǒng)的角度來分例:Delphi、Visual Basic、JAVA、C+。6 6.1.2 程序設(shè)計(jì)語言的選擇 為開發(fā)一個(gè)特定項(xiàng)目選擇程序設(shè)計(jì)語言時(shí),必須從技

3、術(shù)特性、工程特性和心理特性幾方面考慮。在選擇語言時(shí),從問題入手, 確定它的要求是什么,以及這些要求的相對(duì)重要性。由于一種語言不可能同時(shí)滿足它的各種需求, 所以要對(duì)各種要求進(jìn)行權(quán)衡,比較各種可用語言的適用程度, 最后選擇認(rèn)為是最適用的語言。 7 1. 項(xiàng)目的應(yīng)用領(lǐng)域 項(xiàng)目應(yīng)用領(lǐng)域是選擇語言的關(guān)鍵因素, 有下列幾種類型。 1) 科學(xué)工程計(jì)算 該計(jì)算需要大量的標(biāo)準(zhǔn)庫函數(shù), 以便處理復(fù)雜的數(shù)值計(jì)算, 可供選用的語言有:8(1) FORTRAN語言: 是世界上第一個(gè)被正式推廣應(yīng)用的計(jì)算機(jī)語言,產(chǎn)生于1954年,經(jīng)過FORTRAN 0到FORTRAN , 又相繼擴(kuò)展為FORTRAN 77,F(xiàn)ORTRAN

4、90,通過幾個(gè)版本不斷的更新,使它不僅面向科學(xué)計(jì)算,數(shù)據(jù)處理能力也極強(qiáng)。 (2) Pascal語言: 產(chǎn)生于60年代末, 具有很強(qiáng)的數(shù)據(jù)和過程結(jié)構(gòu)化的能力,它是第一個(gè)體現(xiàn)結(jié)構(gòu)化編程思想的語言, 由于它語言簡明、數(shù)據(jù)類型豐富、程序結(jié)構(gòu)嚴(yán)謹(jǐn),許多算法都用類Pascal來概括。用Pascal語言寫程序,也有助于培養(yǎng)良好的編程風(fēng)格。 9(3) C語言:產(chǎn)生于70年代初,最初用于描述UNIX操作系統(tǒng)及其上層軟件,后來發(fā)展成具有很強(qiáng)功能的語言,支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu), 可大量運(yùn)用指針,具有豐富靈活的操作運(yùn)算符及數(shù)據(jù)處理操作符。此外還具有匯編語言的某些特性,使程序運(yùn)行效率高。 (4) PL/1語言: 是一個(gè)適用

5、性非常廣泛的語言, 能夠適用于多種不同的應(yīng)用領(lǐng)域,但由于太龐大,難以推廣使用,目前一些PL/1的子集被廣泛使用。102) 數(shù)據(jù)處理與數(shù)據(jù)庫應(yīng)用數(shù)據(jù)處理與數(shù)據(jù)庫應(yīng)用可供選用的語言如下:(1) Cobol語言: 產(chǎn)生于 50 年代末, 是廣泛用于商業(yè)數(shù)據(jù)處理的語言,它具有極強(qiáng)的數(shù)據(jù)定義能力,程序說明與硬件環(huán)境說明分開, 數(shù)據(jù)描述與算法描述分開,結(jié)構(gòu)嚴(yán)謹(jǐn)層次分明, 說明采用類英語的語法結(jié)構(gòu),可讀性強(qiáng)。11(2) SQL語言: 最初是為IBM公司開發(fā)的數(shù)據(jù)庫查詢語言, 目前不同的軟件開發(fā)公司有了不同的擴(kuò)充版本, 如 80 年代后期我國引入Informix-SQL, Microsoft-SQL可以方便地

6、對(duì)數(shù)據(jù)庫進(jìn)行存取管理。 12(3) 4GL語言: 稱為第4代語言,隨著信息系統(tǒng)的飛速發(fā)展, 原來的第2代語言(如FORTRAN,Cobol)第3代語言(如Pascal, C等)受硬件和操作系統(tǒng)的局限,其開發(fā)工具不能滿足新技術(shù)發(fā)展的需求,因此,在70年代末,提出了第4代語言的概念, 4GL的主要特征是:13 友好的用戶界面: 指操作簡單, 使非計(jì)算機(jī)專業(yè)人員也能方便地使用它。 兼有過程性和非過程性雙重特性:非過程性指語言的抽象層次又提高到一個(gè)新的高度,只需告訴計(jì)算機(jī)“做什么”, 而不必描述“怎么做”,“怎么做”的工作由語言系統(tǒng)運(yùn)用它的專門領(lǐng)域的知識(shí)來填充過程細(xì)節(jié)。 高效的程序代碼: 指能縮短開發(fā)

7、周期, 并減少維護(hù)的代價(jià)。 完備的數(shù)據(jù)庫: 指在4GL中實(shí)現(xiàn)數(shù)據(jù)庫功能, 不再把DBMS(數(shù)據(jù)庫管理系統(tǒng))看成是語言以外的成分。 14 應(yīng)用程序生成器:能提供一些常用的程序來完成文件維護(hù)、屏幕管理、報(bào)表生成和查詢等任務(wù), 從而有效提高軟件生產(chǎn)率。 目前流行的Fox公司的FoxPro, Uniface公司的Uniface, Powersoft公司的Power Builder, Informix公司的Informix-4GL以及各種擴(kuò)充版本的SQL等都不同程度地具有上述特征。 153) 實(shí)時(shí)處理 實(shí)時(shí)處理軟件一般對(duì)性能的要求很高,可選用的語言有: (1) 匯編語言:是面向機(jī)器的,它可以完成高級(jí)語言

8、無法滿足要求的特殊功能,如與外部設(shè)備之間的一些接口操作。16(2) Ada語言:是美國國防部出資開發(fā)的,主要用于適時(shí)、 并發(fā)和嵌入系統(tǒng)的語言。Ada語言是在Pascal基礎(chǔ)上開發(fā)出來的,但其功能更強(qiáng)、更復(fù)雜。它提供了一組豐富的實(shí)時(shí)特性, 包括多任務(wù)處理、中斷處理、任務(wù)間同步與通信等, 它還提供了許多程序包供程序員選擇。通過修訂,已成為安全、高效和靈活的面向?qū)ο蟮木幊陶Z言。 174) 系統(tǒng)軟件 如果編寫操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件時(shí),可選用匯編語言、C語言、Pascal語言和Ada語言。5) 人工智能 如果要完成知識(shí)庫系統(tǒng)、專家系統(tǒng)、決策支持系統(tǒng)、推理工程、語言識(shí)別、模式識(shí)別、機(jī)器人視角及自然語

9、言處理等人工智能領(lǐng)域內(nèi)的系統(tǒng), 應(yīng)選擇的語言如下: 18(1) Lisp: 是一種函數(shù)型語言,產(chǎn)生于60年代初,它特別適用于組合問題中的符號(hào)運(yùn)算和表處理,因此用于定理證明、樹的搜索和其他問題的求解。近年來Lisp廣泛應(yīng)用于專家系統(tǒng)的開發(fā), 對(duì)于定義知識(shí)庫系統(tǒng)中的事實(shí)、規(guī)則和相應(yīng)的推理相對(duì)要容易一些。 19(2) Prolog: 是一種邏輯型語言,產(chǎn)生于70年代初,它提供了支持知識(shí)表示的特性,每一個(gè)程序由一組表示事實(shí)、規(guī)則和推理的子句組成, 比較接近于自然語言,符合人的思維方式。 以上討論的語言,一般適用于相應(yīng)的應(yīng)用領(lǐng)域, 但要根據(jù)具體情況靈活掌握。有的語言功能強(qiáng),適用的范圍較廣,但比較龐大。2

10、02. 軟件開發(fā)的方法 有時(shí)編程語言的選擇依賴于開發(fā)的方法,如果要用快速原型模型來開發(fā),要求能快速實(shí)現(xiàn)原型,因此宜采用4GL。如果是面向?qū)ο蠓椒?,宜采用面向?qū)ο蟮恼Z言編程。近年來,推出了許多面向?qū)ο蟮恼Z言,這里主要介紹以下幾種:21(1) C+:是由美國AT&T公司的Bell實(shí)驗(yàn)室最先設(shè)計(jì)和實(shí)現(xiàn)的語言,它提供了面向?qū)ο箢惖亩x、繼承、封裝和消息傳遞等概念實(shí)現(xiàn)的手段,又與C語言兼容,保留了C語言的許多特性, 維護(hù)了大量已開發(fā)的C庫、C工具以及C源程序的完整性,使編程人員不必放棄自己熟悉的C語言,只需補(bǔ)充學(xué)習(xí)C+提供的那些面向?qū)ο蟮母拍睿蚨鴱腃過渡到C+比較容易,加之它的運(yùn)行性能較高, 成為當(dāng)今

11、最受歡迎的對(duì)象語言之一。22 目前, 除了常用的AT&T C+, Turbo C+, Borland C+及Microsoft C+等版本外,又推出了Microsoft Visual C+, 充分發(fā)揮Windows和Web的功能。 23(2) Java: 是由Sun公司開發(fā)的一種面向?qū)ο蟮?、分布式的?安全的、 高效的及易移植的語言,它的基本功能類似于C+, 但做了重大修改, 不再支持運(yùn)算符重載、多繼承及許多易于混淆和較少使用的特性,增加了內(nèi)存空間自動(dòng)垃圾收集的功能, 使程序員不必考慮內(nèi)存管理問題。Java應(yīng)用程序可利用語言提供的例程庫,能夠自由地打開和訪問網(wǎng)絡(luò)上的對(duì)象。243. 軟件執(zhí)行的環(huán)

12、境 良好的編程環(huán)境不但有效提高軟件生產(chǎn)率, 同時(shí)能減少錯(cuò)誤,有效提高軟件質(zhì)量。近幾年推出了許多可視化的軟件開發(fā)環(huán)境, 如Visual BASIC, Visual C, Visual FoxPro及Delphi(面向?qū)ο蟮腜ascal)等,都提供了強(qiáng)有力的調(diào)試工具, 幫助你快速形成高質(zhì)量的軟件。254. 算法和數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性 科學(xué)計(jì)算、實(shí)時(shí)處理和人工智能領(lǐng)域中的問題算法較復(fù)雜, 而數(shù)據(jù)處理、數(shù)據(jù)庫應(yīng)用和系統(tǒng)軟件領(lǐng)域內(nèi)的問題,數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,因此選擇語言時(shí)可考慮是否有完成復(fù)雜算法的能力, 或者有構(gòu)造復(fù)雜數(shù)據(jù)結(jié)構(gòu)的能力。265. 軟件開發(fā)人員的知識(shí) 有時(shí)編程語言的選擇與軟件開發(fā)人員的知識(shí)水平及心

13、理因素有關(guān),新的語言雖然有吸引力,但軟件開發(fā)人員若熟悉某種語言, 而且有類似項(xiàng)目的開發(fā)經(jīng)驗(yàn),往往愿選擇原有的語言。 開發(fā)人員應(yīng)仔細(xì)地分析軟件項(xiàng)目的類型, 敢于學(xué)習(xí)新知識(shí),掌握新技術(shù)。 276.2 程序設(shè)計(jì)風(fēng)格 隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件的規(guī)模增大了,軟件的復(fù)雜性也增強(qiáng)了。為了保證軟件的質(zhì)量,要加強(qiáng)軟件測(cè)試。 為了延長軟件的生存期,就要經(jīng)常進(jìn)行軟件維護(hù)。不論測(cè)試與維護(hù), 都必須要閱讀程序。因此,讀程序是軟件維護(hù)和開發(fā)過程中的一個(gè)重要組成部分。有時(shí)讀程序的時(shí)間比寫程序的時(shí)間還要多。28 同樣一個(gè)題目,為什么有人編的程序容易讀懂, 而有人編的程序不易讀懂呢? 這就存在一個(gè)程序設(shè)計(jì)的風(fēng)格問題。程序設(shè)計(jì)

14、風(fēng)格指一個(gè)人編制程序時(shí)所表現(xiàn)出來的特點(diǎn)、 習(xí)慣及邏輯思路等。良好的編程風(fēng)格可以減少編碼的錯(cuò)誤, 減少讀程序的時(shí)間,從而提高軟件的開發(fā)效率。因此本節(jié)主要討論與編程風(fēng)格有關(guān)的因素。291. 源程序文檔化編寫源程序文檔化的原則為:(1) 標(biāo)識(shí)符應(yīng)按意取名。若是幾個(gè)單詞組成的標(biāo)識(shí)符, 每個(gè)單詞第一個(gè)字母用大寫,或者之間用下劃線分開,這便于理解。 如某個(gè)標(biāo)識(shí)符取名為rowofscreen, 若寫成RowOfScreen或row-of-screen就容易理解了。但名字也不是越長越好,太長了,書寫與輸入都易出錯(cuò),必要時(shí)用縮寫名字,但縮寫規(guī)則要一致。 30(2) 程序應(yīng)加注釋。 注釋是程序員與讀者之間通信的重

15、要工具,用自然語言或偽碼描述。它說明了程序的功能,特別在維護(hù)階段, 對(duì)理解程序提供了明確指導(dǎo)。注釋分序言性注釋和功能性注釋。31序言性注釋應(yīng)置于每個(gè)模塊起始部分, 主要內(nèi)容有: 說明每個(gè)模塊的用途、 功能。 說明模塊的接口即調(diào)用形式、 參數(shù)描述及從屬模塊的清單。 數(shù)據(jù)描述: 指重要數(shù)據(jù)的名稱、 用途、 限制、 約束及其他信息。 開發(fā)歷史: 指設(shè)計(jì)者、 審閱者姓名及日期, 修改說明及日期。 32功能性注釋嵌入在源程序內(nèi)部,說明程序段或語句的功能以及數(shù)據(jù)的狀態(tài)。注意以下幾點(diǎn): 注釋用來說明程序段, 而不是每一行程序都要加注釋。 使用空行或縮進(jìn)或括號(hào), 以便很容易區(qū)分注釋和程序。 修改程序也應(yīng)修改注

16、釋。 332. 數(shù)據(jù)說明為了使數(shù)據(jù)定義更易于理解維護(hù),有以下指導(dǎo)原則: (1) 數(shù)據(jù)說明順序應(yīng)規(guī)范,使數(shù)據(jù)的屬性更易于查找, 從而有利于測(cè)試、糾錯(cuò)與維護(hù)。例如按常量說明、類型說明、 全程量說明及局部量說明順序。(2) 一個(gè)語句說明多個(gè)變量時(shí), 各變量名按字典序排列。 (3) 對(duì)于復(fù)雜的數(shù)據(jù)結(jié)構(gòu), 要加注釋, 說明在程序?qū)崿F(xiàn)時(shí)的特點(diǎn)。343. 語句構(gòu)造 語句構(gòu)造的原則為:簡單直接,不能為了追求效率而使代碼復(fù)雜化。為了便于閱讀和理解,不要一行多個(gè)語句。不同層次的語句采用縮進(jìn)形式,使程序的邏輯結(jié)構(gòu)和功能特征更加清晰。 要避免復(fù)雜的判定條件,避免多重的循環(huán)嵌套。表達(dá)式中使用括號(hào)以提高運(yùn)算次序的清晰度等

17、。 354. 輸入和輸出在編寫輸入和輸出程序時(shí)考慮以下原則:(1) 輸入操作步驟和輸入格式盡量簡單。(2) 應(yīng)檢查輸入數(shù)據(jù)的合法性、 有效性, 報(bào)告必要的輸入狀態(tài)信息及錯(cuò)誤信息。(3) 輸入一批數(shù)據(jù)時(shí), 使用數(shù)據(jù)或文件結(jié)束標(biāo)志, 而不要用計(jì)數(shù)來控制。 (4) 交互式輸入時(shí), 提供可用的選擇和邊界值。36(5) 當(dāng)程序設(shè)計(jì)語言有嚴(yán)格的格式要求時(shí), 應(yīng)保持輸入格式的一致性。(6) 輸出數(shù)據(jù)表格化、 圖形化。 輸入、 輸出風(fēng)格還受其他因素的影響, 如輸入、 輸出設(shè)備,用戶經(jīng)驗(yàn)及通信環(huán)境等。375. 效率效率指處理機(jī)時(shí)間和存儲(chǔ)空間的使用, 對(duì)效率的追求明確以下幾點(diǎn): (1) 效率是一個(gè)性能要求, 目標(biāo)

18、在需求分析給出。 (2) 追求效率建立在不損害程序可讀性或可靠性基礎(chǔ)之上, 要先使程序正確,再提高程序效率;先使程序清晰,再提高程序效率。 38(3) 提高程序效率的根本途徑在于選擇良好的設(shè)計(jì)方法、 良好的數(shù)據(jù)結(jié)構(gòu)與算法,而不是靠編程時(shí)對(duì)程序語句做調(diào)整。 總之,在編碼階段,要善于積累編程經(jīng)驗(yàn),培養(yǎng)和學(xué)習(xí)良好的編程風(fēng)格,使編出的程序清晰易懂,易于測(cè)試與維護(hù), 從而提高軟件的質(zhì)量。 39程序?qū)嶋H上也是一種供人閱讀的文章,有一個(gè)文章的風(fēng)格問題。應(yīng)該使程序具有良好的風(fēng)格,詳細(xì)說明以下內(nèi)容: 1 源程序文檔化 2 數(shù)據(jù)說明 3 語句結(jié)構(gòu) 4 輸入輸出方法401 源程序文檔化 標(biāo)識(shí)符的命名 安排注釋 程序

19、的視覺組織41符號(hào)名的命名符號(hào)名即標(biāo)識(shí)符,包括模塊名、變量名、常量名、標(biāo)號(hào)名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。這些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定實(shí)際意義。例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。42名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。必要時(shí)可使用縮寫名字,但這時(shí)要注意縮寫規(guī)則要一致,并且要給每一個(gè)名字加注釋。同時(shí),在一個(gè)程序中,一個(gè)變量只應(yīng)用于一種用途。NEW.BALANCE.ACCOUNTS.PAYABLE NBALAP N 43程序的注釋 夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。

20、注釋決不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個(gè)源程序的13到12,甚至更多。注釋分為序言性注釋和功能性注釋。44序言性注釋通常置于每個(gè)程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對(duì)于理解程序本身具有引導(dǎo)作用。有些軟件開發(fā)部門對(duì)序言性注釋做了明確而嚴(yán)格的規(guī)定,要求程序編制者逐項(xiàng)列出。有關(guān)項(xiàng)目包括: 程序標(biāo)題;45 有關(guān)本模塊功能和目的的說明; 主要算法; 接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單; 有關(guān)數(shù)據(jù)描述:重要的變量及其用途,約束或限制條件,以及其它有關(guān)信息; 模塊位置:在哪一個(gè)源文件中,或隸屬于哪一個(gè)軟件包; 開發(fā)簡歷:模塊設(shè)計(jì)者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)

21、說明等。46功能性注釋功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會(huì)怎么樣。而不要解釋下面怎么做。例如, /* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNTTOTAL不好。47如果注明把月銷售額計(jì)入年度總額,便使讀者理解了下面語句的意圖: /* ADD MONTHLY-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNTTOTAL要點(diǎn) 描述一段程序,而不是每一個(gè)語句; 用縮進(jìn)和空行,使程序與注釋容易區(qū)別; 注釋要正確。48視覺組織 空格、空行和移行恰當(dāng)?shù)乩每崭?,可以突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算

22、的錯(cuò)誤。例如 ,將表達(dá)式(A17)ANDNOT(B49)ORC寫成(A17) AND NOT (B49) OR C自然的程序段之間可用空行隔開;49移行也叫做向右縮格。它是指程序中的各行不必都在左端對(duì)齊,都從第一格起排列。這樣做使程序完全分不清層次關(guān)系。對(duì)于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。例如,兩重選擇結(jié)構(gòu)嵌套,寫成下面的移行形式,層次就清楚得多。50 IF() THEN IF() THEN ELSE ENDIF ELSE ENDIF51數(shù)據(jù)說明在設(shè)計(jì)階段已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復(fù)雜性。在編寫程序時(shí),則需要注意數(shù)據(jù)說明的風(fēng)格。為了使程序中數(shù)

23、據(jù)說明更易于理解和維護(hù),必須注意以下幾點(diǎn)。 1.數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化 2.說明語句中變量安排有序化 3.使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)52數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化數(shù)據(jù)說明次序規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測(cè)試,排錯(cuò)和維護(hù)。原則上,數(shù)據(jù)說明的次序與語法無關(guān),其次序是任意的。但出于閱讀、理解和維護(hù)的需要,最好使其規(guī)范化,使說明的先后次序固定。53例如,在FORTRAN程序中數(shù)據(jù)說明次序 常量說明 簡單變量類型說明 數(shù)組說明 公用數(shù)據(jù)塊說明 所有的文件說明在類型說明中還可進(jìn)一步要求。例如, 可按如下順序排列: 整型量說明 實(shí)型量說明 字符量說明 邏輯量說明54說明語句中變量安排有序化當(dāng)多個(gè)變量名

24、在一個(gè)說明語句中說明時(shí),應(yīng)當(dāng)對(duì)這些變量按字母的順序排列。帶標(biāo)號(hào)的全程數(shù)據(jù)(如FORTRAN的公用塊)也應(yīng)當(dāng)按字母的順序排列。例如,把 integer size, length, width, cost, price寫成 integer cost, length, price , size, width 55使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)如果設(shè)計(jì)了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋來說明在程序?qū)崿F(xiàn)時(shí)這個(gè)數(shù)據(jù)結(jié)構(gòu)的固有特點(diǎn)。例如, 對(duì)PL/1的鏈表結(jié)構(gòu)和Pascal中用戶自定義的數(shù)據(jù)類型,都應(yīng)當(dāng)在注釋中做必要的補(bǔ)充說明。56語句結(jié)構(gòu)在設(shè)計(jì)階段確定了軟件的邏輯流結(jié)構(gòu),但構(gòu)造單個(gè)語句則是編碼階段的任務(wù)。語句構(gòu)

25、造力求簡單,直接,不能為了片面追求效率而使語句復(fù)雜化。571. 在一行內(nèi)只寫一條語句在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。許多程序設(shè)計(jì)語言允許在一行內(nèi)寫多個(gè)語句。但這種方式會(huì)使程序可讀性變差。因而不可取。58例如,有一段排序程序FOR I:=1 TO N1 DO BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;由于一行中包括了多個(gè)語句,掩蓋了程序的循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu),使其可讀性變得很差。59FOR I:=1 T

26、O N-1 DO /改進(jìn)布局 BEGIN T:=I; FOR J:=I1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WORK; END END;602.程序編寫首先應(yīng)當(dāng)考慮清晰性程序編寫首先應(yīng)當(dāng)考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。例如,有一個(gè)用 C 語句寫出的程序段: AI = AIAT; AT = AIAT; AI = AIAT;61 此段程序可能不易看懂,有時(shí)還需用實(shí)際數(shù)據(jù)試驗(yàn)一下。實(shí)際上,這段程序的功能就是交換AI和AT中的內(nèi)容。目的是為了節(jié)省一個(gè)工作單元。如果改一下: WORK

27、= AT; AT = AI; AI = WORK;就能讓讀者一目了然了。623.程序要能直截了當(dāng)?shù)卣f明程序員的用意。程序編寫得要簡單,寫清楚,直截了當(dāng)?shù)卣f明程序員的用意。例如, for ( i = 1; i = n; i+ ) for ( j = 1; j = n; j+ ) Vij ( ij ) * ( ji )除法運(yùn)算()在除數(shù)和被除數(shù)都是整型量時(shí),其結(jié)果只取整數(shù)部分,而得到整型量。63 當(dāng) ij 時(shí), i / j = 0 當(dāng) ji 時(shí), j / i = 0 得到的數(shù)組 當(dāng)ij時(shí) Vij = ( ij ) * ( ji ) = 0 當(dāng)ij時(shí) Vij = ( ij ) * ( ji ) =

28、1這樣得到的結(jié)果 V 是一個(gè)單位矩陣。64寫成以下的形式,就能讓讀者直接了解程序編寫者的意圖。 for ( i1; i = n; i+ ) for ( j1; j = n; j+ ) if ( i = j ) Vij 1.0; ELSE Vij 0.0;65664. 除非對(duì)效率有特殊的要求, 程序編寫要做到清晰第一,效率第二。不要為了追求效率而喪失了清晰性。事實(shí)上,程序效率的提高主要應(yīng)通過選擇高效的算法來實(shí)現(xiàn)。5.首先要保證程序正確, 然后才要求提高速度。反過來說,在使程序高速運(yùn)行時(shí),首先要保證它是正確的。676.避免使用臨時(shí)變量而使可讀性下降。例如,有的程序員為了追求效率,往往喜歡把表達(dá)式

29、AI1AI;寫成 AIAI; XAI1AI;這樣將一句分成兩句寫,會(huì)產(chǎn)生意想不到的問題。687. 讓編譯程序做簡單的優(yōu)化。8. 盡可能使用庫函數(shù)9. 避免不必要的轉(zhuǎn)移。同時(shí)如果能保持程序可讀性,則不必用 GO TO語句。 例如,有一個(gè)求三個(gè)數(shù)中最小值的程序:69 IF ( X Y ) GOTO 30 IF (Y Z) GOTO 50 SMALLZ GOTO 7030 IF ( X Z)GOTO 60 SMALLZ GOTO 7050 SMALLY GOTO 7060 SMALLX70 CONTINUE70 程序只需編寫成: smallx; if ( y small ) smally; if (

30、 z = a ) if ( char = z ) cout “This is a letter?!? else cout = 0 & char = 9 ) 不要讓讀者繞彎子想。7314. 盡可能用通俗易懂的偽碼來描述程序的流程,然后再翻譯成必須使用的語言。15. 數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化。16. 要模塊化,使模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。17. 利用信息隱蔽,確保每一個(gè)模塊的獨(dú)立性。7418. 從數(shù)據(jù)出發(fā)去構(gòu)造程序。19. 不要修補(bǔ)不好的程序,要重新編寫。也不要一味地追求代碼的復(fù)用,要重新組織。20. 對(duì)太大的程序,要分塊編寫、測(cè)試,然后再集成。21. 對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)

31、盡量使用遞歸過程。75輸入和輸出輸入和輸出信息是與用戶的使用直接相關(guān)的。輸入和輸出的方式和格式應(yīng)當(dāng)盡可能方便用戶的使用。一定要避免因設(shè)計(jì)不當(dāng)給用戶帶來的麻煩。因此,在軟件需求分析階段和設(shè)計(jì)階段,就應(yīng)基本確定輸入和輸出的風(fēng)格。系統(tǒng)能否被用戶接受,有時(shí)就取決于輸入和輸出的風(fēng)格。76不論是批處理的輸入輸出方式,還是交互式的輸入輸出方式,在設(shè)計(jì)和編碼時(shí)都應(yīng)考慮下列原則: 1. 對(duì)所有的輸入數(shù)據(jù)都要進(jìn)行檢驗(yàn),識(shí)別錯(cuò)誤的輸入,以保證每個(gè)數(shù)據(jù)的有效性;2. 檢查輸入項(xiàng)的各種重要組合的合理性,必要時(shí)報(bào)告輸入狀態(tài)信息;3. 使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;77 4. 輸入數(shù)據(jù)時(shí),應(yīng)允許使用

32、自由格式輸入; 5. 應(yīng)允許缺省值; 6. 輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目; 7. 在交互式輸入輸入時(shí),要在屏幕上使用提示符明確提示交互輸入的請(qǐng)求,指明可使用選擇項(xiàng)的種類和取值范圍。同時(shí),在數(shù)據(jù)輸入的過程中和輸入結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息;78 8. 當(dāng)程序設(shè)計(jì)語言對(duì)輸入輸出格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語句的要求的一致性;9. 給所有的輸出加注解,并設(shè)計(jì)輸出報(bào)表格式。輸入輸出風(fēng)格還受到許多其它因素的影響。如輸入輸出設(shè)備(例如終端的類型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶的熟練程度、以及通信環(huán)境等。 796.3 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)主要

33、包括兩方面:在編寫程序時(shí),強(qiáng)調(diào)使用幾種基本控制結(jié)構(gòu),通過組合嵌套,形成程序的控制結(jié)構(gòu)。盡可能避免使用GOTO語句。在程序設(shè)計(jì)過程中,盡量采用自頂向下和逐步細(xì)化的原則,由粗到細(xì),一步步展開。80結(jié)構(gòu)化程序設(shè)計(jì)的主要原則使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯。選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口。程序語句組成容易識(shí)別的塊,每塊只有一個(gè)入口和一個(gè)出口。復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進(jìn)行組合嵌套來實(shí)現(xiàn)。81語言中沒有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致。嚴(yán)格控制GOTO語句,僅在下列情形才可使用: 用一個(gè)非結(jié)構(gòu)化的程序設(shè)計(jì)語言去實(shí)現(xiàn)一個(gè)結(jié)構(gòu)化的構(gòu)造。 若不使用GOTO語句就會(huì)使程序功能模糊。 在某種可以改善而不是損害程序可讀性的情況下。82例1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論