軟件工程基礎(chǔ)之程序?qū)崿F(xiàn)ppt課件_第1頁(yè)
軟件工程基礎(chǔ)之程序?qū)崿F(xiàn)ppt課件_第2頁(yè)
軟件工程基礎(chǔ)之程序?qū)崿F(xiàn)ppt課件_第3頁(yè)
軟件工程基礎(chǔ)之程序?qū)崿F(xiàn)ppt課件_第4頁(yè)
軟件工程基礎(chǔ)之程序?qū)崿F(xiàn)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、程序設(shè)計(jì)語(yǔ)言的特點(diǎn)程序設(shè)計(jì)語(yǔ)言的特點(diǎn)1程序的效率程序的效率 3良好的編程習(xí)慣良好的編程習(xí)慣2小結(jié)小結(jié)4培養(yǎng)良好的培養(yǎng)良好的編程習(xí)慣編程習(xí)慣理解編程規(guī)理解編程規(guī)范范了解選擇程了解選擇程序設(shè)計(jì)語(yǔ)言序設(shè)計(jì)語(yǔ)言的一般原則的一般原則 程序編碼就好比建筑程序編碼就好比建筑工程中最基礎(chǔ)的砌磚工程中最基礎(chǔ)的砌磚和泥工作一樣是工程和泥工作一樣是工程的基礎(chǔ)的基礎(chǔ), ,是設(shè)計(jì)的具體是設(shè)計(jì)的具體實(shí)施。實(shí)施。引言引言不同不同 瓷磚特點(diǎn)瓷磚特點(diǎn),砌磚風(fēng)格砌磚風(fēng)格,砌墻的手藝砌墻的手藝,砌墻的規(guī)范砌墻的規(guī)范 程序語(yǔ)言特點(diǎn)程序語(yǔ)言特點(diǎn),編程風(fēng)格編程風(fēng)格,編程基本功編程基本功,編程規(guī)范編程規(guī)范手藝太差了手藝太差了,還不規(guī)范還不

2、規(guī)范手藝不錯(cuò),規(guī)范手藝不錯(cuò),規(guī)范屋里的墻屋里的墻磚的應(yīng)用不合適磚的應(yīng)用不合適 程序設(shè)計(jì)語(yǔ)言是:人與計(jì)算機(jī)通信的最基本工具程序設(shè)計(jì)語(yǔ)言是:人與計(jì)算機(jī)通信的最基本工具。 程序設(shè)計(jì)語(yǔ)言的特性不可避免地會(huì)影響開(kāi)發(fā)人員程序設(shè)計(jì)語(yǔ)言的特性不可避免地會(huì)影響開(kāi)發(fā)人員的思路和解決問(wèn)題的方式,會(huì)影響代碼的可理解的思路和解決問(wèn)題的方式,會(huì)影響代碼的可理解性和可維護(hù)性。性和可維護(hù)性。 編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)木幘幋a之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)木幊陶Z(yǔ)言。程語(yǔ)言。 COBOLCOBOL語(yǔ)言:數(shù)據(jù)處理程序語(yǔ)言:數(shù)據(jù)處理程序 PHPPHP語(yǔ)言:專門用來(lái)編寫(xiě)網(wǎng)頁(yè)處理程序語(yǔ)言:專門用來(lái)編寫(xiě)網(wǎng)頁(yè)處理程序 P

3、erlPerl語(yǔ)言:更適合文本處理語(yǔ)言:更適合文本處理 C C語(yǔ)言:被廣泛用于系統(tǒng)軟件開(kāi)發(fā)語(yǔ)言:被廣泛用于系統(tǒng)軟件開(kāi)發(fā) JAVAJAVA語(yǔ)言:用于跨平臺(tái)的應(yīng)用軟件開(kāi)發(fā)等等。語(yǔ)言:用于跨平臺(tái)的應(yīng)用軟件開(kāi)發(fā)等等。 一旦確定了軟件需求之后,待選用的一旦確定了軟件需求之后,待選用的程序設(shè)計(jì)語(yǔ)言的技術(shù)特性就顯得非常程序設(shè)計(jì)語(yǔ)言的技術(shù)特性就顯得非常重要了。重要了。 如果需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),就要仔細(xì)如果需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),就要仔細(xì)衡量有哪些語(yǔ)言能提供這些復(fù)雜的數(shù)衡量有哪些語(yǔ)言能提供這些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)描述。據(jù)結(jié)構(gòu)描述。 如果軟件要求高性能及實(shí)時(shí)處理能力如果軟件要求高性能及實(shí)時(shí)處理能力,就該選用適合于實(shí)時(shí)處理的

4、語(yǔ)言,就該選用適合于實(shí)時(shí)處理的語(yǔ)言,如如C C或匯編語(yǔ)言?;騾R編語(yǔ)言。 如果應(yīng)用有許多輸出報(bào)告或繁雜的文如果應(yīng)用有許多輸出報(bào)告或繁雜的文件處理,則選用件處理,則選用PowerBuilderPowerBuilder、DelphiDelphi或或SQLSQL比較合適。比較合適。 所有程序語(yǔ)言的基本成分都可歸納為所有程序語(yǔ)言的基本成分都可歸納為4 4種:種: 數(shù)據(jù)成分:指明該語(yǔ)言能接受的數(shù)據(jù),如數(shù)據(jù)成分:指明該語(yǔ)言能接受的數(shù)據(jù),如各種類型的變量、數(shù)組、指針、記錄等。各種類型的變量、數(shù)組、指針、記錄等。作為程序操作的對(duì)象,具有名稱、類型和作為程序操作的對(duì)象,具有名稱、類型和作用域等特征。使用前要對(duì)這些

5、特征加以作用域等特征。使用前要對(duì)這些特征加以說(shuō)明,數(shù)據(jù)名稱由用戶通過(guò)標(biāo)識(shí)符命名,說(shuō)明,數(shù)據(jù)名稱由用戶通過(guò)標(biāo)識(shí)符命名,類型是說(shuō)明數(shù)據(jù)需占用多少存儲(chǔ)單元和存類型是說(shuō)明數(shù)據(jù)需占用多少存儲(chǔ)單元和存放形式,作用域說(shuō)明數(shù)據(jù)可被使用的范圍放形式,作用域說(shuō)明數(shù)據(jù)可被使用的范圍。 運(yùn)算成分:指明該語(yǔ)言可執(zhí)行的運(yùn)算,如運(yùn)算成分:指明該語(yǔ)言可執(zhí)行的運(yùn)算,如+ +,- -,* *、/ / 控制成分:順序結(jié)構(gòu)、條件選擇結(jié)構(gòu)和循控制成分:順序結(jié)構(gòu)、條件選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)環(huán)結(jié)構(gòu) 傳輸成分:數(shù)據(jù)的傳輸方法,例如輸入、傳輸成分:數(shù)據(jù)的傳輸方法,例如輸入、輸出函數(shù)輸出函數(shù)名字聲明名字聲明類型聲明類型聲明初始化初始化程序變量的局部

6、性程序變量的局部性程序模塊的獨(dú)立性程序模塊的獨(dú)立性循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)異常處理異常處理獨(dú)立編譯獨(dú)立編譯 預(yù)先說(shuō)明程序中所使用的變量名字,編譯程序能預(yù)先說(shuō)明程序中所使用的變量名字,編譯程序能夠檢查程序中出現(xiàn)的名字的合法性,從而幫助程夠檢查程序中出現(xiàn)的名字的合法性,從而幫助程序員發(fā)現(xiàn)和改正程序中的錯(cuò)誤。序員發(fā)現(xiàn)和改正程序中的錯(cuò)誤。 但是,有些語(yǔ)言不要求顯式地聲明程序中所使用但是,有些語(yǔ)言不要求顯式地聲明程序中所使用的變量名稱,它把變量第一次出現(xiàn)時(shí)使用的名字的變量名稱,它把變量第一次出現(xiàn)時(shí)使用的名字看做對(duì)這個(gè)變量的聲明。這樣做可能會(huì)引入一些看做對(duì)這個(gè)變量的聲明。這樣做可能會(huì)引入一些很難發(fā)

