軟件工程 第8-1章 編碼 CUMT 2_第1頁
軟件工程 第8-1章 編碼 CUMT 2_第2頁
軟件工程 第8-1章 編碼 CUMT 2_第3頁
軟件工程 第8-1章 編碼 CUMT 2_第4頁
軟件工程 第8-1章 編碼 CUMT 2_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機網(wǎng)絡(luò)課件 制作人:謝希仁王榮存 博士第8-1章 編碼第8章 編碼與測試課件制作人:謝希仁8-1.1 編碼概念8-1.2 程序設(shè)計語言8-1.3 編碼風格8-1.4 編碼工具課件制作人:謝希仁問題定義問題定義可行性研究可行性研究可行否?可行否?否否是是需求分析需求分析終止項目終止項目計劃計劃時期時期概要概要/詳細設(shè)計詳細設(shè)計編碼編碼課件制作人:謝希仁8-1.1 編碼概念編碼概念l做為軟件工程過程的一個階段,程序編碼是設(shè)計的繼續(xù)。l程序設(shè)計語言的特性和程序設(shè)計風格會深刻地影響軟件的質(zhì)量和可維護性。l為了保證程序編碼的質(zhì)量,程序員必須深刻地理解、熟練地掌握并正確地運用程序設(shè)計語言的特性。此外,

2、還要求源程序具有良好的結(jié)構(gòu)性和良好的程序設(shè)計風格。課件制作人:謝希仁概要設(shè)計概要設(shè)計報告報告詳細設(shè)計詳細設(shè)計報告報告源程序源程序清單清單程序設(shè)計語言程序設(shè)計語言課件制作人:謝希仁l編碼產(chǎn)生的源程序,應(yīng)該正確可靠,簡明清晰,而且要具有較高的效率。 l前兩點是一致的,因為源代碼越是清楚和簡明,就越便于驗證源代碼和模塊規(guī)格說明的一致性,越容易對它進行測試和維護l清晰和效率卻常常會有矛盾,清晰性好的程序一般效率較低,而要求效率高的程序往往清晰度不太好。對于大多數(shù)模塊,編碼時應(yīng)該把簡明清晰放在第一位。 課件制作人:謝希仁例 打印A, B, C三數(shù)中最小者的程序課件制作人:謝希仁 程序1 if ( A B

3、 ) goto 120; if ( B C ) goto 110; 100 write ( C ); goto 140; 110 write ( B ); goto 140; 120 if ( A C ) goto 130; goto 100; 130 write ( A ); 140 end 課件制作人:謝希仁程序2 if ( A B ) and ( A C ) then write ( A ) else if ( A B ) and ( B C ) then write ( B ) else write ( C ) endif endif課件制作人:謝希仁【結(jié)構(gòu)化的程序設(shè)計】嚴格控制GOT

4、O語句使用語言中有限的基本控制結(jié)構(gòu)表示程序邏輯l順序、選擇、重復;l選用的控制結(jié)構(gòu)只準許有一個入口和一個出口;課件制作人:謝希仁例2:二分法求方程 f (x)0 在區(qū)間a,b中的根(假設(shè)在閉區(qū)間a,b上函數(shù) f (x) 有唯一的一個零)課件制作人:謝希仁程序1f0 = f (a); f1 = f (b);if ( f0 * f1 = 0 ) x0 = a; x1 = b; for ( i = 1;i = n;i+ ) xm = ( x0 x1 ) / 2; fm = f (xm); if ( abs (fm) eps | abs (x1x0) 0 ) x0 = xm; f0 = fm; els

5、e x1 = xm; finish:printf (xm);正常出口正常出口非正常出口非正常出口課件制作人:謝希仁程序2f0 = f (a); f1 = f (b);if ( f0 * f1 = 0 ) x0 = a; x1 = b; for ( i = 1;i = n;i+ ) xm = ( x0 x1 ) / 2; fm = f (xm); if ( abs (fm) eps | abs (x1x0) 0 ) x0 = xm; f0 = fm; else x1 = xm; printf (xm);正常出口正常出口非正常出口非正常出口課件制作人:謝希仁程序3f0 = f (a); f1 =

6、f (b);if ( f0 * f1 = 0 ) x0 = a; x1 = b;i = 1;finished = 0; while ( i = n & 0 = finished) xm = ( x0 x1 ) / 2; fm = f (xm); if ( abs (fm) eps | abs (x1x0) 0 ) x0 = xm; f0 = fm; else x1 = xm; printf ();正常出口正常出口引入變量引入變量 finished,改改 for 型循環(huán)為型循環(huán)為 while 型,型,將單入口多出口結(jié)構(gòu)改為單入口單出口結(jié)構(gòu)。將單入口多出口結(jié)構(gòu)改為單入口單出口結(jié)構(gòu)。課件制作人:謝希

