版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
工程授課教師:藍(lán)天:電子郵箱:lantian
課程群號(hào):302950664第五章程序?qū)崿F(xiàn)程序設(shè)計(jì)語(yǔ)言的特點(diǎn)1程序的效率3良好的編程2小結(jié)4本章學(xué)習(xí)目標(biāo)1了解選擇程序設(shè)計(jì)語(yǔ)言的一般原則2理解編程規(guī)范3培養(yǎng)良好的編程程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言是:人與計(jì)算機(jī)通信的最基本工具。程序設(shè)計(jì)語(yǔ)言的特性不可避免地會(huì)影響開發(fā)的思路和解決問題的方式,會(huì)影響代碼的可理解性和可
性。編碼之前的一項(xiàng)重要工作就是選擇一種適當(dāng)?shù)木幊陶Z(yǔ)言。不同的語(yǔ)言適用于不同的應(yīng)用COBOL語(yǔ)言:數(shù)據(jù)處理程序PHP語(yǔ)言:專門用來(lái)編寫網(wǎng)頁(yè)處理程序Perl語(yǔ)言:更適合文本處理C語(yǔ)言:被廣泛用于系統(tǒng)
開發(fā)JAVA語(yǔ)言:用于跨平臺(tái)的應(yīng)用
開發(fā)程序設(shè)計(jì)語(yǔ)言的特點(diǎn)-技術(shù)方面一旦確定了需求之后,待選用的程序設(shè)計(jì)語(yǔ)言的技術(shù)特性就顯得非常重要了。如果需要復(fù)雜的數(shù)據(jù)結(jié)構(gòu),就要仔細(xì)衡量有哪些語(yǔ)言能提供這些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)描述。如果
要求高性能及實(shí)時(shí)處理能力,就該選用適合于實(shí)時(shí)處理的語(yǔ)言,如C或匯編語(yǔ)言。如果應(yīng)用有許多輸出報(bào)告或繁
件處理,則選用PowerBuilder、Delphi或SQL比較合適。所有程序語(yǔ)言的基本成分都可歸納為4種:數(shù)據(jù)成分:指明該語(yǔ)言能接受的數(shù)據(jù),如各種類型的變量、數(shù)組、指針、記錄等。作為程序操作的對(duì)象,具有名稱、類型和作用域等特征。使用前要對(duì)這些特征加以說明,數(shù)據(jù)名稱由用戶通過標(biāo)識(shí)符命名,類型是說明數(shù)據(jù)需占用多少單元和存放形式,作用域說明數(shù)據(jù)可被使用的范圍。運(yùn)算成分:指明該語(yǔ)言可執(zhí)行的運(yùn)算,如+,-,*、/控制成分:順序結(jié)構(gòu)、條件選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)傳輸成分:數(shù)據(jù)的傳輸方法,例如輸入、輸出函數(shù)程序設(shè)計(jì)語(yǔ)言的特點(diǎn)-語(yǔ)言本身名字類型初始化程序變量的局部性程序模塊的獨(dú)立性循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)異常處理獨(dú)立編譯……1、名字預(yù)先說明程序中所使用的變量名字,編譯程序能,從而幫助程夠檢查程序中出現(xiàn)的名字的序員發(fā)現(xiàn)和改正程序中的錯(cuò)誤。但是,有些語(yǔ)言不要求顯式地程序中所使用的變量名稱,它把變量第一次出現(xiàn)時(shí)使用的名字看做對(duì)這個(gè)變量的。這樣做可能會(huì)引入一些很難發(fā)現(xiàn)的錯(cuò)誤,并且可能會(huì)產(chǎn)生嚴(yán)重。2、類型變量的類型確定一個(gè)變量的使用方式,有了類型,編譯程序就能夠很容易地發(fā)現(xiàn)程序中某個(gè)特定類型的變量使用不當(dāng)?shù)腻e(cuò)誤。有些語(yǔ)言不要求顯式的類型,例如FORTRAN語(yǔ)言規(guī)定,名字的第一個(gè)字母決定它的類型,但是一旦顯式地了一個(gè)變量的類型,則以顯式為該變量的類型。這很容易造成閱讀時(shí)的?,F(xiàn)代的大多數(shù)高級(jí)語(yǔ)言都有自定義類型,即允許開發(fā)定義與特定應(yīng)用相關(guān)的類型,并且可以用自定義類型嵌套定義新的類型。例如,可以定義記錄、鏈表、二叉樹等復(fù)雜的結(jié)構(gòu)類型。程序設(shè)計(jì)語(yǔ)言中的類型說明不僅僅是一種安全措施,還是一種重要的抽象機(jī)制。3、初始化程序設(shè)計(jì)中最常見的錯(cuò)誤之一就是在使用變量之前沒有對(duì)變量進(jìn)行初始化。為了減少發(fā)生錯(cuò)誤的可能性,應(yīng)該強(qiáng)迫程序員對(duì)程序中所使用的變量進(jìn)行初始化。另一個(gè)辦法是在說明變量時(shí)由系統(tǒng)給變量賦予一個(gè)特殊的標(biāo)識(shí),表明它尚未初始化,以后如果沒給這個(gè)變量賦值就企圖使用它,系統(tǒng)會(huì)發(fā)出信號(hào)。4、程序變量的局部性程序設(shè)計(jì)的一般原則是變量的名字應(yīng)該在靠近使用它的地方引入,并且應(yīng)該只有程序中真正需要它的那些部分才能夠它。通常有兩種提供局部變量的途徑:?jiǎn)螌泳植啃院投鄬泳植啃?。PROGRAM
TEST……PROCEDURE
A()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;PROCEDUREB()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;END.程序中過程A和B內(nèi)的變量是單層局部性的,兩個(gè)過程中
的變量的作用范圍局限于所在的過程。PROGRAM
TEST……PROCEDURE
A()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J,K:INTEGER;PROCEDURE
B()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;BEGIN……………………END;…………程序的結(jié)構(gòu)是多層的,模塊A中的變量與模塊B中的變量除了變量K之外全部相同。內(nèi)層模塊B中有意義的變量是屬于該模塊的A[],B[],WORK,I,J和屬于外層模塊的變量K。要盡量避免內(nèi)層模塊與外層模塊定義相同的變量名,容易引起差錯(cuò),給
理解代碼帶來(lái)很多5、程序模塊獨(dú)立性結(jié)構(gòu)化語(yǔ)言提供了控制局部變量可見性的某些
,主要是在較內(nèi)層程序模塊中定義的變量不能被較外層的程序塊。由于動(dòng)態(tài)分配的緣故,在兩次調(diào)用一個(gè)程序塊的間隔中不能夠保存局部變量的值。因此,即使只有一兩個(gè)子程序使用的變量,如果需要在兩次調(diào)用這些子程序的過程中保存這個(gè)變量的值,也必須把這個(gè)變量說明成全局的,這將增加時(shí)發(fā)生差錯(cuò)的可能性。因此現(xiàn)在大多數(shù)語(yǔ)言提供了靜態(tài)變量,這種變量可以保存前次調(diào)用時(shí)的數(shù)據(jù),解決了多次調(diào)用一個(gè)模塊時(shí)局部變量不能保存的問題。6、循環(huán)結(jié)構(gòu)最常見的循環(huán)結(jié)構(gòu)有for語(yǔ)句、while-do語(yǔ)句和repeat-until語(yǔ)句,這些語(yǔ)言都是在循環(huán)體外判斷循環(huán)條件。有許多場(chǎng)合需要在循環(huán)體內(nèi)的任意一點(diǎn)測(cè)試循環(huán)結(jié)束條件,如果使用if-then-else語(yǔ)句和附加的布爾變量實(shí)現(xiàn)這個(gè)要求,則將增加程序長(zhǎng)度并且降低程序的可讀性。某些程序設(shè)計(jì)語(yǔ)言考慮到上述要求,適當(dāng)?shù)亟鉀Q了這個(gè)問題。
exit{(標(biāo)識(shí)符)}{when(條件)}這個(gè)語(yǔ)句把控制轉(zhuǎn)移到循環(huán)語(yǔ)句后面的一條語(yǔ)句或轉(zhuǎn)移到由標(biāo)識(shí)符指定的語(yǔ)句上。7、分支結(jié)構(gòu)簡(jiǎn)單的分支語(yǔ)句一般不會(huì)出現(xiàn)問題,但是多分支的case型語(yǔ)句注意以下2個(gè)問題:如果case表達(dá)式取的值不在預(yù)先指定的范圍內(nèi),需要用缺省方式處理。在某些程序設(shè)計(jì)語(yǔ)言中,由case表達(dá)式選定的執(zhí)行語(yǔ)句取決于所有可能執(zhí)行的語(yǔ)句排列順序,如果語(yǔ)句順序排列錯(cuò)了,編譯和運(yùn)行時(shí)系統(tǒng)是不會(huì)發(fā)現(xiàn)這類錯(cuò)誤的。8、異常處理程序運(yùn)行過程中發(fā)生的錯(cuò)誤或意外事件稱為異常。以前大多數(shù)程序設(shè)計(jì)語(yǔ)言在檢測(cè)和處理異常方面幾乎沒有給程序員提供任何幫助,程序員只能使用條件控制檢測(cè)異常,在發(fā)生異常時(shí)把控制轉(zhuǎn)移到處理異常的程序段。但是,JAVA等一些語(yǔ)言提供了異常處理機(jī)制,程序員可以很容易地利用語(yǔ)言提供的異常處理機(jī)制實(shí)現(xiàn)錯(cuò)誤和異常的處理操作。9、獨(dú)立編譯獨(dú)立編譯意味著能夠分別編譯各個(gè)程序單元,然后再把它們集成為一個(gè)完整的程序。一個(gè)大程序通常由許多程序單元組成,如果修改了其中任何一個(gè)程序單元都需要重新編譯整個(gè)程序,將大大增加程序開發(fā)、調(diào)試和的成本;反之,如果可以獨(dú)立編譯,則只需要重新編譯修改了的程序單元,然后重新連接整個(gè)程序即可。獨(dú)立編譯的機(jī)制對(duì)于開發(fā)大型系統(tǒng)極其重要。10、其它特性某些語(yǔ)言帶有一些特別的功能,這些功能可實(shí)現(xiàn)一些特殊的設(shè)計(jì)。如MODULA語(yǔ)言和并發(fā)PASCAL語(yǔ)言支持并發(fā)處理、以及必須彼此通信和協(xié)調(diào)的分布式進(jìn)程。因此適應(yīng)并發(fā)的和分布式處理的要求。程序設(shè)計(jì)語(yǔ)言的特點(diǎn)-工程方面詳細(xì)設(shè)計(jì)能夠直接地翻譯成程序代碼。源程序的可移植性。改善
可移植性的主要途徑是使語(yǔ)言標(biāo)準(zhǔn)化。對(duì)于可移植性要求的,應(yīng)該嚴(yán)格遵守相應(yīng)的標(biāo)準(zhǔn)編寫程序代碼,不要圖一時(shí)的省事去使用語(yǔ)言的非標(biāo)準(zhǔn)特性。編譯程序效率較高。編譯程序首先應(yīng)該支持獨(dú)立編譯,并且能夠發(fā)現(xiàn)盡可能多的程序代碼錯(cuò)誤,輔助程序員提高程序調(diào)試效率。盡可能應(yīng)用代碼生成工具。許多語(yǔ)言都有與它相應(yīng)的編譯程序、連接程序、調(diào)試程序、代碼格式化程序、交叉編譯程序、宏處理程序和標(biāo)準(zhǔn)子程序庫(kù)等。對(duì)于提高效率是明智的選擇???/p>
性??尚缘那疤崾谴a的可理解性,源程序的可讀性、語(yǔ)言的文檔化特性是影響可
性的重要因素。程序設(shè)計(jì)語(yǔ)言的分類按語(yǔ)言級(jí)別分類,有低級(jí)語(yǔ)言和高級(jí)語(yǔ)言之分按照用戶要求,有過程式語(yǔ)言和非過程式語(yǔ)言之分按照應(yīng)用范圍,有通用語(yǔ)言和
語(yǔ)言之分按照使用方式,有交互式語(yǔ)言和非交互式語(yǔ)言之分按照成分性質(zhì),有順序語(yǔ)言、并發(fā)語(yǔ)言和分布式語(yǔ)言之分第四代語(yǔ)言,有數(shù)據(jù)庫(kù)查詢語(yǔ)言DEV2000、程序代碼生成器以及其他一些原型語(yǔ)言、形式化規(guī)格說明語(yǔ)言等等。選擇一種語(yǔ)言要考慮的因素在選擇與評(píng)價(jià)語(yǔ)言時(shí),首先要從應(yīng)用要求入手,對(duì)比各項(xiàng)要求的相對(duì)重要性,然后再根據(jù)這些要求和相對(duì)重要性來(lái)選擇合適的編程語(yǔ)言。具體選擇的考慮:編程待開發(fā)的水平和編程經(jīng)歷的類型算法和計(jì)算復(fù)雜性數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性的開發(fā)成本和時(shí)間要求的可移植性要求可用的 工具的水平和編程經(jīng)歷。雖然程序員編程學(xué)
門新的語(yǔ)言并不,但是要熟練地掌握和精通一門語(yǔ)言是需要長(zhǎng)期的實(shí)踐開發(fā)積累的。因此,在選擇語(yǔ)言時(shí)一定要考慮到時(shí)間限制和程序員掌握語(yǔ)言的程度,盡可能選擇一種程序員熟悉的語(yǔ)言。待開發(fā)的類型可能不同,一般分為數(shù)據(jù)庫(kù)應(yīng)用類、實(shí)時(shí)控制
、系統(tǒng)級(jí)、
等等。根據(jù)、人工智能的類型選擇合適的開發(fā)語(yǔ)言,例如,F(xiàn)ORTRAN語(yǔ)言適合科學(xué)計(jì)算,PowerBuilder、Delphi、C#等語(yǔ)言適合于信息系統(tǒng)的開發(fā),LISP、PROLOG語(yǔ)言適合于人工智能領(lǐng)域。算法和計(jì)算復(fù)雜性。待開發(fā)算法的復(fù)雜性不同,應(yīng)該選擇合適的語(yǔ)言,例如,科學(xué)計(jì)算領(lǐng)域大都選擇FORTRAN,因?yàn)樗倪\(yùn)行性能比較好,但是計(jì)算機(jī)硬件的發(fā)展使得運(yùn)算速度已不再成為瓶頸,因此許多計(jì)算型+語(yǔ)言。然而計(jì)算復(fù)雜度很高的普遍采用C/C+采用匯編語(yǔ)言、人工智能類的語(yǔ)言肯定是不合適的,前者編寫代碼的工作復(fù)雜度太高,后者的運(yùn)行效率太低,并且這兩類語(yǔ)言的科學(xué)計(jì)算庫(kù)都很少,可復(fù)用的
元素較少。數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性。有些語(yǔ)言,例如FORTRAN、
BASIC語(yǔ)言,定義數(shù)據(jù)類型的能力非常差,一旦設(shè)計(jì)中有比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),程序員實(shí)現(xiàn)時(shí)會(huì)感到很棘手。而PASCAL、JAVA之類的語(yǔ)言其數(shù)據(jù)結(jié)構(gòu)描述能力非常強(qiáng)大,為程序員創(chuàng)造了一個(gè)很廣闊的編程空間??紤]的開發(fā)成本和時(shí)間要求。不僅要考慮當(dāng)前的開發(fā)成本,還要考慮今后的成本,如果選擇的語(yǔ)言很生僻,即使現(xiàn)在以很快的速度開發(fā)出來(lái),將來(lái)的
工作量不得不考慮。
的可移植性要求。如果目標(biāo)系統(tǒng)的運(yùn)行環(huán)境不能確定,例如,可能運(yùn)行在小型機(jī)的UNIX操作系統(tǒng)上,也可能運(yùn)行在大型機(jī)的OS/400操作系統(tǒng)上,甚至還要運(yùn)行在PC機(jī)的Windows操作系統(tǒng)環(huán)境中,這時(shí)選擇的開發(fā)語(yǔ)言最好是JAVA。這樣可以保證
的跨平臺(tái)運(yùn)行。選擇語(yǔ)言時(shí),特別是為大型選擇語(yǔ)言時(shí),一定要考慮可用的工具。如果某種語(yǔ)言有支持開發(fā)的工具,則開發(fā)和調(diào)試都會(huì)容易。良好的編程良好的編程程序員編寫的代碼除了交給計(jì)算機(jī)運(yùn)行外,還必須讓其他程序員或設(shè)計(jì)
能夠看懂。如果程序代碼的可讀性好,則調(diào)試和的成本就可以大幅度降低,同時(shí)可以減小程序運(yùn)行期間
失效的可能性,提高程序的可靠性。對(duì)于代碼編寫而言,要求程序具有良好的結(jié)構(gòu)和風(fēng)格。結(jié)構(gòu)化程序設(shè)計(jì)原則盡量使用語(yǔ)言提供的基本控制結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。利用塊機(jī)制將程序組織成容易識(shí)別的塊,每塊只有一個(gè)
和一個(gè)出口。復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)組合或嵌套實(shí)現(xiàn)。對(duì)于語(yǔ)言中沒有的控制結(jié)構(gòu),可用一段等價(jià)的程序段模擬,但要求該程序段在整個(gè)系統(tǒng)中應(yīng)前后一致嚴(yán)格控制GOTO語(yǔ)句。自頂向下、逐步細(xì)化在詳細(xì)設(shè)計(jì)和編碼階段,還應(yīng)當(dāng)采取自頂向下、逐步求精的方法,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而翻譯成一系列用某種程序設(shè)計(jì)語(yǔ)言寫成的程序。[例]用篩選法求100以內(nèi)的素?cái)?shù)。具體做法就是從2到100中去掉2,3,…,9,10的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。為了解決這個(gè)問題,可先按程序功能寫出一個(gè)框架。main(
){建立2到100的數(shù)組A[],其中A[i]=i;建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)素?cái)?shù);------1------2若A[i]=i是B[]中任意一個(gè)數(shù)的倍數(shù),則剔除A[i];------3輸出A[
]中所有沒有被剔除的數(shù);
------4}程序設(shè)計(jì)風(fēng)格基本要求可讀性要求正確性與容錯(cuò)性要求可移植性要求輸入和輸出要求重用性要求面
象的程序設(shè)計(jì)風(fēng)格1)基本要求程序結(jié)構(gòu)清晰且簡(jiǎn)單易懂,單個(gè)函數(shù)的行數(shù)一般不要超過100行。算法設(shè)計(jì)應(yīng)該簡(jiǎn)單,代碼要精簡(jiǎn),避免出現(xiàn)程序。盡量使用標(biāo)準(zhǔn)庫(kù)函數(shù)(類方法)和公共函數(shù)(類方法)。最好使用括號(hào)以避免二義性。2)可讀性要求→注釋程序頭,函數(shù)頭說明:程序標(biāo)題,該模塊功能說明,主要算法說明;接口說明:調(diào)用形式,參數(shù)描述;子程序
,有關(guān)數(shù)據(jù)的說明;模塊位置:在哪個(gè)源文件中,隸屬于哪一個(gè)
包;開發(fā)歷史:包括模塊設(shè)計(jì)者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等主要變量(結(jié)構(gòu)、聯(lián)合、類或?qū)ο?:含義的注釋。處理過程的每個(gè)階段和典型算法前都有相關(guān)注釋說明,但是不要對(duì)每條語(yǔ)句注釋。應(yīng)保持注釋與代碼完全一致。2)可讀性要求→格式程序格式清晰:一行只寫一條語(yǔ)句,一個(gè)程序如果寫得密密麻麻、分不出層次,是很難看懂的。利用空格、空行和縮進(jìn)顯示程序的邏輯結(jié)構(gòu),縮進(jìn)量為4個(gè)字節(jié)。(A<-17)AND
NOT(B<=49)OR
C寫成(A
<
-17)
AND NOT
(B
<=
49)OR
C對(duì)于嵌套的循環(huán)和分支程序,層次不要超過五層。2)可讀性要求→程序本身語(yǔ)句力求簡(jiǎn)單、清晰,不要片面追求效率,程序編寫得過于緊湊,使語(yǔ)句復(fù)雜化。如:for
(i=1;
i<=n;
i++)for
(j=1;
j<=n;
j++)V[i][j]
=
(i/j)
*
(j/i)V是一個(gè)N×N單位矩陣,當(dāng)I≠J時(shí),V(I,J)=0;當(dāng)I=J時(shí),V(I,J)=1。這個(gè)程序構(gòu)思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意圖for
(i=1;
i<=n;
i++)for
(j=1;
j<=n;
j++)if
(i==j)V[i][j]
=
1;elseV[i][j]
=
0;2)可讀性要求→程序本身(續(xù))簡(jiǎn)單變量的運(yùn)算速度比下標(biāo)(數(shù)組)變量的運(yùn)算要快,程序員可能把語(yǔ)句:X=A[I]+1/A[I]寫成AI=
A[I];
X=AI+1/AI因?yàn)椴槐財(cái)?shù)組的下標(biāo)變量,程序運(yùn)行效率高,但把一個(gè)計(jì)算表達(dá)式拆成了多個(gè),增加了理解的難度。一旦將來(lái)修改可能會(huì)改變這幾行代碼的順序或在其間其它語(yǔ)句,容易引入新的錯(cuò)誤。2)可讀性要求→程序本身(續(xù))編程時(shí)盡可能使用已有的庫(kù)函數(shù)。盡量用公共過程或子程序代替具有獨(dú)立功能的重復(fù)代碼段,但是如果不具有獨(dú)立功能的代碼不要這樣做。使用括號(hào)清晰地表達(dá)算術(shù)表達(dá)式和邏輯表達(dá)式的運(yùn)算順序。盡量使用三種基本控制結(jié)構(gòu)編寫程序,使用IFTHEN
ELSE結(jié)構(gòu)實(shí)現(xiàn)分支;使用DO
UNTIL或DOWHILE來(lái)實(shí)現(xiàn)循環(huán)。2)可讀性要求→程序本身(續(xù))避免采用過于復(fù)雜的條件測(cè)試,少用含有
“否定”運(yùn)算符的條件語(yǔ)句,例如在程序中把:IF
NOT
((CHAR<=’0’)
OR
(CHAR>=’9’))
THEN
……改成IF(CHAR>’0’)
AND
(CHAR<’9’)
THEN
……2)可讀性要求→程序本身(續(xù))避免使用空的ELSE語(yǔ)句和IF
THEN
IF語(yǔ)句IF(CHAR>=’A’)
THENIF(CHAR<=’Z’)
THENPRINT“This
is
a
letter?!盓LSE//這個(gè)語(yǔ)句的配套IF邏輯上不明確PRINT
"This
is
not
a
letter。”2)可讀性要求→程序本身(續(xù))避免使用ELSE
GOTO和ELSE
RETURN結(jié)構(gòu)。避免過多的循環(huán)嵌套和條件嵌套。數(shù)據(jù)結(jié)構(gòu)要有利于程序的簡(jiǎn)化。模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。利用信息隱蔽確保每一個(gè)模塊的獨(dú)立性。對(duì)遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過程。盡量不要修補(bǔ)結(jié)構(gòu)差的程序,而應(yīng)重新設(shè)計(jì)和編碼。對(duì)太大的程序,要分塊編寫、測(cè)試,然后再集成。2)可讀性要求→數(shù)據(jù)說明數(shù)據(jù)說明的先后次序規(guī)范化簡(jiǎn)單變量類型說明、數(shù)組說明、公用數(shù)據(jù)塊說明、文件說明每個(gè)類型說明中可按如下順序排列整型量說明、實(shí)型量說明、字符量說明、邏輯量說明同一條說明語(yǔ)句中可按字母順序排列,例如INTEGER
cost,
length,
price,
width3)正確性與容錯(cuò)性要求程序首先是正確,其次是考慮優(yōu)美和效率。對(duì)所有的用戶輸入,必須進(jìn)行和有效性檢查。不要單獨(dú)進(jìn)行浮點(diǎn)數(shù)的比較。在計(jì)算機(jī)中用二進(jìn)制表示十進(jìn)制數(shù)時(shí),有時(shí)二進(jìn)制數(shù)不能準(zhǔn)確地表達(dá)十進(jìn)制數(shù),這時(shí)浮點(diǎn)數(shù)的表示具有確性。用它們做比較,其結(jié)果常常發(fā)生異常情況。解決辦法是在嚴(yán)格的容差級(jí)范圍內(nèi)檢驗(yàn)兩個(gè)值的差異,其形式為:|x0﹣x1|<ε
其中ε是容差級(jí),其大小取決于具體應(yīng)用中的總體精度要求及所用數(shù)值的精度。3)正確性與容錯(cuò)性要求(續(xù))所有變量在調(diào)用前必須被初始化。改一個(gè)錯(cuò)誤時(shí)可能產(chǎn)生新的錯(cuò)誤,因此在修改前首先考慮對(duì)其它程序的影響。單元測(cè)試也是編程的一部分,提交聯(lián)調(diào)測(cè)試的程序必須通過單元測(cè)試。單元測(cè)試時(shí),必須針對(duì)類里的每一個(gè)public方法進(jìn)試,測(cè)試其正確的輸入,是否得到正確的輸出;錯(cuò)誤的輸入是否得到相應(yīng)的容錯(cuò)處理(如異常捕捉處理,返回錯(cuò)誤提示等)。4)可移植性要求應(yīng)當(dāng)盡量使用語(yǔ)言的標(biāo)準(zhǔn)部分,避免使用第提供的接口,以確保程序不受具體的運(yùn)行環(huán)境影響,和平臺(tái)無(wú)關(guān)。對(duì)數(shù)據(jù)庫(kù)的操作,使用符合語(yǔ)言規(guī)范的標(biāo)準(zhǔn)接口類例如JDBC,除非程序是運(yùn)行于特定的環(huán)境下,并且有很高的性能優(yōu)化方面的要求。程序中涉及到的數(shù)據(jù)庫(kù)定義和
語(yǔ)句,盡量使用標(biāo)準(zhǔn)SQL
數(shù)據(jù)類型和SQL
語(yǔ)句5)輸入和輸出要求任何程序都會(huì)有輸入輸出,輸入輸出的方式應(yīng)當(dāng)盡量方便用戶的使用。系統(tǒng)能否為用戶接受,很大程度上取決于輸入輸出的風(fēng)格。在需求分析和設(shè)計(jì)階段就應(yīng)確定基本的輸入輸出風(fēng)格,要避免因設(shè)計(jì)不當(dāng)帶來(lái)操作和理解的麻煩。5)輸入和輸出要求(續(xù))對(duì)所有的輸入數(shù)據(jù)進(jìn)行檢驗(yàn),從而識(shí)別錯(cuò)誤的輸入,以保證每個(gè)數(shù)據(jù)的有效性。檢查輸入項(xiàng)各種重要組合的合理性,必要
告輸入狀態(tài)信息。輸入的步驟和操作盡可能簡(jiǎn)單,并且要保持簡(jiǎn)單的輸入格式。有些輸入信息應(yīng)提供缺省值。輸入一批數(shù)據(jù)時(shí),最好使用輸入結(jié)束標(biāo)志,而不要由用戶指定輸入數(shù)據(jù)數(shù)目。5)輸入和輸出要求(續(xù))在以交互式方式進(jìn)行輸入時(shí),要在屏幕上顯示提示信息,說明輸入的選擇項(xiàng)和取值范圍,便于操作者輸入。同時(shí),在輸入數(shù)據(jù)的過程和輸入數(shù)據(jù)結(jié)束時(shí),也要在屏幕上給出狀態(tài)信息。當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)輸入格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語(yǔ)句的要求一致。給所有的輸出加上注解信息。按照用戶的要求設(shè)計(jì)輸出報(bào)表格式。6)重用性要求可重復(fù)使用的、功能相對(duì)獨(dú)立的算法或接口。應(yīng)該考慮封裝成公共的控件或類,如時(shí)間、日期處理,字符串格式處理,數(shù)據(jù)庫(kù)連接,文件讀寫等,以提高系統(tǒng)中程序的可復(fù)用性。相對(duì)固定和獨(dú)立的程序?qū)崿F(xiàn)方式和過程,應(yīng)考慮做成程序模板,增強(qiáng)對(duì)程序?qū)崿F(xiàn)方式的復(fù)用,如對(duì)符合一定規(guī)范的XML數(shù)據(jù)的解析等過程。程序的效率程序效率程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的度和節(jié)省空間。程序編碼是最后提高運(yùn)行速的機(jī)會(huì),因此在此階段不能不考慮程序的效率。
程序效率的幾條準(zhǔn)則:效率是一個(gè)性能要求,應(yīng)當(dāng)在需求分析階段給出。軟件效率以需求為準(zhǔn),不應(yīng)以人力所及為準(zhǔn)。好的設(shè)計(jì)可以提高效率。程序的效率與程序的簡(jiǎn)單性相關(guān)。
一般說來(lái),任何對(duì)效率無(wú)重要改善,且對(duì)程序的簡(jiǎn)單性、可讀性和正確性不利的程序設(shè)計(jì)方法都是不可取的。算法對(duì)效率的影響源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法的效率直接有關(guān)。在詳細(xì)設(shè)計(jì)翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)行速度和容量的要求。設(shè)計(jì)向程序轉(zhuǎn)換過程中的指導(dǎo)原則①在編程序前,盡可能化簡(jiǎn)有關(guān)的算術(shù)表達(dá)式和邏輯表達(dá)式;②仔細(xì)檢查算法中的嵌套的循環(huán),盡
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版出租房整棟租賃與物業(yè)管理一體化合同3篇
- 二零二五版高齡勞動(dòng)者就業(yè)協(xié)議書樣本2篇
- 全新二零二五年度文化旅游項(xiàng)目合作協(xié)議3篇
- 2025年度太陽(yáng)能熱水器安裝與熱水供應(yīng)合同2篇
- 面向低質(zhì)數(shù)據(jù)的行人重識(shí)別深度模型與算法研究
- 北京中考模擬數(shù)學(xué)試卷
- 河南省林業(yè)碳匯項(xiàng)目實(shí)施效果研究
- 2024鋁礦回收利用與環(huán)保處理合作協(xié)議2篇
- 2025版大型公共場(chǎng)所消防器材設(shè)備采購(gòu)與維護(hù)合同2篇
- 2025勞動(dòng)合同法下經(jīng)濟(jì)補(bǔ)償?shù)倪m用指引
- 土地買賣合同參考模板
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 房地產(chǎn)運(yùn)營(yíng)管理:提升項(xiàng)目品質(zhì)
- 自愿斷絕父子關(guān)系協(xié)議書電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語(yǔ)閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補(bǔ)類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊(cè)課件【完整版】
評(píng)論
0/150
提交評(píng)論