7、現(xiàn)的錯(cuò)誤,并且可能會(huì)產(chǎn)生嚴(yán)重后果。很難發(fā)現(xiàn)的錯(cuò)誤,并且可能會(huì)產(chǎn)生嚴(yán)重后果。 變量的類型聲明確定一個(gè)變量的使用方式,有了類型聲明變量的類型聲明確定一個(gè)變量的使用方式,有了類型聲明,編譯程序就能夠很容易地發(fā)現(xiàn)程序中某個(gè)特定類型的變,編譯程序就能夠很容易地發(fā)現(xiàn)程序中某個(gè)特定類型的變量使用不當(dāng)?shù)腻e(cuò)誤。有些語(yǔ)言不要求顯式的類型聲明,例量使用不當(dāng)?shù)腻e(cuò)誤。有些語(yǔ)言不要求顯式的類型聲明,例如如FORTRANFORTRAN語(yǔ)言規(guī)定,名字的第一個(gè)字母決定它的類型,語(yǔ)言規(guī)定,名字的第一個(gè)字母決定它的類型,但是一旦顯式地聲明了一個(gè)變量的類型,則以顯式聲明為但是一旦顯式地聲明了一個(gè)變量的類型,則以顯式聲明為該變量的類型

8、。這很容易造成閱讀時(shí)的混淆。該變量的類型。這很容易造成閱讀時(shí)的混淆。 現(xiàn)代的大多數(shù)高級(jí)語(yǔ)言都有自定義類型,即允許開(kāi)發(fā)人員現(xiàn)代的大多數(shù)高級(jí)語(yǔ)言都有自定義類型,即允許開(kāi)發(fā)人員定義與特定應(yīng)用相關(guān)的類型,并且可以用自定義類型嵌套定義與特定應(yīng)用相關(guān)的類型,并且可以用自定義類型嵌套定義新的類型。例如,可以定義記錄、鏈表、二叉樹(shù)等復(fù)定義新的類型。例如,可以定義記錄、鏈表、二叉樹(shù)等復(fù)雜的結(jié)構(gòu)類型。雜的結(jié)構(gòu)類型。 程序設(shè)計(jì)語(yǔ)言中的類型說(shuō)明不僅僅是一種安全措施,還是程序設(shè)計(jì)語(yǔ)言中的類型說(shuō)明不僅僅是一種安全措施,還是一種重要的抽象機(jī)制。一種重要的抽象機(jī)制。 程序設(shè)計(jì)中最常見(jiàn)的錯(cuò)誤之一就是在使用變量之程序設(shè)計(jì)中最常見(jiàn)

9、的錯(cuò)誤之一就是在使用變量之前沒(méi)有對(duì)變量進(jìn)行初始化。為了減少發(fā)生錯(cuò)誤的前沒(méi)有對(duì)變量進(jìn)行初始化。為了減少發(fā)生錯(cuò)誤的可能性,應(yīng)該強(qiáng)迫程序員對(duì)程序中所使用的變量可能性,應(yīng)該強(qiáng)迫程序員對(duì)程序中所使用的變量進(jìn)行初始化。進(jìn)行初始化。 另一個(gè)辦法是在說(shuō)明變量時(shí)由系統(tǒng)給變量賦予一另一個(gè)辦法是在說(shuō)明變量時(shí)由系統(tǒng)給變量賦予一個(gè)特殊的標(biāo)識(shí),表明它尚未初始化,以后如果沒(méi)個(gè)特殊的標(biāo)識(shí),表明它尚未初始化,以后如果沒(méi)給這個(gè)變量賦值就企圖使用它,系統(tǒng)會(huì)發(fā)出報(bào)警給這個(gè)變量賦值就企圖使用它,系統(tǒng)會(huì)發(fā)出報(bào)警信號(hào)。信號(hào)。 程序設(shè)計(jì)的一般原則是變量的名字應(yīng)程序設(shè)計(jì)的一般原則是變量的名字應(yīng)該在靠近使用它的地方引入,并且應(yīng)該在靠近使用它的地

10、方引入,并且應(yīng)該只有程序中真正需要它的那些部分該只有程序中真正需要它的那些部分才能夠訪問(wèn)它。才能夠訪問(wèn)它。 通常有兩種提供局部變量的途徑:?jiǎn)瓮ǔS袃煞N提供局部變量的途徑:?jiǎn)螌泳植啃院投鄬泳植啃詫泳植啃院投鄬泳植啃?。PROGRAM TESTPROGRAM TESTPROCEDURE APROCEDURE A()()VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;PROCEDURE BPROCEDURE B()()VAR VAR ARRAY A20A

11、RRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;END.END.程序中過(guò)程程序中過(guò)程A和和B內(nèi)的變量?jī)?nèi)的變量是單層局部性的,兩個(gè)過(guò)是單層局部性的,兩個(gè)過(guò)程中聲明的變量的作用范程中聲明的變量的作用范圍局限于所在的過(guò)程。圍局限于所在的過(guò)程。 PROGRAM TESTPROGRAM TESTPROCEDURE APROCEDURE A()()VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J,K K:INTEG

12、ERINTEGER;PROCEDURE BPROCEDURE B()() VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;BEGINBEGIN ENDEND; 程序的結(jié)構(gòu)是多層的,模塊程序的結(jié)構(gòu)是多層的,模塊A中聲明的變中聲明的變量與模塊量與模塊B中聲明的變量除了變量中聲明的變量除了變量K之外全之外全部相同。內(nèi)層模塊部相同。內(nèi)層模塊B中有意義的變量是屬于中有意義的變量是屬于該模塊的該模塊的A,B,WORK,I,J和屬于外和屬于外層模塊的變量層模塊的

13、變量K。 要盡量避免內(nèi)層模塊與外層模塊定義相同要盡量避免內(nèi)層模塊與外層模塊定義相同的變量名,容易引起差錯(cuò),給維護(hù)人員理解的變量名,容易引起差錯(cuò),給維護(hù)人員理解代碼帶來(lái)很多困難代碼帶來(lái)很多困難 結(jié)構(gòu)化語(yǔ)言提供了控制局部變量可見(jiàn)性的某些手段,主要結(jié)構(gòu)化語(yǔ)言提供了控制局部變量可見(jiàn)性的某些手段,主要是在較內(nèi)層程序模塊中定義的變量不能被較外層的程序塊是在較內(nèi)層程序模塊中定義的變量不能被較外層的程序塊訪問(wèn)。訪問(wèn)。 由于動(dòng)態(tài)存儲(chǔ)分配的緣故,在兩次調(diào)用一個(gè)程序塊的間隔由于動(dòng)態(tài)存儲(chǔ)分配的緣故,在兩次調(diào)用一個(gè)程序塊的間隔中不能夠保存局部變量的值。因此,即使只有一兩個(gè)子程中不能夠保存局部變量的值。因此,即使只有一兩

14、個(gè)子程序使用的變量,如果需要在兩次調(diào)用這些子程序的過(guò)程中序使用的變量,如果需要在兩次調(diào)用這些子程序的過(guò)程中保存這個(gè)變量的值,也必須把這個(gè)變量說(shuō)明成全局的,這保存這個(gè)變量的值,也必須把這個(gè)變量說(shuō)明成全局的,這將增加維護(hù)時(shí)發(fā)生差錯(cuò)的可能性。因此現(xiàn)在大多數(shù)語(yǔ)言提將增加維護(hù)時(shí)發(fā)生差錯(cuò)的可能性。因此現(xiàn)在大多數(shù)語(yǔ)言提供了靜態(tài)變量,這種變量可以保存前次調(diào)用時(shí)的數(shù)據(jù),解供了靜態(tài)變量,這種變量可以保存前次調(diào)用時(shí)的數(shù)據(jù),解決了多次調(diào)用一個(gè)模塊時(shí)局部變量不能保存的問(wèn)題。決了多次調(diào)用一個(gè)模塊時(shí)局部變量不能保存的問(wèn)題。 最常見(jiàn)的循環(huán)結(jié)構(gòu)有最常見(jiàn)的循環(huán)結(jié)構(gòu)有forfor語(yǔ)句、語(yǔ)句、while-dowhile-do語(yǔ)句和語(yǔ)