7、仁l在詳細設(shè)計和編碼階段,應(yīng)當采取自頂向下,逐步求精的方法。l把一個模塊的功能逐步分解,細化為一系列具體的步驟,進而翻譯成一系列用某種程序設(shè)計語言寫成的程序。課件制作人:謝希仁例 用篩選法求100以內(nèi)的素數(shù)l篩選法就是從2到100中去掉2,3,9,10的倍數(shù),剩下的就是100以內(nèi)的素數(shù)。l為了解決這個問題,可先按程序功能寫出一個框架。課件制作人:謝希仁main ( ) / 建立2到100的數(shù)組A ,其中Aii; -1 建立2到10的素數(shù)表 B ,其中存放2 到10以內(nèi)的素數(shù);-2 若Aii是B 中任一數(shù)的倍數(shù),則 剔除Ai;-3 輸出A 中所有沒有被剔除的數(shù); -4解題步驟(1)課件制作人:謝

8、希仁main ( ) /*建立2到100的數(shù)組A ,其中Aii*/for ( i = 2;i = 100;i+ ) Ai = i;/* 建立2到10的素數(shù)表B ,其中存放2到10以內(nèi)的素數(shù)*/B1 =2;B2 = 3;B3 = 5;B4 = 7;/*若Aii是B 中任一數(shù)的倍數(shù),則剔除Ai*/for ( j = 1;j = 4;j+ ) 檢查A 所有的數(shù)能否被Bj整除并將 能被整除的數(shù)從A 中剔除; -3.1 /*輸出A 中所有沒有被剔除的數(shù)*/ for ( i = 2;i = 100;i+ ) 若Ai沒有被剔除,則輸出之 -4.1解題步驟(2)課件制作人:謝希仁main ( ) /*建立2到

9、100的數(shù)組A ,其中Aii*/for ( i = 2;i = 100;i+ ) Ai = i;/* 建立2到10的素數(shù)表B ,其中存放2到10以內(nèi)的素數(shù)*/B1 =2;B2 = 3;B3 = 5;B4 = 7;/*若Aii是B 中任一數(shù)的倍數(shù),則剔除Ai*/for ( j = 1;j = 4;j+ ) /*檢查A 所有的數(shù)能否被Bj整除并將能被整除的數(shù)從A 中剔除*/解題步驟(3)課件制作人:謝希仁 for ( i = 2;i = 100;i+) if ( AiBj * Bj = Ai ) Ai = 0; /*輸出A 中所有沒有被剔除的 數(shù)*/ for ( i = 2; i = 100;i+

10、) /*若Ai沒有被剔除,則輸出之*/ if ( Ai != 0 ) printf ( “A%d%dn”,i,Ai ); 課件制作人:謝希仁l符合人們解決復雜問題的普遍規(guī)律??商岣哕浖_發(fā)的成功率和生產(chǎn)率l用先全局后局部,先整體后細節(jié),先抽象后具體的逐步求精的過程開發(fā)出來的程序具有清晰的層次結(jié)構(gòu),程序容易閱讀和理解課件制作人:謝希仁l程序自頂向下,逐步細化,分解成一個樹形結(jié)構(gòu)。在同一層的節(jié)點上的細化工作相互獨立。有利于編碼、測試和集成l程序清晰和模塊化,使得在修改和重新設(shè)計一個軟件時,可復用的代碼量最大l每一步工作僅在上層節(jié)點的基礎(chǔ)上做不多的設(shè)計擴展,便于檢查l有利于設(shè)計的分工和組織工作。課件

11、制作人:謝希仁8.1 程序設(shè)計語言n程序設(shè)計語言指編寫計算機程序所用的語言, 是人與計算機進行交流的工具。計算機硬計算機硬件僅僅知件僅僅知道道0和和1有問題需有問題需要計算機要計算機解決的人解決的人交流的鴻溝交流的鴻溝課件制作人:謝希仁8.1 程序設(shè)計語言n程序設(shè)計語言指編寫計算機程序所用的語言, 是人與計算機進行交流的工具。程序設(shè)計語言程序設(shè)計語言計算機硬計算機硬件僅僅知件僅僅知道道0和和1有問題需有問題需要計算機要計算機解決的人解決的人課件制作人:謝希仁8-1.2 程序設(shè)計語言程序設(shè)計語言8-1.2.1語言的分類語言的分類按發(fā)展過程,程序設(shè)計語言分為:低級語言低級語言高級語言高級語言硬件硬