15、句和repeat-untilrepeat-until語(yǔ)句,這些語(yǔ)言都是在循環(huán)體外判斷循環(huán)條件。語(yǔ)句,這些語(yǔ)言都是在循環(huán)體外判斷循環(huán)條件。 有許多場(chǎng)合需要在循環(huán)體內(nèi)的任意一點(diǎn)測(cè)試循環(huán)結(jié)束條件有許多場(chǎng)合需要在循環(huán)體內(nèi)的任意一點(diǎn)測(cè)試循環(huán)結(jié)束條件,如果使用,如果使用if-then-elseif-then-else語(yǔ)句和附加的布爾變量實(shí)現(xiàn)這個(gè)要語(yǔ)句和附加的布爾變量實(shí)現(xiàn)這個(gè)要求,則將增加程序長(zhǎng)度并且降低程序的可讀性。求,則將增加程序長(zhǎng)度并且降低程序的可讀性。 某些程序設(shè)計(jì)語(yǔ)言考慮到上述要求,適當(dāng)?shù)亟鉀Q了這個(gè)問(wèn)某些程序設(shè)計(jì)語(yǔ)言考慮到上述要求,適當(dāng)?shù)亟鉀Q了這個(gè)問(wèn)題。題。 exit exit(標(biāo)識(shí)符)(標(biāo)識(shí)符)

16、whenwhen條件)條件) 這個(gè)語(yǔ)句把控制轉(zhuǎn)移到這個(gè)語(yǔ)句把控制轉(zhuǎn)移到循環(huán)語(yǔ)句后面的一條語(yǔ)句或轉(zhuǎn)移到由標(biāo)識(shí)符指定的語(yǔ)句上循環(huán)語(yǔ)句后面的一條語(yǔ)句或轉(zhuǎn)移到由標(biāo)識(shí)符指定的語(yǔ)句上 。 簡(jiǎn)單的分支語(yǔ)句一般不會(huì)出現(xiàn)問(wèn)題,簡(jiǎn)單的分支語(yǔ)句一般不會(huì)出現(xiàn)問(wèn)題,但是多分支的但是多分支的casecase型語(yǔ)句注意以下型語(yǔ)句注意以下2 2個(gè)個(gè)問(wèn)題:?jiǎn)栴}: 如果如果casecase表達(dá)式取的值不在預(yù)先指定表達(dá)式取的值不在預(yù)先指定的范圍內(nèi),需要用缺省方式處理。的范圍內(nèi),需要用缺省方式處理。 在某些程序設(shè)計(jì)語(yǔ)言中,由在某些程序設(shè)計(jì)語(yǔ)言中,由casecase表達(dá)表達(dá)式選定的執(zhí)行語(yǔ)句取決于所有可能執(zhí)式選定的執(zhí)行語(yǔ)句取決于所有可能

17、執(zhí)行的語(yǔ)句排列順序,如果語(yǔ)句順序排行的語(yǔ)句排列順序,如果語(yǔ)句順序排列錯(cuò)了,編譯和運(yùn)行時(shí)系統(tǒng)是不會(huì)發(fā)列錯(cuò)了,編譯和運(yùn)行時(shí)系統(tǒng)是不會(huì)發(fā)現(xiàn)這類錯(cuò)誤的?,F(xiàn)這類錯(cuò)誤的。 程序運(yùn)行過(guò)程中發(fā)生的錯(cuò)誤或意外事件稱為異常程序運(yùn)行過(guò)程中發(fā)生的錯(cuò)誤或意外事件稱為異常。 以前大多數(shù)程序設(shè)計(jì)語(yǔ)言在檢測(cè)和處理異常方面以前大多數(shù)程序設(shè)計(jì)語(yǔ)言在檢測(cè)和處理異常方面幾乎沒(méi)有給程序員提供任何幫助,程序員只能使幾乎沒(méi)有給程序員提供任何幫助,程序員只能使用條件控制檢測(cè)異常,在發(fā)生異常時(shí)把控制轉(zhuǎn)移用條件控制檢測(cè)異常,在發(fā)生異常時(shí)把控制轉(zhuǎn)移到處理異常的程序段。但是,到處理異常的程序段。但是,JAVAJAVA等一些語(yǔ)言提等一些語(yǔ)言提供了異常

18、處理機(jī)制,程序員可以很容易地利用語(yǔ)供了異常處理機(jī)制,程序員可以很容易地利用語(yǔ)言提供的異常處理機(jī)制實(shí)現(xiàn)錯(cuò)誤和異常的處理操言提供的異常處理機(jī)制實(shí)現(xiàn)錯(cuò)誤和異常的處理操作。作。 獨(dú)立編譯意味著能夠分別編譯各個(gè)程序單元,然獨(dú)立編譯意味著能夠分別編譯各個(gè)程序單元,然后再把它們集成為一個(gè)完整的程序。后再把它們集成為一個(gè)完整的程序。 一個(gè)大程序通常由許多程序單元組成,如果修改一個(gè)大程序通常由許多程序單元組成,如果修改了其中任何一個(gè)程序單元都需要重新編譯整個(gè)程了其中任何一個(gè)程序單元都需要重新編譯整個(gè)程序,將大大增加程序開(kāi)發(fā)、調(diào)試和維護(hù)的成本;序,將大大增加程序開(kāi)發(fā)、調(diào)試和維護(hù)的成本; 反之,如果可以獨(dú)立編譯,則

19、只需要重新編譯修反之,如果可以獨(dú)立編譯,則只需要重新編譯修改了的程序單元,然后重新連接整個(gè)程序即可。改了的程序單元,然后重新連接整個(gè)程序即可。獨(dú)立編譯的機(jī)制對(duì)于開(kāi)發(fā)大型系統(tǒng)極其重要。獨(dú)立編譯的機(jī)制對(duì)于開(kāi)發(fā)大型系統(tǒng)極其重要。 某些語(yǔ)言帶有一些特別的功能,這些功能可實(shí)現(xiàn)某些語(yǔ)言帶有一些特別的功能,這些功能可實(shí)現(xiàn)一些特殊的設(shè)計(jì)。如一些特殊的設(shè)計(jì)。如MODULAMODULA語(yǔ)言和并發(fā)語(yǔ)言和并發(fā)PASCALPASCAL語(yǔ)言支持并發(fā)處理、以及必須彼此通信和協(xié)調(diào)的語(yǔ)言支持并發(fā)處理、以及必須彼此通信和協(xié)調(diào)的分布式進(jìn)程。因此適應(yīng)并發(fā)的和分布式處理的要分布式進(jìn)程。因此適應(yīng)并發(fā)的和分布式處理的要求。求。詳細(xì)設(shè)計(jì)能夠

20、直接地翻譯成程序代碼。詳細(xì)設(shè)計(jì)能夠直接地翻譯成程序代碼。源程序的可移植性。改善軟件可移植性的主要途徑是使語(yǔ)言標(biāo)準(zhǔn)化。源程序的可移植性。改善軟件可移植性的主要途徑是使語(yǔ)言標(biāo)準(zhǔn)化。對(duì)于可移植性要求的軟件,應(yīng)該嚴(yán)格遵守相應(yīng)的標(biāo)準(zhǔn)編寫(xiě)程序代碼,對(duì)于可移植性要求的軟件,應(yīng)該嚴(yán)格遵守相應(yīng)的標(biāo)準(zhǔn)編寫(xiě)程序代碼,不要圖一時(shí)的省事去使用語(yǔ)言的非標(biāo)準(zhǔn)特性。不要圖一時(shí)的省事去使用語(yǔ)言的非標(biāo)準(zhǔn)特性。編譯程序效率較高。編譯程序首先應(yīng)該支持獨(dú)立編譯,并且能夠發(fā)現(xiàn)編譯程序效率較高。編譯程序首先應(yīng)該支持獨(dú)立編譯,并且能夠發(fā)現(xiàn)盡可能多的程序代碼錯(cuò)誤,輔助程序員提高程序調(diào)試效率。盡可能多的程序代碼錯(cuò)誤,輔助程序員提高程序調(diào)試效率。