12、件依賴于機器依賴于機器系統(tǒng)軟件系統(tǒng)軟件硬件硬件獨立于機器獨立于機器機機器器語語言言匯匯編編語語言言課件制作人:謝希仁按發(fā)展過程,程序設(shè)計語言分為:低級語言低級語言高級語言高級語言機機器器語語言言匯匯編編語語言言人工智能人工智能Lisp、Prolog用于軍事用于軍事Ada課件制作人:謝希仁4GL-第四代語言 -基本概述n4GL以數(shù)據(jù)庫管理系統(tǒng)所提供的功能為核心,進一步構(gòu)造了開發(fā)高層軟件系統(tǒng)的開發(fā)環(huán)境,如報表生成、多窗口表格設(shè)計、菜單生成系統(tǒng)等,為用戶提供了一個良好的應(yīng)用開發(fā)環(huán)境。 n4GL簡單易學,用戶界面良好,提供了功能強大的非過程化問題定義手段,用戶只需告知系統(tǒng)做什么,而無需說明怎么做n4G

13、L的代表性軟件系統(tǒng)有:Oracle應(yīng)用開發(fā)環(huán)境、SQL Windows、Power Builder 、Delphi和INFORMOX-4GL等課件制作人:謝希仁4GL-第四代語言 -背景n由于近代軟件工程實踐所提出的大部分技術(shù)和方法并未受到普遍的歡迎和采用,軟件供求矛盾進一步惡化,軟件的開發(fā)成本日益增長,導致了所謂“新軟件危機”。n這既暴露了傳統(tǒng)開發(fā)模型的不足,又說明了單純以勞動力密集的形式來支持軟件生產(chǎn),已不再適應(yīng)社會信息化的要求,必須尋求更高效、自動化程度更高的軟件開發(fā)工具來支持軟件生產(chǎn)。4GL就是在這種背景下應(yīng)運而生并發(fā)展壯大的。 課件制作人:謝希仁4GL-第四代語言 -標準n4GL應(yīng)具

14、有的標準n(1)生產(chǎn)率:4GL一出現(xiàn),就是以大幅度提高軟件生產(chǎn)率為己任的,4GL應(yīng)比3GL提高生產(chǎn)率一個數(shù)量級以上。 n(2)非過程化:4GL基本上應(yīng)該是面向問題的,即只需告知計算機“做什么”,而不必告知計算機“怎么做”。當然4GL為了適應(yīng)復雜的應(yīng)用,而這些應(yīng)用是無法“非過程化”的,就允許保留過程化的語言成分,但非過程化應(yīng)是4GL的主要特色。 n(3)用戶界面:4GL應(yīng)具有良好的用戶界面,應(yīng)該簡單、易學、易掌握,使用方便、靈活。 n(4)功能:4GL要具有生命力,不能適用范圍太窄,在某一范圍內(nèi)應(yīng)具有通用性。 課件制作人:謝希仁4GL-第四代語言 -缺點n(1)4GL雖然功能強大,但在其整體能力

15、上卻與3GL有一定的差距。這一方面是語言抽象級別提高;另一方面是人為帶來的,許多4GL只面向?qū)m棏?yīng)用。有的4GL為了提高對問題的表達能力,提供了同3GL的接口,以彌補其能力上的不足。如Oracle提供了可將SQL語句嵌入C程序中的工具PROC。 n(2)4GL系統(tǒng)開銷龐大,運行效率低下,對軟硬件資源消耗嚴重,應(yīng)用受硬件限制。 n 課件制作人:謝希仁n(3)由于缺乏統(tǒng)一的工業(yè)標準,4GL產(chǎn)品花樣繁多,用戶界面差異很大,與具體的機器聯(lián)系緊密,語言的獨立性較差(SQL稍好),影響了應(yīng)用軟件的移植與推廣。 n(4)目前4GL主要面向基于數(shù)據(jù)庫應(yīng)用的領(lǐng)域,不宜于科學計算、高速的實時系統(tǒng)和系統(tǒng)軟件開發(fā)。課

16、件制作人:謝希仁4GL-第四代語言 -分類n分類n1.查詢語言和報表生成器n查詢語言是數(shù)據(jù)庫管理系統(tǒng)的主要工具,它提供用戶對數(shù)據(jù)庫進行查詢的功能。有的查詢語言(如SQL)實際上還包括有查詢、操縱、定義、控制四種功能。 n報表生成器是為用戶提供的自動產(chǎn)生報表的重要工具,它提供非過程化的描述手段讓用戶很方便地根據(jù)數(shù)據(jù)庫中的信息來生成報表,如ADF 課件制作人:謝希仁4GL-第四代語言 -分類n2.圖形語言n圖形信息較之一維的字符串、二維的表格信息更為直觀、鮮明。n目前較有代表性的是Gupta公司開發(fā)的SQL Windows系統(tǒng)。它以SQL語言為引擎,讓用戶在屏幕上以圖形方式定義用戶需求,系統(tǒng)自動生

17、成相應(yīng)的源程序(還具有面向?qū)ο蟮墓δ埽?,用戶可修改或增加這些源程序,從而完成應(yīng)用開發(fā)。 課件制作人:謝希仁4GL-第四代語言 -分類n3.應(yīng)用生成器n應(yīng)用生成器是重要的一類綜合的4GL工具,它用來生成完整的應(yīng)用系統(tǒng)。n應(yīng)用生成器讓用戶不必使用多個軟件,而只用這樣一個綜合工具來實現(xiàn)多種功能。n應(yīng)用生成器按其使用對象可以分為交互式和編程式二類。課件制作人:謝希仁4GL-第四代語言 -分類n交互式: FOCUS、RAMIS、MAPPER、UFO、NOMAD、SAS等。它們服務(wù)于維護、準備和處理報表,允許用戶以可見的交互方式在終端上創(chuàng)立文件、報表和進行其它的處理。n應(yīng)用開發(fā)環(huán)境目前較有代表性的有Pow

18、er Builder和Oracle。課件制作人:謝希仁nOracle提供的SQLFORMS、SQLMENU、SQLREPORTWRITER等工具建立在 SQL語言基礎(chǔ)之上,借助了數(shù)據(jù)庫管理系統(tǒng)強大的功能,讓用戶交互式地定義需求,系統(tǒng)生成相應(yīng)的屏幕格式、菜單和打印報表。課件制作人:謝希仁4GL-第四代語言 n編程式應(yīng)用生成器:是為建造復雜系統(tǒng)的專業(yè)程序人員設(shè)計的,如NATURAL、FOXPRO、MANTIS、IDEAL、CSP、DMS、INFO、LINC、FORMAL、 APPLICATION FACTORY以及作者設(shè)計的OOHLL等。n這一類4GL中有許多是程序生成器(Program Gene

19、rator),如LINC生成COBOL程序,F(xiàn)ORMAL生成PASCAL程序等。課件制作人:謝希仁n為了提供專業(yè)人員建造復雜的應(yīng)用系統(tǒng),有的語言具有很強的過程化描述能力。雖然語句的形式有差異,其實質(zhì)與3GL的過程化語句相同,如Informix4GL和Oracle的PROC。課件制作人:謝希仁4GL-第四代語言 n4.形式規(guī)格說明語言n軟件規(guī)格說明是對軟件應(yīng)滿足的需求、功能、性能及其它重要方面的陳述,是軟件開發(fā)的基礎(chǔ),有軟件的需求規(guī)格說明、功能規(guī)格說明、設(shè)計規(guī)格說明等。用來書寫規(guī)格說明的語言稱為規(guī)格說明語言。n傳統(tǒng)的規(guī)格說明語言是自然語言。在我國,主要使用現(xiàn)代漢語來表達軟件的規(guī)格說明。自然語言為

20、開發(fā)者和用戶所熟悉,易于使用。但也會不可避免地將自然語言的歧義性、不精確性引入到軟件規(guī)格說明中,從而給軟件的開發(fā)和軟件的質(zhì)量帶來隱患。課件制作人:謝希仁4GL-第四代語言 -10n形式的規(guī)格說明語言則很好地解決了上述問題,而且還是軟件自動化的基礎(chǔ)。從形式的需求規(guī)格說明和功能規(guī)格說明出發(fā),可以自動或半自動地轉(zhuǎn)換成某種可執(zhí)行的語言(如高級語言)。n需求規(guī)格說明和功能規(guī)格說明是面向問題、非過程化的,因此屬于4GL。這一類語言有Z、NPL、SPECINT以及作者設(shè)計的 JAVASPEC。n設(shè)計規(guī)格說明語言由于包含了大量過程化成分,原則上不應(yīng)劃入4GL。 課件制作人:謝希仁第五代語言 n第五代語言就是自