21、盡可能應(yīng)用代碼生成工具。許多語(yǔ)言都有與它相應(yīng)的編譯程序、連接盡可能應(yīng)用代碼生成工具。許多語(yǔ)言都有與它相應(yīng)的編譯程序、連接程序、調(diào)試程序、代碼格式化程序、交叉編譯程序、宏處理程序和標(biāo)程序、調(diào)試程序、代碼格式化程序、交叉編譯程序、宏處理程序和標(biāo)準(zhǔn)子程序庫(kù)等。對(duì)于提高效率是明智的選擇。準(zhǔn)子程序庫(kù)等。對(duì)于提高效率是明智的選擇??删S護(hù)性??删S護(hù)性的前提是代碼的可理解性,源程序的可讀性、語(yǔ)可維護(hù)性。可維護(hù)性的前提是代碼的可理解性,源程序的可讀性、語(yǔ)言的文檔化特性是影響可維護(hù)性的重要因素。言的文檔化特性是影響可維護(hù)性的重要因素。 按語(yǔ)言級(jí)別分類,有低級(jí)語(yǔ)言和高級(jí)語(yǔ)言之分按語(yǔ)言級(jí)別分類,有低級(jí)語(yǔ)言和高級(jí)語(yǔ)言之

22、分 按照用戶要求,有過(guò)程式語(yǔ)言和非過(guò)程式語(yǔ)言之分按照用戶要求,有過(guò)程式語(yǔ)言和非過(guò)程式語(yǔ)言之分 按照應(yīng)用范圍,有通用語(yǔ)言和專用語(yǔ)言之分按照應(yīng)用范圍,有通用語(yǔ)言和專用語(yǔ)言之分 按照使用方式,有交互式語(yǔ)言和非交互式語(yǔ)言之分按照使用方式,有交互式語(yǔ)言和非交互式語(yǔ)言之分 按照成分性質(zhì),有順序語(yǔ)言、并發(fā)語(yǔ)言和分布式語(yǔ)言之分按照成分性質(zhì),有順序語(yǔ)言、并發(fā)語(yǔ)言和分布式語(yǔ)言之分 第四代語(yǔ)言,有數(shù)據(jù)庫(kù)查詢語(yǔ)言第四代語(yǔ)言,有數(shù)據(jù)庫(kù)查詢語(yǔ)言DEV2000DEV2000、程序代碼生成、程序代碼生成器以及其他一些原型語(yǔ)言、形式化規(guī)格說(shuō)明語(yǔ)言等等。器以及其他一些原型語(yǔ)言、形式化規(guī)格說(shuō)明語(yǔ)言等等。低級(jí)語(yǔ)言:與特定計(jì)算機(jī)體系結(jié)

23、構(gòu)密切相關(guān),如機(jī)低級(jí)語(yǔ)言:與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān),如機(jī)器語(yǔ)言、匯編語(yǔ)言,特點(diǎn)是與機(jī)器有關(guān),功效高,器語(yǔ)言、匯編語(yǔ)言,特點(diǎn)是與機(jī)器有關(guān),功效高,但使用復(fù)雜、開(kāi)發(fā)費(fèi)時(shí)、難維護(hù)但使用復(fù)雜、開(kāi)發(fā)費(fèi)時(shí)、難維護(hù)高級(jí)語(yǔ)言:不與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān),表高級(jí)語(yǔ)言:不與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān),表示方法貼近于待解問(wèn)題,特點(diǎn)是在一定程度上與具示方法貼近于待解問(wèn)題,特點(diǎn)是在一定程度上與具體機(jī)器無(wú)關(guān),易學(xué)、易用、易維護(hù),但編譯后的目體機(jī)器無(wú)關(guān),易學(xué)、易用、易維護(hù),但編譯后的目標(biāo)程序的功效往往較低標(biāo)程序的功效往往較低過(guò)程式語(yǔ)言:通過(guò)指明一列可執(zhí)行的運(yùn)算及運(yùn)算次過(guò)程式語(yǔ)言:通過(guò)指明一列可執(zhí)行的運(yùn)算及運(yùn)算次序來(lái)

24、描述計(jì)算過(guò)程,如序來(lái)描述計(jì)算過(guò)程,如FORTRANFORTRAN、C C、JavaJava等等非過(guò)程式語(yǔ)言:不顯式指明處理過(guò)程細(xì)節(jié),在這種非過(guò)程式語(yǔ)言:不顯式指明處理過(guò)程細(xì)節(jié),在這種語(yǔ)言中盡量引入抽象度較高的非過(guò)程性描述手段,語(yǔ)言中盡量引入抽象度較高的非過(guò)程性描述手段,以期在程序中增加以期在程序中增加“做什么的描述成分,較少做什么的描述成分,較少“如何做的描述細(xì)節(jié),如第四代語(yǔ)言如何做的描述細(xì)節(jié),如第四代語(yǔ)言4GL4GL)、)、函數(shù)式語(yǔ)言、邏輯式語(yǔ)言。函數(shù)式語(yǔ)言、邏輯式語(yǔ)言。通用語(yǔ)言:目標(biāo)非單一的語(yǔ)言,如:通用語(yǔ)言:目標(biāo)非單一的語(yǔ)言,如:FORTRANFORTRAN、C C、JavaJava等等

25、專用語(yǔ)言:目標(biāo)單一的語(yǔ)言,如:自動(dòng)數(shù)控程序?qū)S谜Z(yǔ)言:目標(biāo)單一的語(yǔ)言,如:自動(dòng)數(shù)控程序APTAPT交互式語(yǔ)言:具有反映人機(jī)交互的語(yǔ)言,如:交互式語(yǔ)言:具有反映人機(jī)交互的語(yǔ)言,如:BASICBASIC非交互式語(yǔ)言:不反映人機(jī)交互的語(yǔ)言,如:非交互式語(yǔ)言:不反映人機(jī)交互的語(yǔ)言,如:FORTRANFORTRAN、COBOLCOBOL順序語(yǔ)言:只含順序成分的語(yǔ)言,如:順序語(yǔ)言:只含順序成分的語(yǔ)言,如:FORTRANFORTRAN、C C并發(fā)語(yǔ)言:含并發(fā)成分的語(yǔ)言,如:并發(fā)語(yǔ)言:含并發(fā)成分的語(yǔ)言,如:ModulaModula、AdaAda、并發(fā)并發(fā)PascalPascal分布語(yǔ)言:考慮分布式計(jì)算要求的語(yǔ)言

26、,如:分布語(yǔ)言:考慮分布式計(jì)算要求的語(yǔ)言,如:ModulaModula 在選擇與評(píng)價(jià)語(yǔ)言時(shí),首先要從應(yīng)用要求入手,在選擇與評(píng)價(jià)語(yǔ)言時(shí),首先要從應(yīng)用要求入手,對(duì)比各項(xiàng)要求的相對(duì)重要性,然后再根據(jù)這些要對(duì)比各項(xiàng)要求的相對(duì)重要性,然后再根據(jù)這些要求和相對(duì)重要性來(lái)選擇合適的編程語(yǔ)言。求和相對(duì)重要性來(lái)選擇合適的編程語(yǔ)言。 具體選擇的考慮:具體選擇的考慮: 編程人員的水平和編程經(jīng)歷編程人員的水平和編程經(jīng)歷 待開(kāi)發(fā)軟件的類型待開(kāi)發(fā)軟件的類型 算法和計(jì)算復(fù)雜性算法和計(jì)算復(fù)雜性 數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性 軟件的開(kāi)發(fā)成本和時(shí)間要求軟件的開(kāi)發(fā)成本和時(shí)間要求 軟件的可移植性要求軟件的可移植性要求 可用的軟件工

27、具可用的軟件工具 雖然程序員學(xué)習(xí)一門新的語(yǔ)言并不困難,雖然程序員學(xué)習(xí)一門新的語(yǔ)言并不困難,但是要熟練地掌握和精通一門語(yǔ)言是需要但是要熟練地掌握和精通一門語(yǔ)言是需要長(zhǎng)期的實(shí)踐開(kāi)發(fā)積累的。因此,在選擇語(yǔ)長(zhǎng)期的實(shí)踐開(kāi)發(fā)積累的。因此,在選擇語(yǔ)言時(shí)一定要考慮到時(shí)間限制和程序員掌握言時(shí)一定要考慮到時(shí)間限制和程序員掌握語(yǔ)言的程度,盡可能選擇一種程序員熟悉語(yǔ)言的程度,盡可能選擇一種程序員熟悉的語(yǔ)言。的語(yǔ)言。 待開(kāi)發(fā)軟件的類型可能不同,一般分為數(shù)據(jù)庫(kù)應(yīng)待開(kāi)發(fā)軟件的類型可能不同,一般分為數(shù)據(jù)庫(kù)應(yīng)用軟件、實(shí)時(shí)控制軟件、系統(tǒng)級(jí)軟件、人工智能用軟件、實(shí)時(shí)控制軟件、系統(tǒng)級(jí)軟件、人工智能類軟件、軍用軟件等等。根據(jù)軟件的類型

28、選擇合類軟件、軍用軟件等等。根據(jù)軟件的類型選擇合適的開(kāi)發(fā)語(yǔ)言,例如,適的開(kāi)發(fā)語(yǔ)言,例如,F(xiàn)ORTRANFORTRAN語(yǔ)言適合科學(xué)計(jì)語(yǔ)言適合科學(xué)計(jì)算,算,PowerBuilderPowerBuilder、DelphiDelphi、C#C#等語(yǔ)言適合于信等語(yǔ)言適合于信息系統(tǒng)的開(kāi)發(fā),息系統(tǒng)的開(kāi)發(fā),LISPLISP、PROLOGPROLOG語(yǔ)言適合于人工語(yǔ)言適合于人工智能領(lǐng)域。智能領(lǐng)域。 待開(kāi)發(fā)軟件算法的復(fù)雜性不同,應(yīng)該選擇合適的待開(kāi)發(fā)軟件算法的復(fù)雜性不同,應(yīng)該選擇合適的語(yǔ)言,例如,科學(xué)計(jì)算領(lǐng)域大都選擇語(yǔ)言,例如,科學(xué)計(jì)算領(lǐng)域大都選擇FORTRANFORTRAN,因?yàn)樗倪\(yùn)行性能比較好,但是當(dāng)今計(jì)算機(jī)

29、硬件因?yàn)樗倪\(yùn)行性能比較好,但是當(dāng)今計(jì)算機(jī)硬件的發(fā)展使得運(yùn)算速度已不再成為瓶頸,因此許多的發(fā)展使得運(yùn)算速度已不再成為瓶頸,因此許多計(jì)算型軟件普遍采用計(jì)算型軟件普遍采用C/CC/C言語(yǔ)。然而計(jì)算復(fù)言語(yǔ)。然而計(jì)算復(fù)雜度很高的軟件采用匯編語(yǔ)言、人工智能類的語(yǔ)雜度很高的軟件采用匯編語(yǔ)言、人工智能類的語(yǔ)言肯定是不合適的,前者編寫(xiě)代碼的工作復(fù)雜度言肯定是不合適的,前者編寫(xiě)代碼的工作復(fù)雜度太高,后者的運(yùn)行效率太低,并且這兩類語(yǔ)言的太高,后者的運(yùn)行效率太低,并且這兩類語(yǔ)言的科學(xué)計(jì)算庫(kù)都很少,可復(fù)用的軟件元素較少??茖W(xué)計(jì)算庫(kù)都很少,可復(fù)用的軟件元素較少。 有些語(yǔ)言,例如有些語(yǔ)言,例如FORTRANFORTRAN

30、、BASICBASIC語(yǔ)言,定義數(shù)語(yǔ)言,定義數(shù)據(jù)類型的能力非常差,一旦設(shè)計(jì)中有比較復(fù)雜的據(jù)類型的能力非常差,一旦設(shè)計(jì)中有比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),程序員實(shí)現(xiàn)時(shí)會(huì)感到很棘手。而數(shù)據(jù)結(jié)構(gòu),程序員實(shí)現(xiàn)時(shí)會(huì)感到很棘手。而PASCALPASCAL、JAVAJAVA之類的語(yǔ)言其數(shù)據(jù)結(jié)構(gòu)描述能力非之類的語(yǔ)言其數(shù)據(jù)結(jié)構(gòu)描述能力非常強(qiáng)大,為程序員創(chuàng)造了一個(gè)很廣闊的編程空間常強(qiáng)大,為程序員創(chuàng)造了一個(gè)很廣闊的編程空間。 不僅要考慮當(dāng)前的開(kāi)發(fā)成本,還要考慮今后的維不僅要考慮當(dāng)前的開(kāi)發(fā)成本,還要考慮今后的維護(hù)成本,如果選擇的語(yǔ)言很生僻,即使現(xiàn)在以很護(hù)成本,如果選擇的語(yǔ)言很生僻,即使現(xiàn)在以很快的速度開(kāi)發(fā)出來(lái),將來(lái)的維護(hù)工作量不

31、得不考快的速度開(kāi)發(fā)出來(lái),將來(lái)的維護(hù)工作量不得不考慮。慮。 如果目標(biāo)系統(tǒng)的運(yùn)行環(huán)境不能確定,例如,可能如果目標(biāo)系統(tǒng)的運(yùn)行環(huán)境不能確定,例如,可能運(yùn)行在小型機(jī)的運(yùn)行在小型機(jī)的UNIXUNIX操作系統(tǒng)上,也可能運(yùn)行在操作系統(tǒng)上,也可能運(yùn)行在大型機(jī)的大型機(jī)的OS/400OS/400操作系統(tǒng)上,甚至還要運(yùn)行在操作系統(tǒng)上,甚至還要運(yùn)行在PCPC機(jī)的機(jī)的WindowsWindows操作系統(tǒng)環(huán)境中,這時(shí)選擇的開(kāi)操作系統(tǒng)環(huán)境中,這時(shí)選擇的開(kāi)發(fā)語(yǔ)言最好是發(fā)語(yǔ)言最好是JAVAJAVA。這樣可以保證軟件的跨平臺(tái)。這樣可以保證軟件的跨平臺(tái)運(yùn)行。運(yùn)行。 選擇語(yǔ)言時(shí),特別是為大型軟件選擇語(yǔ)言時(shí),一選擇語(yǔ)言時(shí),特別是為大型軟

32、件選擇語(yǔ)言時(shí),一定要考慮可用的軟件工具。如果某種語(yǔ)言有支持定要考慮可用的軟件工具。如果某種語(yǔ)言有支持開(kāi)發(fā)的工具,則開(kāi)發(fā)和調(diào)試都會(huì)容易。開(kāi)發(fā)的工具,則開(kāi)發(fā)和調(diào)試都會(huì)容易。 程序員編寫(xiě)的代碼除了交給計(jì)算機(jī)運(yùn)行外,還必程序員編寫(xiě)的代碼除了交給計(jì)算機(jī)運(yùn)行外,還必須讓其他程序員或設(shè)計(jì)人員能夠看懂。如果程序須讓其他程序員或設(shè)計(jì)人員能夠看懂。如果程序代碼的可讀性好,則調(diào)試和維護(hù)的成本就可以大代碼的可讀性好,則調(diào)試和維護(hù)的成本就可以大幅度降低,同時(shí)可以減小程序運(yùn)行期間軟件失效幅度降低,同時(shí)可以減小程序運(yùn)行期間軟件失效的可能性,提高程序的可靠性。的可能性,提高程序的可靠性。 對(duì)于代碼編寫(xiě)而言,要求程序具有良好的