21、然語言又被稱為知識庫語言或人工智能語言,目標是最接近日常生活所用語言的程序語言。n目前并沒有真正意義上的第五代語言,LISP和PROLOG號稱第五代語言,其實還遠遠不能達到自然語言的要求。課件制作人:謝希仁8-1.2.2語言的選擇語言的選擇 由于軟件系統(tǒng)的絕大部分成本用于生命周期的測試和維護階段,所以容易測試和容易維護是非常重要的 課件制作人:謝希仁選擇編程語言的經(jīng)驗準則選擇編程語言的經(jīng)驗準則 (1) 選擇適合應(yīng)用領(lǐng)域的語言(2)系統(tǒng)用戶的要求(3)可以使用的編譯程序編譯程序是否可以運行在目標系統(tǒng)的環(huán)境中(4)可以得到的軟件工具是否有支持某種語言程序開發(fā)的軟件工具可以利用 課件制作人:謝希仁(

22、5)軟件可移植性要求如果目標系統(tǒng)將在不同類型的設(shè)備上運行,或者預(yù)期的使用壽命很長,那么選擇一種標準化程序高、程序可移植性好的語言就是很重要的 (6)人的因素盡量選用程序員和系統(tǒng)維護人員熟悉的語言環(huán)境,以節(jié)省開發(fā)時間,也有利于將來使用和維護工作 (7)工程規(guī)模課件制作人:謝希仁語言適用的主要應(yīng)用領(lǐng)域類型可選語言科學工程計算Fortran,Pascal,PL/1商用數(shù)據(jù)處理COBOL實時軟件匯編語言,Ada 系統(tǒng)軟件匯編語言,C, Ada智能軟件LISP,PROLOG網(wǎng)絡(luò)編程JAVA課件制作人:謝希仁語言選擇的一些比較、綜合性資料語言選擇的一些比較、綜合性資料n2005年11月程序語言世界排行榜揭

23、曉 Java居首位 nhttp:/ Java仍需努力 nhttp:/ nhttp:/ C+ 2005的現(xiàn)代語言功能編寫更快的代碼 nhttp:/ 課件制作人:謝希仁世界前世界前20位語言排行榜(位語言排行榜(11-20) 課件制作人:謝希仁世界前世界前10位語言五年內(nèi)發(fā)展趨勢圖位語言五年內(nèi)發(fā)展趨勢圖 課件制作人:謝希仁8-1.3 編碼風格編碼風格l程序?qū)嶋H上也是一種供人閱讀的文章,編碼風格又稱程序設(shè)計風格l良好的編碼風格能在一定程度上彌補語言存在的缺點,反之,如果不注意風格,即使使用了高級語言也很難寫出高質(zhì)量的程序 課件制作人:謝希仁8-1.3.1. 程序內(nèi)部文檔程序內(nèi)部文檔1. 標識符的命名

24、2. 安排注釋3. 程序的視覺組織課件制作人:謝希仁1.符號名的命名符號名的命名l符號名即標識符,包括模塊名、變量名、常量名、標號名、子程序名 、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。l這些名字應(yīng)能反映它所代表的實際東西,應(yīng)有一定實際意義。l例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。課件制作人:謝希仁l名字不是越長越好,應(yīng)當選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。同時,在一個程序中,一個變量只應(yīng)用于一種用途。lNEW.BALANCE.ACCOUNTS.PAYABLE (PASCAL

25、)lNBALAP (FORTRAN)lN (BASIC)計算機網(wǎng)絡(luò)課件 制作人:謝希仁變量和函數(shù)的常用命名方法 下劃線法(在每一個英文單詞前,加下劃線)在變量名和函數(shù)中使用下劃線是一種風格, 會大大加強可讀性 total_sum, print_report() 駱駝式命名法(每一個單詞的第一個字母寫大寫)混合使用大小寫字母來構(gòu)成變量和函數(shù)的名字 TotalSum, PrintReport()函數(shù)的命名采用動詞/名詞結(jié)構(gòu) ExitSystem()計算機網(wǎng)絡(luò)課件 制作人:謝希仁 匈牙利式命名法(數(shù)據(jù)類型+駱駝式方法)MS公司的程序員 Charles Simonyi(匈牙利人的后裔)提出。結(jié)構(gòu):數(shù)據(jù)

26、類型+駱駝式變量名或函數(shù)名前要加上,一個或兩個字符的前綴,用來表示變量或函數(shù)的數(shù)據(jù)類型; 后部分用駱駝式命名法。 MS Windows ,Visual Basic ,Office等 大量使用了匈牙利命名法或其變體。計算機網(wǎng)絡(luò)課件 制作人:謝希仁數(shù)據(jù)類型前綴舉例charchchTextintiiAgefloatffAveragestringsz, strszInputString()classccStudent匈牙利式命名法匈牙利式命名法(數(shù)據(jù)類型數(shù)據(jù)類型+駱駝式方法駱駝式方法)例子例子課件制作人:謝希仁2.程序的注釋程序的注釋 l夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。l注

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

28、計者,復審者,復審日期,修改日期及有關(guān)說明等。課件制作人:謝希仁l功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。而不要解釋下面怎么做。l例如, /* ADD AMOUNT TO TOTAL */ TOTAL = AMOUNTTOTAL不好。課件制作人:謝希仁l如果注明把月銷售額計入年度總額,便使讀者理解了下面語句的意圖: /* ADD MONTHLY-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNTTOTALl要點u 描述一段程序,而不是每一個語句;u 用縮進和空行,使程序與注釋容易區(qū)別;u 注釋要正確。課件制作人

29、:謝希仁3.視覺組織視覺組織 空格、空行和移行空格、空行和移行l(wèi)恰當?shù)乩每崭?,可以突出運算的優(yōu)先性,避免發(fā)生運算的錯誤。l例如 ,將表達式(A17)ANDNOT(B49)ORC寫成(A17) AND NOT (B49) OR Cl自然的程序段之間可用空行隔開;課件制作人:謝希仁l移行也叫做向右縮格。它是指程序中的各行不必都在左端對齊,都從第一格起排列。這樣做使程序完全分不清層次關(guān)系。l對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。l例如,兩重選擇結(jié)構(gòu)嵌套,寫成下面的移行形式,層次就清楚得多。課件制作人:謝希仁 IF() THEN IF() THEN E

30、LSE ENDIF ELSE ENDIF課件制作人:謝希仁8-1.3.2數(shù)據(jù)說明數(shù)據(jù)說明l在設(shè)計階段已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復雜性。在編寫程序時,則需要注意數(shù)據(jù)說明的風格。l為了使程序中數(shù)據(jù)說明更易于理解和維護,必須注意以下幾點。 1.數(shù)據(jù)說明的次序應(yīng)當規(guī)范化 2.說明語句中變量安排有序化 3.使用注釋說明復雜數(shù)據(jù)結(jié)構(gòu)課件制作人:謝希仁1.數(shù)據(jù)說明的次序應(yīng)當規(guī)范化數(shù)據(jù)說明的次序應(yīng)當規(guī)范化l數(shù)據(jù)說明次序規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測試,排錯和維護。l原則上,數(shù)據(jù)說明的次序與語法無關(guān),其次序是任意的。但出于閱讀、理解和維護的需要,最好使其規(guī)范化,使說明的先后次序固定。課件制作人:謝希仁

31、l 例如,程序中數(shù)據(jù)說明次序 常量說明 簡單變量類型說明 數(shù)組說明 公用數(shù)據(jù)塊說明 所有的文件說明l 在類型說明中還可進一步要求。例如, 可按如下順序排列: 整型量說明 實型量說明 字符量說明 邏輯量說明課件制作人:謝希仁2.說明語句中變量安排有序化說明語句中變量安排有序化l當多個變量名在一個說明語句中說明時,應(yīng)當對這些變量按字母的順序排列。帶標號的全稱數(shù)據(jù)也應(yīng)當按字母的順序排列。l例如,把 integer size, length, width, cost, price寫成 integer cost, length, price , size, width 課件制作人:謝希仁3.使用注釋說明

32、復雜數(shù)據(jù)結(jié)構(gòu)使用注釋說明復雜數(shù)據(jù)結(jié)構(gòu)l如果設(shè)計了一個復雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當使用注釋來說明在程序?qū)崿F(xiàn)時這個數(shù)據(jù)結(jié)構(gòu)的固有特點。l例如, 對鏈表結(jié)構(gòu)和用戶自定義的數(shù)據(jù)類型,都應(yīng)當在注釋中做必要的補充說明。課件制作人:謝希仁8-1.3.3語句結(jié)構(gòu)語句結(jié)構(gòu) 在設(shè)計階段確定了軟件的邏輯流結(jié)構(gòu),但構(gòu)造單個語句則是編碼階段的任務(wù)。語句構(gòu)造力求簡單,直接,不能為了片面追求效率而使語句復雜化。課件制作人:謝希仁1. 在一行內(nèi)只寫一條語句在一行內(nèi)只寫一條語句l在一行內(nèi)只寫一條語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。l許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性變差。因而不可

33、取。課件制作人:謝希仁l例如,有一段排序程序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;l由于一行中包括了多個語句,掩蓋了程序的循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu),使其可讀性變得很差。課件制作人:謝希仁FOR I:=1 TO N- -1 DO / BEGIN T:=I; FOR J:=I1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WOR

34、K; END END;課件制作人:謝希仁2.程序編寫首先應(yīng)當考慮清晰性程序編寫首先應(yīng)當考慮清晰性l程序編寫首先應(yīng)當考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。l例如,有程序段: AI:=AIAT; AT:=AIAT; AI:=AIAT;課件制作人:謝希仁 l此段程序可能不易看懂,有時還需用實際數(shù)據(jù)試驗一下。l實際上,這段程序的功能就是交換AI和AT中的內(nèi)容。目的是為了節(jié)省一個工作單元。如果改一下: WORK:=AT; AT:=AI; AI:=WORK;就能讓讀者一目了然了。課件制作人:謝希仁3.程序要能直截了當?shù)卣f明程序程序要能直截了當?shù)卣f明程序員的用意員的用意 程序編寫得要簡單,寫

35、清楚,直截了當?shù)卣f明程序員的用意。例如, for(i=1;i=n;i+) for(j=1;j=n;j+) V(i, j) (ij) * (ij) 除法運算()在除數(shù)和被除數(shù)都是整型量時,其結(jié)果只取整數(shù)部分,而得到整型量。課件制作人:謝希仁 當IJ時, I / J = 0 當JI時, J / I = 0 得到的數(shù)組 當IJ時 V(I, J) = (IJ) * (JI) = 0 當IJ時 V(I, J) = (IJ) * (JI) = 1這樣得到的結(jié)果V是一個單位矩陣。課件制作人:謝希仁寫成以下的形式,就能讓讀者直接了解程序編寫者的意圖。 DO 5 I1,N DO 5 J1,N IF ( I .E

36、Q. J ) THEN V( I, J ) 1.0 ELSE V( I, J ) 0.0 ENDIF 5 CONTINUE課件制作人:謝希仁4.除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。不要為了追求效率而喪失了清晰性。事實上,程序效率的提高主要應(yīng)通過選擇高效的算法來實現(xiàn)。5.首先要保證程序正確,然后才要求提高速度。反過來說,在使程序高速運行時,首先要保證它是正確的。課件制作人:謝希仁6.避免使用臨時變量而使可讀性下降。例如,有的程序員為了追求效率,往往喜歡把表達式 AI1AI;寫成 AIAI; XAI1AI;這樣將一句分成兩句寫,會產(chǎn)生意想不到的問題。7.讓編譯程序做簡單的優(yōu)化

37、。8.盡可能使用庫函數(shù)課件制作人:謝希仁10. 避免使用空的ELSE語句和IF THEN IF的語句。這種結(jié)構(gòu)容 易使讀者產(chǎn)生誤解。例如, IF ( CHARA ) THEN IF ( CHARZ ) THEN PRINT “This is a letter?!?ELSE PRINT “This is not a letter。” 可能產(chǎn)生二義性問題。 課件制作人:謝希仁11.避免采用過于復雜的條件測試。12.盡量減少使用“否定”條件的條件語句。例如,如果在程序中出現(xiàn) IF NOT ( ( CHAR0 ) OR ( CHAR9 ) ) THEN 改成 IF ( CHAR0 ) AND ( CH

38、AR9 ) THEN 不要讓讀者繞彎子想。13. 盡可能用通俗易懂的偽碼來描述程序的流程,然后再翻譯成必須使用的語言。14. 數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡化。課件制作人:謝希仁15. 要模塊化,使模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。16. 利用信息隱蔽,確保每一個模塊的獨立性。17. 從數(shù)據(jù)出發(fā)去構(gòu)造程序。18. 不要修補不好的程序,要重新編寫。也不要一味地追求代碼的復用,要重新組織。19. 對太大的程序,要分塊編寫、測試,然后再集成。20. 對遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過程。課件制作人:謝希仁8-1.3.4輸入和輸出輸入和輸出l輸入和輸出信息是與用戶的使用直接相關(guān)的。輸入和輸出的

39、方式和格式應(yīng)當盡可能方便用戶的使用。一定要避免因設(shè)計不當給用戶帶來的麻煩。l因此,在軟件需求分析階段和設(shè)計階段,就應(yīng)基本確定輸入和輸出的風格。系統(tǒng)能否被用戶接受,有時就取決于輸入和輸出的風格。課件制作人:謝希仁 不論是批處理的輸入輸出方式,還是交互式的輸入輸出方式,在設(shè)計和程序 編碼時都應(yīng)考慮下列原則: 1. 對所有的輸入數(shù)據(jù)都要進行檢驗,識別錯誤的輸入,以保證每個數(shù)據(jù)的有效性;2. 檢查輸入項的各種重要組合的合理性,必要時報告輸入狀態(tài)信息;3. 使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式;輸入和輸出的風格輸入和輸出的風格課件制作人:謝希仁 4. 輸入數(shù)據(jù)時,應(yīng)允許使用自由格式輸入;

40、 5. 應(yīng)允許缺省值; 6. 輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目; 7. 在交互式輸入時,要在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍。同時,在數(shù)據(jù)輸入的過程中和輸入結(jié)束時,也要在屏幕上給出狀態(tài)信息;課件制作人:謝希仁 8. 當程序設(shè)計語言對輸入輸出格式有嚴格要求時,應(yīng)保持輸入格式與輸入語句的要求的一致性;9. 給所有的輸出加注解,并設(shè)計輸出報表格式。 輸入輸出風格還受到許多其它因素的影響。如輸入輸出設(shè)備(例如終端的類型,圖形設(shè)備,數(shù)字化轉(zhuǎn)換設(shè)備等)、用戶的熟練程度、以及通信環(huán)境等。課件制作人:謝希仁8-1.3.5效率效率l程序運

41、行時間l存儲效率l輸入/輸出效率 首先,效率是性能要求,因此應(yīng)該在需求分析階段確定效率方面的要求。其次,效率是靠好設(shè)計來提高的。第三,程序的效率和程序的簡單程度是一致的課件制作人:謝希仁 盡可能簡化有關(guān)的算術(shù)表達式和邏輯表達式;盡量采用整數(shù)算術(shù)表達式和布爾表達式盡可能將某些語句或表達式移到循環(huán)外面;避免使用多維數(shù)組;避免使用指針和復雜的鏈表;避免在表達式中出現(xiàn)數(shù)據(jù)類型的混雜;采用“快速”的算術(shù)運算;選用等效的高效率算法;設(shè)計向程序轉(zhuǎn)換過程中的指導原則設(shè)計向程序轉(zhuǎn)換過程中的指導原則課件制作人:謝希仁8-1.4 編碼工具編碼工具 為了高效低成本地生產(chǎn)出高度可靠的程序代碼,人們研究出一類特殊的程序,

42、使用它們能減輕人的勞動,提高編碼效率和可靠性。 集成編譯程序VS.Net、 Eclipse、JBuilder、 Delphi 代碼管理工具 ClearCase LT ,VCF,WinCVS ,SCCS,RCS等課件制作人:謝希仁代碼管理工具作用l“即使你的團隊只有你一個人,你的項目只需一周的時間;l即使那是用過就扔的原型;l即使你的工作并非源碼;l確保每樣東西都處在源碼控制之下文檔、電話號碼表、給供應(yīng)商的備忘錄、makefile、構(gòu)建與發(fā)布流程、燒制CD 的shell 腳本-每樣東西?!背绦騿T修練之道課件制作人:謝希仁代碼管理工具作用大型軟件開發(fā)項目通常有許多程序員參加編碼;程序代碼往往分散在

43、許多不同的文件或庫中;在不同時期會產(chǎn)生出同一個系統(tǒng)的許多不同版本,這些不同的版本分別適合于不同環(huán)境的需要;與大型軟件系統(tǒng)相聯(lián)系的主要問題記錄程序開發(fā)和維護的歷程確定模塊間的相互依賴關(guān)系保證同一個系統(tǒng)的不同版本中公共代碼的一致性課件制作人:謝希仁The Problem to Avoid 課件制作人:謝希仁The Lock-Modify-Unlock Solution 課件制作人:謝希仁代碼管理工具CVS(并行版本系統(tǒng),Concurrent Version System)l在一臺服務(wù)器上建立一個倉庫,倉庫里可以存放許多不同項目的源程序。由倉庫管理員統(tǒng)一管理這些源程序。l每個用戶在使用倉庫之前,首先

44、要把倉庫里的項目文件下載到本地。用戶做的任何修改首先都是在本地進行,然后用 cvs 命令進行提交,由 cvs 倉庫管理員統(tǒng)一 修改。l可以做到跟蹤文件變化,沖突控制【參考資料】http:/ 課件制作人:謝希仁The Copy-Modify-Merge Solution 課件制作人:謝希仁課件制作人:謝希仁代碼管理工具subversion、TortoiseSVN【參考資料】http:/ 課件制作人:謝希仁程序員的八種級別n第一級 糟糕的程序員 n這類程序員不知道為什么就走上了編程這條路,他們甚至連最基本的編程經(jīng)驗和能力都沒有。所有被他們碰過的事情都需要他們的同事重頭再返工一遍,他們根本不就是程序員。程序員這個職位對于他們可能就是一個錯誤。 課件制作人:謝希仁n第二級 不知名的程序員 n這一級的程序員是典型的

溫馨提示

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

評論

0/150

提交評論