33、結(jié)構(gòu)和對(duì)于代碼編寫(xiě)而言,要求程序具有良好的結(jié)構(gòu)和風(fēng)格。風(fēng)格。 盡量使用語(yǔ)言提供的基本控制結(jié)構(gòu),即順序結(jié)構(gòu)盡量使用語(yǔ)言提供的基本控制結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。 利用塊機(jī)制將程序組織成容易識(shí)別的塊,每塊只利用塊機(jī)制將程序組織成容易識(shí)別的塊,每塊只有一個(gè)入口和一個(gè)出口。有一個(gè)入口和一個(gè)出口。 復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)組合或嵌套實(shí)現(xiàn)。復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)組合或嵌套實(shí)現(xiàn)。 對(duì)于語(yǔ)言中沒(méi)有的控制結(jié)構(gòu),可用一段等價(jià)的程對(duì)于語(yǔ)言中沒(méi)有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致一致 嚴(yán)格控制嚴(yán)格控

34、制GOTOGOTO語(yǔ)句。語(yǔ)句。在詳細(xì)設(shè)計(jì)和編碼階段,還應(yīng)當(dāng)采取自頂向下、逐步求精的方法,把在詳細(xì)設(shè)計(jì)和編碼階段,還應(yīng)當(dāng)采取自頂向下、逐步求精的方法,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而翻譯成一一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而翻譯成一系列用某種程序設(shè)計(jì)語(yǔ)言寫(xiě)成的程序。系列用某種程序設(shè)計(jì)語(yǔ)言寫(xiě)成的程序。 例例 用篩選法求用篩選法求100100以內(nèi)的素?cái)?shù)。具體做法就是從以內(nèi)的素?cái)?shù)。具體做法就是從2 2到到100100中去掉中去掉2 2,3 3, ,9 9,1010的倍數(shù),剩下的就是的倍數(shù),剩下的就是100100以內(nèi)的素?cái)?shù)。以內(nèi)的素?cái)?shù)。為了解決這個(gè)問(wèn)題,可先按程序

35、功能寫(xiě)出一個(gè)框架。為了解決這個(gè)問(wèn)題,可先按程序功能寫(xiě)出一個(gè)框架。main( )main( ) 建立建立2 2到到100100的數(shù)組的數(shù)組A A ,其中,其中Ai= iAi= i; -1 -1 建立建立2 2到到1010的素?cái)?shù)表的素?cái)?shù)表B B ,存放,存放2 2到到1010以內(nèi)素?cái)?shù);以內(nèi)素?cái)?shù); -2 -2 若若Ai = iAi = i是是B B 中任意一個(gè)數(shù)的倍數(shù),則剔除中任意一個(gè)數(shù)的倍數(shù),則剔除AiAi; -3 -3 輸出輸出A A 中所有沒(méi)有被剔除的數(shù);中所有沒(méi)有被剔除的數(shù); -4 -4 1 1基本要求基本要求2 2可讀性要求可讀性要求3 3正確性與容錯(cuò)性要求正確性與容錯(cuò)性要求4 4可移植性

36、要求可移植性要求5 5輸入和輸出要求輸入和輸出要求6 6重用性要求重用性要求7 7面向?qū)ο蟮某绦蛟O(shè)計(jì)風(fēng)格面向?qū)ο蟮某绦蛟O(shè)計(jì)風(fēng)格 程序結(jié)構(gòu)清晰且簡(jiǎn)單易懂,單個(gè)函數(shù)的行數(shù)一般程序結(jié)構(gòu)清晰且簡(jiǎn)單易懂,單個(gè)函數(shù)的行數(shù)一般不要超過(guò)不要超過(guò) 100 100行。行。 算法設(shè)計(jì)應(yīng)該簡(jiǎn)單,代碼要精簡(jiǎn),避免出現(xiàn)垃圾算法設(shè)計(jì)應(yīng)該簡(jiǎn)單,代碼要精簡(jiǎn),避免出現(xiàn)垃圾程序。程序。 盡量使用標(biāo)準(zhǔn)庫(kù)函數(shù)類方法和公共函數(shù)類盡量使用標(biāo)準(zhǔn)庫(kù)函數(shù)類方法和公共函數(shù)類方法)。方法)。 最好使用括號(hào)以避免二義性。最好使用括號(hào)以避免二義性。 程序頭程序頭, ,函數(shù)頭說(shuō)明函數(shù)頭說(shuō)明: :程序標(biāo)題程序標(biāo)題, ,該模塊功能說(shuō)明該模塊功能說(shuō)明, ,主主

37、要算法說(shuō)明;接口說(shuō)明要算法說(shuō)明;接口說(shuō)明: :調(diào)用形式調(diào)用形式, ,參數(shù)描述;子程參數(shù)描述;子程序清單序清單, ,有關(guān)數(shù)據(jù)的說(shuō)明;模塊位置有關(guān)數(shù)據(jù)的說(shuō)明;模塊位置: :在哪個(gè)源文件在哪個(gè)源文件中中, ,隸屬于哪一個(gè)軟件包;開(kāi)發(fā)歷史隸屬于哪一個(gè)軟件包;開(kāi)發(fā)歷史: :包括模塊設(shè)計(jì)包括模塊設(shè)計(jì)者者, ,復(fù)審者復(fù)審者, ,復(fù)審日期復(fù)審日期, ,修改日期及有關(guān)說(shuō)明等修改日期及有關(guān)說(shuō)明等 主要變量主要變量( (構(gòu)造、結(jié)合、類或?qū)ο髽?gòu)造、結(jié)合、類或?qū)ο?: ):含義的注釋。含義的注釋。 處理過(guò)程的每個(gè)階段和典型算法前都有相關(guān)注釋處理過(guò)程的每個(gè)階段和典型算法前都有相關(guān)注釋說(shuō)明,但是不要對(duì)每條語(yǔ)句注釋。說(shuō)明,但

38、是不要對(duì)每條語(yǔ)句注釋。 應(yīng)保持注釋與代碼完全一致。應(yīng)保持注釋與代碼完全一致。 程序格式清晰:一行只寫(xiě)一條語(yǔ)句,一個(gè)程序如程序格式清晰:一行只寫(xiě)一條語(yǔ)句,一個(gè)程序如果寫(xiě)得密密麻麻、分不出層次,是很難看懂的。果寫(xiě)得密密麻麻、分不出層次,是很難看懂的。利用空格、空行和縮進(jìn)顯示程序的邏輯結(jié)構(gòu),縮利用空格、空行和縮進(jìn)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量統(tǒng)一為進(jìn)量統(tǒng)一為4 4個(gè)字節(jié)。個(gè)字節(jié)。 (A-17)AND NOT(B=49)OR C(A-17)AND NOT(B=49)OR C寫(xiě)成寫(xiě)成 (A -17) AND NOT (B = 49) OR C(A -17) AND NOT (B = 49) OR C 對(duì)于嵌

39、套的循環(huán)和分支程序,層次不要超過(guò)五層對(duì)于嵌套的循環(huán)和分支程序,層次不要超過(guò)五層。語(yǔ)句力求簡(jiǎn)單、明晰,不要片面追求效率語(yǔ)句力求簡(jiǎn)單、明晰,不要片面追求效率, ,程序編寫(xiě)得過(guò)于緊湊程序編寫(xiě)得過(guò)于緊湊, ,使語(yǔ)使語(yǔ)句復(fù)雜化。如:句復(fù)雜化。如:for (i=1; i=n; i+)for (i=1; i=n; i+) for (j=1; j=n; j+) for (j=1; j=n; j+) Vij = (i/j) Vij = (i/j) * * (j/i) (j/i)V V是一個(gè)是一個(gè)N NN N單位矩陣單位矩陣, ,當(dāng)當(dāng)IJIJ時(shí)時(shí),V(I,J)=0;,V(I,J)=0;當(dāng)當(dāng)I=JI=J時(shí)時(shí),V(I

40、,J)=1,V(I,J)=1。這個(gè)程序構(gòu)。這個(gè)程序構(gòu)思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意圖思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意圖 for (i=1; i=n; i+)for (i=1; i=n; i+) for (j=1; j=n; j+) for (j=1; j=n; j+) if (i=j) if (i=j) Vij = 1; Vij = 1; else else Vij = 0; Vij = 0; 簡(jiǎn)單變量的運(yùn)算速度比下標(biāo)數(shù)組變量的運(yùn)算要快簡(jiǎn)單變量的運(yùn)算速度比下標(biāo)數(shù)組變量的運(yùn)算要快, ,程程序員可能把語(yǔ)句:序員可能把語(yǔ)句:X=AI+1/AI X

41、=AI+1/AI 寫(xiě)成寫(xiě)成AI= AI; X=AI+1/AIAI= AI; X=AI+1/AI 因?yàn)椴槐卦L問(wèn)數(shù)組的下標(biāo)變量因?yàn)椴槐卦L問(wèn)數(shù)組的下標(biāo)變量, ,程序運(yùn)行效率高程序運(yùn)行效率高, ,但把一個(gè)但把一個(gè)計(jì)算表達(dá)式拆成了多個(gè)計(jì)算表達(dá)式拆成了多個(gè), ,增加了理解的難度。一旦將來(lái)修增加了理解的難度。一旦將來(lái)修改可能會(huì)改變這幾行代碼的順序或在其間插入其它語(yǔ)句改可能會(huì)改變這幾行代碼的順序或在其間插入其它語(yǔ)句, ,容易引入新的錯(cuò)誤。容易引入新的錯(cuò)誤。 編程時(shí)盡可能使用已有的庫(kù)函數(shù)。編程時(shí)盡可能使用已有的庫(kù)函數(shù)。 盡量用公共過(guò)程或子程序代替具有獨(dú)立功能的重盡量用公共過(guò)程或子程序代替具有獨(dú)立功能的重復(fù)代碼段

42、復(fù)代碼段, ,但是如果不具有獨(dú)立功能的代碼不要這但是如果不具有獨(dú)立功能的代碼不要這樣做。樣做。 使用括號(hào)清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的使用括號(hào)清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的運(yùn)算順序。運(yùn)算順序。 盡量使用三種基本控制結(jié)構(gòu)編寫(xiě)程序盡量使用三種基本控制結(jié)構(gòu)編寫(xiě)程序, ,使用使用IF IF THEN ELSETHEN ELSE結(jié)構(gòu)實(shí)現(xiàn)分支結(jié)構(gòu)實(shí)現(xiàn)分支; ;使用使用DO UNTILDO UNTIL或或DO DO WHILEWHILE來(lái)實(shí)現(xiàn)循環(huán)。來(lái)實(shí)現(xiàn)循環(huán)。 避免采用過(guò)于復(fù)雜的條件測(cè)試,少用含有避免采用過(guò)于復(fù)雜的條件測(cè)試,少用含有“否認(rèn)運(yùn)算符的條件語(yǔ)句,例如在程序否認(rèn)運(yùn)算符的條件語(yǔ)句,例如在程序中

43、把中把: :IF NOT (CHARIF NOT (CHAR) OR (CHAR9 9) THEN ) THEN 改成改成IF (CHARIF (CHAR0 0) AND (CHAR) AND (CHAR= IF(CHAR=A A) THEN) THEN IF(CHAR= IF(CHAR=Z Z) THEN) THEN PRINT PRINT “This is a letterThis is a letter?!?ELSE/ ELSE/這個(gè)語(yǔ)句的配套這個(gè)語(yǔ)句的配套IF IF邏輯上不明確邏輯上不明確 PRINT This is not a letter PRINT This is not a l

44、etter?!?避免使用避免使用ELSE GOTOELSE GOTO和和ELSE RETURNELSE RETURN結(jié)構(gòu)。結(jié)構(gòu)。 避免過(guò)多的循環(huán)嵌套和條件嵌套。避免過(guò)多的循環(huán)嵌套和條件嵌套。 數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡(jiǎn)化。數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡(jiǎn)化。 模塊功能盡可能單一化,模塊間的耦合能夠清晰模塊功能盡可能單一化,模塊間的耦合能夠清晰可見(jiàn)。利用信息隱蔽確保每一個(gè)模塊的獨(dú)立性。可見(jiàn)。利用信息隱蔽確保每一個(gè)模塊的獨(dú)立性。 對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過(guò)程。對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過(guò)程。 盡量不要修補(bǔ)結(jié)構(gòu)差的程序盡量不要修補(bǔ)結(jié)構(gòu)差的程序, ,而應(yīng)重新設(shè)計(jì)和編碼而應(yīng)重新設(shè)計(jì)和編碼。 對(duì)太大的

45、程序,要分塊編寫(xiě)、測(cè)試,然后再集成對(duì)太大的程序,要分塊編寫(xiě)、測(cè)試,然后再集成 。 數(shù)據(jù)說(shuō)明的先后次序規(guī)范化數(shù)據(jù)說(shuō)明的先后次序規(guī)范化 簡(jiǎn)單變量類型說(shuō)明、數(shù)組說(shuō)明、公用簡(jiǎn)單變量類型說(shuō)明、數(shù)組說(shuō)明、公用數(shù)據(jù)塊說(shuō)明、文件說(shuō)明數(shù)據(jù)塊說(shuō)明、文件說(shuō)明 每個(gè)類型說(shuō)明中可按如下順序排列每個(gè)類型說(shuō)明中可按如下順序排列 整型量說(shuō)明、實(shí)型量說(shuō)明、字符量說(shuō)整型量說(shuō)明、實(shí)型量說(shuō)明、字符量說(shuō)明、邏輯量說(shuō)明明、邏輯量說(shuō)明 同一條說(shuō)明語(yǔ)句中可按字母順序排列同一條說(shuō)明語(yǔ)句中可按字母順序排列,例如,例如 INTEGER cost, length, price, widthINTEGER cost, length, price, w

46、idth 程序首先是正確,其次是考慮優(yōu)美和效率。程序首先是正確,其次是考慮優(yōu)美和效率。 對(duì)所有的用戶輸入,必須進(jìn)行合法性和有效性檢對(duì)所有的用戶輸入,必須進(jìn)行合法性和有效性檢查。查。 不要單獨(dú)進(jìn)行浮點(diǎn)數(shù)的比較。在計(jì)算機(jī)中用二進(jìn)不要單獨(dú)進(jìn)行浮點(diǎn)數(shù)的比較。在計(jì)算機(jī)中用二進(jìn)制表示十進(jìn)制數(shù)時(shí),有時(shí)二進(jìn)制數(shù)不能準(zhǔn)確地表制表示十進(jìn)制數(shù)時(shí),有時(shí)二進(jìn)制數(shù)不能準(zhǔn)確地表達(dá)十進(jìn)制數(shù),這時(shí)浮點(diǎn)數(shù)的表示具有不準(zhǔn)確性。達(dá)十進(jìn)制數(shù),這時(shí)浮點(diǎn)數(shù)的表示具有不準(zhǔn)確性。用它們做比較,其結(jié)果常常發(fā)生異常情況。解決用它們做比較,其結(jié)果常常發(fā)生異常情況。解決辦法是在嚴(yán)格的容差級(jí)范圍內(nèi)檢驗(yàn)兩個(gè)值的差異辦法是在嚴(yán)格的容差級(jí)范圍內(nèi)檢驗(yàn)兩個(gè)值的差

47、異,其形式為:,其形式為:|x0|x0 x1| x1| 其中其中 是容差級(jí),其大是容差級(jí),其大小取決于具體應(yīng)用中的總體精度要求及所用數(shù)值小取決于具體應(yīng)用中的總體精度要求及所用數(shù)值的精度。的精度。 所有變量在調(diào)用前必須被初始化。所有變量在調(diào)用前必須被初始化。 改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。首先考慮對(duì)其它程序的影響。 單元測(cè)試也是編程的一部分,提交聯(lián)調(diào)測(cè)試的程單元測(cè)試也是編程的一部分,提交聯(lián)調(diào)測(cè)試的程序必須通過(guò)單元測(cè)試。序必須通過(guò)單元測(cè)試。 單元測(cè)試時(shí),必須針對(duì)類里的每一個(gè)單元測(cè)試時(shí),必須針對(duì)類里的每一個(gè)publicp

48、ublic方法方法進(jìn)行測(cè)試,測(cè)試其正確的輸入,是否得到正確的進(jìn)行測(cè)試,測(cè)試其正確的輸入,是否得到正確的輸出;錯(cuò)誤的輸入是否得到相應(yīng)的容錯(cuò)處理如輸出;錯(cuò)誤的輸入是否得到相應(yīng)的容錯(cuò)處理如異常捕捉處理,返回錯(cuò)誤提示等)。異常捕捉處理,返回錯(cuò)誤提示等)。 應(yīng)當(dāng)盡量使用語(yǔ)言的標(biāo)準(zhǔn)部分,避免使用第三方應(yīng)當(dāng)盡量使用語(yǔ)言的標(biāo)準(zhǔn)部分,避免使用第三方提供的接口,以確保程序不受具體的運(yùn)行環(huán)境影提供的接口,以確保程序不受具體的運(yùn)行環(huán)境影響,和平臺(tái)無(wú)關(guān)。響,和平臺(tái)無(wú)關(guān)。 對(duì)數(shù)據(jù)庫(kù)的操作,使用符合語(yǔ)言規(guī)范的標(biāo)準(zhǔn)接口對(duì)數(shù)據(jù)庫(kù)的操作,使用符合語(yǔ)言規(guī)范的標(biāo)準(zhǔn)接口類例如類例如JDBCJDBC,除非程序是運(yùn)行于特定的環(huán)境下,除非程

49、序是運(yùn)行于特定的環(huán)境下,并且有很高的性能優(yōu)化方面的要求。并且有很高的性能優(yōu)化方面的要求。 程序中涉及到的數(shù)據(jù)庫(kù)定義和操縱語(yǔ)句,盡量使程序中涉及到的數(shù)據(jù)庫(kù)定義和操縱語(yǔ)句,盡量使用標(biāo)準(zhǔn)用標(biāo)準(zhǔn) SQL SQL 數(shù)據(jù)類型和數(shù)據(jù)類型和 SQL SQL 語(yǔ)句語(yǔ)句 任何程序都會(huì)有輸入輸出,輸入輸出的方任何程序都會(huì)有輸入輸出,輸入輸出的方式應(yīng)當(dāng)盡量方便用戶的使用。系統(tǒng)能否為式應(yīng)當(dāng)盡量方便用戶的使用。系統(tǒng)能否為用戶接受,很大程度上取決于輸入輸出的用戶接受,很大程度上取決于輸入輸出的風(fēng)格。在需求分析和設(shè)計(jì)階段就應(yīng)確定基風(fēng)格。在需求分析和設(shè)計(jì)階段就應(yīng)確定基本的輸入輸出風(fēng)格,要避免因設(shè)計(jì)不當(dāng)帶本的輸入輸出風(fēng)格,要避免

50、因設(shè)計(jì)不當(dāng)帶來(lái)操作和理解的麻煩。來(lái)操作和理解的麻煩。 對(duì)所有的輸入數(shù)據(jù)進(jìn)行檢驗(yàn),從而識(shí)別錯(cuò)誤的輸對(duì)所有的輸入數(shù)據(jù)進(jìn)行檢驗(yàn),從而識(shí)別錯(cuò)誤的輸入,以保證每個(gè)數(shù)據(jù)的有效性。入,以保證每個(gè)數(shù)據(jù)的有效性。 檢查輸入項(xiàng)各種重要組合的合理性,必要時(shí)報(bào)告檢查輸入項(xiàng)各種重要組合的合理性,必要時(shí)報(bào)告輸入狀態(tài)信息。輸入狀態(tài)信息。 輸入的步驟和操作盡可能簡(jiǎn)單,并且要保持簡(jiǎn)單輸入的步驟和操作盡可能簡(jiǎn)單,并且要保持簡(jiǎn)單的輸入格式。的輸入格式。 有些輸入信息應(yīng)提供缺省值。有些輸入信息應(yīng)提供缺省值。 輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志,而不輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目。要由用戶指定輸入

51、數(shù)據(jù)數(shù)目。 在以交互式方式進(jìn)行輸入時(shí),要在屏幕上顯示提在以交互式方式進(jìn)行輸入時(shí),要在屏幕上顯示提示信息,說(shuō)明輸入的選擇項(xiàng)和取值范圍,便于操示信息,說(shuō)明輸入的選擇項(xiàng)和取值范圍,便于操作者輸入。同時(shí),在輸入數(shù)據(jù)的過(guò)程和輸入數(shù)據(jù)作者輸入。同時(shí),在輸入數(shù)據(jù)的過(guò)程和輸入數(shù)據(jù)結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息。結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息。 當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)輸入格式有嚴(yán)格要求時(shí),應(yīng)保當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)輸入格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語(yǔ)句的要求一致。持輸入格式與輸入語(yǔ)句的要求一致。 給所有的輸出加上注解信息。給所有的輸出加上注解信息。 按照用戶的要求設(shè)計(jì)輸出報(bào)表格式。按照用戶的要求設(shè)計(jì)輸出報(bào)表格式

52、。 可重復(fù)使用的、功能相對(duì)獨(dú)立的算法或接可重復(fù)使用的、功能相對(duì)獨(dú)立的算法或接口。應(yīng)該考慮封裝成公共的控件或類,如口。應(yīng)該考慮封裝成公共的控件或類,如時(shí)間、日期處理,字符串格式處理,數(shù)據(jù)時(shí)間、日期處理,字符串格式處理,數(shù)據(jù)庫(kù)連接,文件讀寫(xiě)等,以提高系統(tǒng)中程序庫(kù)連接,文件讀寫(xiě)等,以提高系統(tǒng)中程序的可復(fù)用性。的可復(fù)用性。 相對(duì)固定和獨(dú)立的程序?qū)崿F(xiàn)方式和過(guò)程,相對(duì)固定和獨(dú)立的程序?qū)崿F(xiàn)方式和過(guò)程,應(yīng)考慮做成程序模板,增強(qiáng)對(duì)程序?qū)崿F(xiàn)方應(yīng)考慮做成程序模板,增強(qiáng)對(duì)程序?qū)崿F(xiàn)方式的復(fù)用,如對(duì)符合一定規(guī)范的式的復(fù)用,如對(duì)符合一定規(guī)范的 XML XML數(shù)據(jù)數(shù)據(jù)的解析等過(guò)程。的解析等過(guò)程。 程序的效率是指程序的執(zhí)行速度

53、及程序所需占用程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲(chǔ)空間。程序編碼是最后提高運(yùn)行速的內(nèi)存的存儲(chǔ)空間。程序編碼是最后提高運(yùn)行速度和節(jié)省存儲(chǔ)的機(jī)會(huì),因此在此階段不能不考慮度和節(jié)省存儲(chǔ)的機(jī)會(huì),因此在此階段不能不考慮程序的效率。討論程序效率的幾條準(zhǔn)則:程序的效率。討論程序效率的幾條準(zhǔn)則: 效率是一個(gè)性能要求,應(yīng)當(dāng)在需求分析階段給出效率是一個(gè)性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。 好的設(shè)計(jì)可以提高效率。好的設(shè)計(jì)可以提高效率。 程序的效率與程序的簡(jiǎn)單性相關(guān)。程序的效率與程序的簡(jiǎn)單性相關(guān)。 一般說(shuō)來(lái),任何對(duì)效率無(wú)重要改善,且對(duì)程序的一般說(shuō)來(lái),任何對(duì)效率無(wú)重要改善,且對(duì)程序的簡(jiǎn)單性、可讀性和正確性不利的程序設(shè)計(jì)方法都簡(jiǎn)單性、可讀性和正確性不利的程序設(shè)計(jì)方法都是不可取的。是不可取的。 源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法的效率直接有關(guān)。在詳細(xì)設(shè)計(jì)翻譯轉(zhuǎn)換成的效率直接有關(guān)。在詳細(xì)設(shè)計(jì)翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)源程序代碼后,算法效率反映為程序的執(zhí)行速度和存儲(chǔ)容量的要求。行速度和存儲(chǔ)容量的要求。 在編程序前,盡可能化簡(jiǎn)有關(guān)的算術(shù)表達(dá)式和邏輯表達(dá)在編

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論