版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章程序設(shè)計(jì)5.1開發(fā)工具的選擇
5.2程序設(shè)計(jì)風(fēng)格
實(shí)驗(yàn)四習(xí)題5.1開發(fā)工具的選擇5.1.1常用開發(fā)工具簡介目前市場(chǎng)上可供選擇的開發(fā)工具很多,不同的開發(fā)工具有各自的特點(diǎn),且適合開發(fā)不同的應(yīng)用系統(tǒng),在使用時(shí)應(yīng)根據(jù)需要選擇。下面簡單介紹一些常見的軟件開發(fā)工具。
1.高級(jí)程序設(shè)計(jì)語言常用的程序設(shè)計(jì)語言有匯編語言和高級(jí)語言。匯編語言面向特定的計(jì)算機(jī),可移植性差,與機(jī)器指令一一對(duì)應(yīng),程序編寫工作量很大,十分繁瑣。但是匯編語言編寫的程序一般效率較高,而且可以直接對(duì)計(jì)算機(jī)底層設(shè)備進(jìn)行操作,在一些對(duì)效率要求較高或工業(yè)控制的開發(fā)項(xiàng)目中經(jīng)常會(huì)用到,而管理信息系統(tǒng)中一般較少使用。高級(jí)語言在20世紀(jì)60年代投入使用,是使用最廣泛的程序設(shè)計(jì)語言,不同的高級(jí)語言適用的領(lǐng)域也不盡相同。例如,早期的高級(jí)語言FORTRAN主要用于科學(xué)計(jì)算;有些高級(jí)語言為商業(yè)數(shù)據(jù)處理而設(shè)計(jì),例如COBOL語言。隨著面向?qū)ο蠹夹g(shù)的發(fā)展,傳統(tǒng)的面向過程的高級(jí)語言大多引入了面向?qū)ο蟮恼Z言成分,如C發(fā)展成為C++語言、Pascal發(fā)展為ObjectPascal(Borland公司的Delphi開發(fā)環(huán)境使用該語言),同時(shí)又產(chǎn)生了一些新的完全的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,如SmallTalk、Java等。面向?qū)ο蟮某绦蛟O(shè)計(jì)語言是一類很有潛力的開發(fā)工具,支持面向?qū)ο蟮某绦蛟O(shè)計(jì)思想。高級(jí)語言與匯編語言不同,它不依賴于特定的計(jì)算機(jī),使用高級(jí)語言編寫的程序可以在不同類型的計(jì)算機(jī)上使用,只要這種類型的計(jì)算機(jī)有該語言的編譯程序,因此高級(jí)語言具有較好的可移植性。使用高級(jí)語言編寫的程序,一條語句往往對(duì)應(yīng)多條機(jī)器指令,因此編程工作量大為減少。高級(jí)語言形式上更接近自然語言,與匯編語言相比,程序的可讀性和可理解性也更好。傳統(tǒng)的高級(jí)程序設(shè)計(jì)語言雖然功能強(qiáng)大,但其數(shù)據(jù)庫操作能力很弱,直接使用高級(jí)語言實(shí)現(xiàn)數(shù)據(jù)庫管理功能工作量很大。開發(fā)管理信息系統(tǒng)可以使用一些第三方數(shù)據(jù)庫軟件包。不過,目前大部分高級(jí)語言編譯器供應(yīng)商提供的已不是單一的編譯器,而是完整的開發(fā)環(huán)境,例如微軟公司的VisualC++、Borland公司的Delphi等,它們已具備強(qiáng)大的數(shù)據(jù)庫連接功能,且已成為信息系統(tǒng)常用的開發(fā)工具。
2.第四代語言高級(jí)語言通常被稱為第三代程序設(shè)計(jì)語言,是一種過程化的語言。編寫程序時(shí)需要詳細(xì)描述問題求解的過程,告訴計(jì)算機(jī)每一步應(yīng)該怎么做。為了把程序員從繁重的編碼中解放出來,出現(xiàn)了第四代程序設(shè)計(jì)語言4GL。
4GL一般是非過程化的,具有以下一些特征:
(1)具有強(qiáng)大的數(shù)據(jù)管理能力,能對(duì)數(shù)據(jù)庫進(jìn)行有效的存取、查詢和其他相關(guān)操作。
(2)能提供一組高效的、非過程化的命令,組成語言的基本語句。編程時(shí)用戶只需用這些命令說明做什么,不必描述實(shí)現(xiàn)的細(xì)節(jié)。
(3)能滿足多功能、一體化的要求。為此,語言中除了必須含有控制程序邏輯與實(shí)現(xiàn)數(shù)據(jù)庫操作的語句外,還應(yīng)包含生成與處理報(bào)表、圖形,以及實(shí)現(xiàn)數(shù)據(jù)運(yùn)算和分析統(tǒng)計(jì)功能的各種語句,共同構(gòu)成一個(gè)一體化的語言,以適應(yīng)多種應(yīng)用開發(fā)的需要。最早的第四代語言是關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言SQL,它是ORACLE、DB2等數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)的基本語言,具有較強(qiáng)的數(shù)據(jù)操作能力。SQL語言在系統(tǒng)開發(fā)中一般不獨(dú)立使用,而是嵌入在其他語言的程序中使用,幫助完成數(shù)據(jù)庫的操作。目前常用的一些開發(fā)工具如VisualFoxPro、PowerBuilder等都具有第四代語言的很多特點(diǎn)。另一類與第四代語言相似的開發(fā)工具,如VisualC++、VisualBasic、Delphi等,雖然使用傳統(tǒng)的程序設(shè)計(jì)語言,但是它們提供了幫助用戶生成各種程序框架的能力,可快速生成數(shù)據(jù)庫應(yīng)用程序。
4GL可以提高軟件生產(chǎn)率,但選用4GL也存在一些潛在的危險(xiǎn)。許多4GL的一個(gè)設(shè)計(jì)目標(biāo)是端用戶編程(End-UserProgramming),即由使用產(chǎn)品的人編程。如果允許用戶使用4GL編寫訪問數(shù)據(jù)庫的程序,可能會(huì)造成整個(gè)數(shù)據(jù)庫的混亂。例如VisualFoxPro一類的開發(fā)工具,在我國很多非計(jì)算機(jī)專業(yè)人員都經(jīng)過一些培訓(xùn),他們能夠直接使用VisualFoxPro打開數(shù)據(jù)庫文件修改數(shù)據(jù)。使用這一類開發(fā)工具時(shí)應(yīng)該慎重。
3.數(shù)據(jù)庫軟件工具管理信息系統(tǒng)開發(fā)中常使用的另一類開發(fā)工具是數(shù)據(jù)庫軟件工具產(chǎn)品。目前常見的數(shù)據(jù)庫軟件產(chǎn)品有兩類:一類是文件型數(shù)據(jù)庫管理系統(tǒng),如VisualFoxpro、Access,另一類是大型數(shù)據(jù)庫服務(wù)器。文件型數(shù)據(jù)庫系統(tǒng)一般對(duì)異種數(shù)據(jù)庫的訪問以及網(wǎng)絡(luò)環(huán)境的支持較差,不適宜開發(fā)客戶/服務(wù)器模式的系統(tǒng)。大型數(shù)據(jù)庫服務(wù)器是指規(guī)模較大、功能較齊全的大型數(shù)據(jù)系統(tǒng)。目前較典型的系統(tǒng)有ORACLE、SYBASE、INGRES、INFOMIX、DB2、SQLServer等。這類系統(tǒng)功能齊全,容量巨大,適合于大型綜合類數(shù)據(jù)庫系統(tǒng)的開發(fā)。這些數(shù)據(jù)庫服務(wù)器一般在后臺(tái)運(yùn)行,完成數(shù)據(jù)庫的管理,前臺(tái)應(yīng)用程序通過SQL語言向其提交數(shù)據(jù)庫操作請(qǐng)求。這類系統(tǒng)一般配有專門的接口語言,可以允許各類常用的程序設(shè)計(jì)語言(稱為宿主語言)如C語言等訪問數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。
4.客戶/服務(wù)器與瀏覽器/Web服務(wù)器應(yīng)用開發(fā)工具根據(jù)開發(fā)工具所支持的應(yīng)用程序運(yùn)行模式的不同,可以將開發(fā)工具分為傳統(tǒng)開發(fā)工具類、客戶/服務(wù)器工具類、瀏覽器/Web服務(wù)器類等。當(dāng)前大部分開發(fā)工具均支持客戶/服務(wù)器應(yīng)用系統(tǒng)的開發(fā),例如微軟VisualStudio系列開發(fā)工具、Borland公司的Delphi、C++Builder等,可以根據(jù)需要選擇。這一類開發(fā)工具大部分不僅僅是程序設(shè)計(jì)語言的編譯器,而且是一個(gè)完整的開發(fā)平臺(tái)。特別是目前常用的Windows環(huán)境下的開發(fā)工具,提供了良好的可視化開發(fā)環(huán)境,可以方便地構(gòu)造圖形用戶界面、連接各種類型的數(shù)據(jù)庫,減少應(yīng)用系統(tǒng)開發(fā)的工作量。不過當(dāng)前這一類開發(fā)工具大部分與操作系統(tǒng)關(guān)系密切,系統(tǒng)可移植性較差。瀏覽器/Web服務(wù)器模式的應(yīng)用系統(tǒng)是隨著Internet技術(shù)特別是萬維網(wǎng)(WWW,WorldWideWeb)技術(shù)的發(fā)展而發(fā)展起來的,由于其前臺(tái)直接使用Web瀏覽器,無需安裝特殊的軟件,使應(yīng)用系統(tǒng)的維護(hù)工作變得十分簡單,因而應(yīng)用范圍越來越廣。當(dāng)前開發(fā)瀏覽器/Web服務(wù)器模式應(yīng)用系統(tǒng)的技術(shù)有多種,如傳統(tǒng)的CGI技術(shù)、Windows操作系統(tǒng)下的ASP、Linux環(huán)境下的PHP、基于Java技術(shù)的JSP等。
5.可視化開發(fā)技術(shù)可視化開發(fā)是20世紀(jì)90年代軟件界最大的熱點(diǎn)之一。隨著圖形用戶界面的興起,用戶界面在軟件系統(tǒng)中所占的比例也越來越大,有的甚至高達(dá)60%~70%。產(chǎn)生這一問題的原因是圖形界面元素的生成很不方便。為此Windows提供了應(yīng)用程序設(shè)計(jì)接口(API,ApplicationProgrammingInterface),它包含了600多個(gè)函數(shù),極大地方便了圖形用戶界面的開發(fā)。但是在這批函數(shù)中,大量的函數(shù)參數(shù)和數(shù)量更多的有關(guān)常量使基于WindowsAPI的開發(fā)變得相當(dāng)困難。為此,BorlandC++?推出了ObjectWindows編程,采用面向?qū)ο蠹夹g(shù)將WindowsAPI的各部分用對(duì)象類進(jìn)行封裝,大大減少了應(yīng)用程序開發(fā)的工作量。但要掌握它們,對(duì)非專業(yè)人員來說仍是一個(gè)沉重的負(fù)擔(dān)。為此,人們利用WindowsAPI或BorlandC++的ObjectWindows開發(fā)了一批可視化開發(fā)工具??梢暬_發(fā)就是在可視化開發(fā)工具提供的圖形用戶界面上,通過操作界面元素,諸如菜單、按鈕、對(duì)話框、編輯框、單選框、復(fù)選框、列表框和滾動(dòng)條等,由可視化開發(fā)工具自動(dòng)生成應(yīng)用軟件。這類應(yīng)用軟件的工作方式是事件驅(qū)動(dòng)。對(duì)每一事件,由系統(tǒng)產(chǎn)生相應(yīng)的消息,再傳遞給相應(yīng)的消息響應(yīng)函數(shù)。這些消息響應(yīng)函數(shù)是由可視化開發(fā)工具在生成軟件時(shí)自動(dòng)裝入的??梢暬_發(fā)工具可以幫助程序員生成圖形用戶界面及相關(guān)的消息響應(yīng)函數(shù)。通常的方法是先生成基本窗口,并在它的外面以圖標(biāo)形式列出所有其他的界面元素,讓開發(fā)人員挑選后放入窗口指定位置。在逐一安排界面元素的同時(shí),還可以用鼠標(biāo)拖動(dòng),以使窗口的布局更趨合理。圖5.1是Borland公司的Delphi的可視化開發(fā)界面。圖5.1可視化開發(fā)界面由于要生成與各種應(yīng)用相關(guān)的消息響應(yīng)函數(shù),因此可視化開發(fā)只能用于相當(dāng)成熟的應(yīng)用領(lǐng)域,如目前流行的可視化開發(fā)工具基本上用于關(guān)系數(shù)據(jù)庫的開發(fā)。對(duì)一般的應(yīng)用,目前的可視化開發(fā)工具只能提供用戶界面的可視化開發(fā)。至于消息響應(yīng)函數(shù)(或稱腳本),則仍需用通常的高級(jí)語言編寫。只有在數(shù)據(jù)庫領(lǐng)域才提供4GL,使消息響應(yīng)函數(shù)的開發(fā)大大簡化??梢暬_發(fā)是軟件開發(fā)方式上的一場(chǎng)革命,它使軟件開發(fā)從專業(yè)人員的手中解放出來,對(duì)緩解20世紀(jì)80年代中后期爆發(fā)的應(yīng)用軟件危機(jī)有重大作用。目前,Windows操作系統(tǒng)下常見的開發(fā)工具如VisualBasic、VisualFoxPro、VisualC++、Delphi、C++Builder等都提供可視化的開發(fā)環(huán)境,另外,Borland公司已開始將Delphi開發(fā)環(huán)境移植到Linux操作系統(tǒng)下。5.1.2選擇開發(fā)工具的原則選擇合適的開發(fā)工具首先應(yīng)該考慮所選擇的開發(fā)工具所適用的領(lǐng)域,除此之外一般還應(yīng)該遵守下面的基本原則:
(1)最少工作量原則:使用最小代價(jià)讓系統(tǒng)工作。
(2)最少技巧性原則:最好無需培訓(xùn)或很少培訓(xùn)就能編制程序。
(3)最少錯(cuò)誤原則:對(duì)常用的高級(jí)語言來說,要提供結(jié)構(gòu)化控制結(jié)構(gòu)、類型檢查、數(shù)據(jù)結(jié)構(gòu)描述、易于檢驗(yàn)測(cè)試等機(jī)制。
(4)最少維護(hù)原則:對(duì)一般的高級(jí)語言來說,提供軟件包結(jié)構(gòu)和獨(dú)立編譯能力。獨(dú)立編譯意味著可分別編譯各個(gè)程序單元,無需因?yàn)樾薷牧艘粋€(gè)程序單元而重新編譯所有的程序。
(5)減少記憶原則。在系統(tǒng)開發(fā)中選擇開發(fā)工具時(shí)應(yīng)具體考慮下面的幾個(gè)因素:
(1)項(xiàng)目的應(yīng)用領(lǐng)域。大部分信息系統(tǒng)需要進(jìn)行大量的數(shù)據(jù)庫操作,所以選擇的開發(fā)工具應(yīng)該具有強(qiáng)大的數(shù)據(jù)庫操作能力。傳統(tǒng)的高級(jí)語言如C、PASCAL等的數(shù)據(jù)庫操作能力較差,一般不宜選擇。通??蛇x擇一些數(shù)據(jù)庫系統(tǒng)開發(fā)工具,如FoxBASE或一些大型的數(shù)據(jù)庫系統(tǒng)工具,如ORACLE、SYBASE等。目前,Windows操作系統(tǒng)下一些可視化開發(fā)工具雖然使用的是一些傳統(tǒng)的程序設(shè)計(jì)語言,但也提供了強(qiáng)大的數(shù)據(jù)庫操作能力,如微軟公司VisualStudio系列的VisualBasic和VisualC++,以及Borland公司的Delphi和C++Builder等,也是開發(fā)數(shù)據(jù)庫應(yīng)用程序的較好選擇。另外,開發(fā)客戶/服務(wù)器模式或?yàn)g覽器/Web服務(wù)器模式的應(yīng)用程序應(yīng)該注意所選擇的開發(fā)工具是否支持該模式系統(tǒng)的開發(fā)。
(2)用戶的要求。有時(shí)用戶要求使用它們熟悉的語言。
(3)可以使用的編譯程序或開發(fā)環(huán)境。很多開發(fā)工具只能運(yùn)行于特定的軟硬件環(huán)境,例如Windows環(huán)境下一些可視化的開發(fā)工具只能在Windows環(huán)境下使用。如果選擇一般的高級(jí)語言,則必須有運(yùn)行于目標(biāo)系統(tǒng)運(yùn)行環(huán)境的編譯程序。
(4)程序員的經(jīng)驗(yàn)和知識(shí)。如果條件允許,則應(yīng)盡量選擇程序員熟悉的開發(fā)工具。
(5)軟件可移植性要求。如果目標(biāo)系統(tǒng)需要運(yùn)行于不同的環(huán)境,則應(yīng)選擇可移植性較好的程序設(shè)計(jì)語言。Java是一種跨平臺(tái)特性較好的語言,如果希望應(yīng)用程序可以同時(shí)在多種平臺(tái)運(yùn)行,可以選擇Java,但其運(yùn)行效率較低。5.2程序設(shè)計(jì)風(fēng)格5.2.1什么是程序設(shè)計(jì)風(fēng)格程序設(shè)計(jì)風(fēng)格又叫編碼風(fēng)格或編程風(fēng)格。隨著軟件規(guī)模和復(fù)雜性的加大,程序不僅僅要被計(jì)算機(jī)編譯執(zhí)行,還要經(jīng)常被人閱讀。例如,在設(shè)計(jì)測(cè)試用例、查找錯(cuò)誤、改正錯(cuò)誤時(shí),程序都要由程序作者或其他人員閱讀,因此程序的可讀性變得非常重要。程序設(shè)計(jì)風(fēng)格指的是在編程時(shí)應(yīng)該遵守的一些原則。遵守這些原則可以使程序更容易被閱讀和修改。一個(gè)具有良好風(fēng)格的程序在能工作的前提下,應(yīng)具有如下特點(diǎn):
(1)易于測(cè)試和維護(hù)。
(2)易于修改。
(3)設(shè)計(jì)簡單。為了使程序易于理解、測(cè)試和維護(hù),最好的辦法是使程序設(shè)計(jì)簡單。堅(jiān)決摒棄炫耀編程技巧以及把程序設(shè)計(jì)復(fù)雜化的任何想法和做法。
(4)高效。對(duì)程序中效率要求較高的模塊通過改進(jìn)算法、數(shù)據(jù)結(jié)構(gòu)和程序的邏輯結(jié)構(gòu)來提高程序的效率。一個(gè)邏輯正確但雜亂無章的程序是沒有什么價(jià)值的,因?yàn)樗鼰o法供人閱讀,難于測(cè)試、維護(hù)。因此,我們應(yīng)該養(yǎng)成良好的編程風(fēng)格。5.2.2程序的內(nèi)部文檔一個(gè)程序模塊不僅要有外部文檔(如模塊開發(fā)卷宗),而且程序內(nèi)部也應(yīng)該有完整的文檔。完整一致的內(nèi)部文檔是幫助讀者理解程序的重要手段。程序的內(nèi)部文檔包括程序的注解和程序的書寫格式兩個(gè)方面。
1.程序的注解幾乎所有的程序設(shè)計(jì)語言都提供了注解語句,允許程序員對(duì)程序進(jìn)行說明。程序注解主要有兩種類型:序言性注解和功能性注解。序言性注解出現(xiàn)在模塊的開始位置,一般包括:
(1)模塊的全名;
(2)模塊的功能和性能;
(3)調(diào)用格式;
(4)界面描述,包括上級(jí)調(diào)用模塊、本模塊調(diào)用的下級(jí)模塊、輸入輸出參數(shù)的含義和類型以及該模塊所引用的全局變量等;
(5)開發(fā)歷史,如作者、審查者、日期、修改的日期和修改的描述等內(nèi)容。如果一個(gè)模塊規(guī)模較大,其中包含多個(gè)函數(shù)或子程序,則可以在模塊的開始增加目錄性注解,說明模塊中的函數(shù)或子程序的位置和功能。功能性注解是指在程序中每個(gè)具有獨(dú)立功能的程序段之前說明該程序段功能的注解。書寫功能性注解時(shí)應(yīng)該注意以下幾個(gè)方面:
(1)應(yīng)描述獨(dú)立功能的程序塊,而不是對(duì)每個(gè)語句加以說明。
(2)注解不應(yīng)是程序語句的重復(fù),而應(yīng)起補(bǔ)充說明作用。
(3)應(yīng)使用注解符和空行,以便與程序段區(qū)分。
(4)注解應(yīng)與代碼一致。修改程序時(shí)應(yīng)相應(yīng)修改程序中對(duì)應(yīng)程序段的注解,因?yàn)榕c程序功能不一致的注解在其他人閱讀程序時(shí)會(huì)引起誤解。
2.程序的書寫格式程序的書寫格式對(duì)于程序的可讀性也有很多的影響。不同的程序設(shè)計(jì)語言對(duì)程序的書寫格式要求不一,一些程序設(shè)計(jì)語言對(duì)程序書寫格式要求較嚴(yán)格,而有一些程序設(shè)計(jì)語言書寫格式比較隨意。例如C語言程序語句的書寫格式比FORTRAN語言隨意得多。格式凌亂的程序的可讀性將大大降低。通常在項(xiàng)目開發(fā)過程中應(yīng)該對(duì)程序的書寫格式進(jìn)行規(guī)范,以便程序員之間相互協(xié)作交流。程序書寫格式應(yīng)有助于讀者理解程序,一般要注意以下幾點(diǎn):
(1)不要一行書寫多條語句,這樣會(huì)掩蓋程序的邏輯結(jié)構(gòu)。雖然現(xiàn)代大部分的程序設(shè)計(jì)語言都允許在一行中書寫多條語句,但這樣使程序的結(jié)構(gòu)變得不清楚。代碼行最大長度宜控制在70~80個(gè)字符以內(nèi)。代碼行不要過長,否則眼睛看不過來,也不便于打印。
(2)用縮排格式限定語句群的邊界。縮排格式要顯示程序的邏輯結(jié)構(gòu)。常見的一些控制結(jié)構(gòu)都應(yīng)該使用縮排格式,例如循環(huán)語句、條件語句等控制結(jié)構(gòu)的內(nèi)層語句,應(yīng)退格書寫。下面是C語言中的for語句的例子:
for(i=0;i<100;i++)
{ sum+=i;
}條件語句if可按照下面的格式書寫:
if(條件表達(dá)式)
{
語句序列1
}
else
{
語句序列2
}
if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加{},這樣可以防止書寫失誤。
(3)在程序段之間,程序段與注解之間用空行和注解符來分割。在C++程序中,每個(gè)類聲明之后以及每個(gè)函數(shù)定義結(jié)束之后都要加空行。例如:
//空行
voidFunction1(…)
{?
}
//空行
voidFunction2(…)
{
…
}
//空行
voidFunction3(?)
{
…
}在一個(gè)函數(shù)體內(nèi),邏輯上密切相關(guān)的語句之間不加空行,其他地方應(yīng)加空行分隔。例如:
//空行
while(condition)
{
statement1;
//空行
if(condition)
{
statement2;
}
else
{
statement3;
}
//空行
statement4;
}有時(shí)也可以借助于一些自動(dòng)工具來實(shí)現(xiàn)一致的程序格式。常見的一些格式化工具通??梢詫?duì)程序中的注解以及控制語句的縮排形式進(jìn)行規(guī)范。5.2.3標(biāo)識(shí)符命名的風(fēng)格標(biāo)識(shí)符的命名是程序風(fēng)格的重要內(nèi)容。標(biāo)識(shí)符包括變量名、函數(shù)名、子程序名、文件名等。標(biāo)識(shí)符的選擇不應(yīng)該僅僅滿足程序設(shè)計(jì)語言的語法限制,好的標(biāo)識(shí)符對(duì)程序的可讀性有很大的影響。變量是程序設(shè)計(jì)中用得最多的標(biāo)識(shí)符之一,下面我們主要討論變量命名的風(fēng)格。
1.變量命名的一般原則初學(xué)程序設(shè)計(jì)語言的人往往習(xí)慣使用一些比較隨意的變量名,如x、y、x1等。當(dāng)程序規(guī)模較大時(shí),這一類變量看起來很混亂,從變量名上難以判斷變量的類型和作用,而且往往會(huì)出現(xiàn)很多相似的變量名,使程序的可讀性降低。軟件開發(fā)規(guī)范要求變量命名應(yīng)該做到以下幾點(diǎn):
(1)使用有意義的變量名。變量命名應(yīng)能反映變量的意義和含義,以使它能正確地提示該程序?qū)ο笏淼膶?shí)體,并能幫助讀者理解和記憶。例如:
d=s*t;就不如
distance=speed*time;
(2)使用不易混淆的變量名。過于相似的變量名,容易引起輸入錯(cuò)誤和誤解。
(3)同一變量名不要具有多種含義。這種情況使讀者在閱讀程序時(shí)易于誤解,也不便于修改。
(4)顯式說明一切變量。為了易于理解和避免出錯(cuò),所有變量都應(yīng)該顯式說明后再使用。有些程序設(shè)計(jì)語言允許對(duì)變量名不進(jìn)行說明就直接使用,例如FORTRAN語言、BASIC語言等。在使用這些語言編程時(shí)應(yīng)特別注意,由于變量可以不定義直接使用,在輸入源程序時(shí)如果變量名輸入錯(cuò)誤,編譯器也不能檢測(cè)。其他一些高級(jí)語言如C、PASCAL等程序設(shè)計(jì)語言不允許使用未定義的變量,在編程時(shí)可避免這一類錯(cuò)誤。
(5)對(duì)變量名作出注解說明其含義。
2.匈牙利命名規(guī)則近年來影響較大的標(biāo)識(shí)符命名規(guī)則是匈牙利命名規(guī)則,它是由匈牙利人CharlesSimonyi于1972年發(fā)明的一種給變量取名字的方式。最初這種命名規(guī)則并沒有得到足夠的重視,自從微軟公司在Windows中使用了該命名規(guī)則之后,才得到廣泛的應(yīng)用。下面是WindowsAPI中函數(shù)CreateWindow的原型說明:
HWNDCreateWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName,
DWORDdwStyle,intx,inty,intnWidth, intnHeight,
HWNDhWndParent,HMENUhMenu,HANDLEhInstance,LPVOIDlpParam);這里函數(shù)的形式參數(shù)的名稱使用了匈牙利命名規(guī)則,例如第一個(gè)參數(shù)lpClassName由兩部分構(gòu)成,lp表示該參數(shù)的數(shù)據(jù)類型,ClassName表示該參數(shù)的含義。一般來講,匈牙利命名規(guī)則中變量名的構(gòu)成如下:變量名=<類型><限定詞>其中“類型”為變量的數(shù)據(jù)類型,“類型”使用小寫的英文字母表示,如上面的lp(LargePointer)。“限定詞”表示變量的含義,區(qū)分同一類型的不同變量。限定詞的命名應(yīng)符合上面所講軟件開發(fā)規(guī)范的要求。限定詞的第一個(gè)字母必須是大寫英文字母。類型和限定詞之間沒有任何分割符,就用限定詞的第一個(gè)大寫字母來標(biāo)定邊界。例如,上面函數(shù)中形式參數(shù)hMenu,h是類型(表示句柄handle),Menu是限定詞(表示菜單)。匈牙利命名規(guī)則中的“類型”類似于傳統(tǒng)程序設(shè)計(jì)語言中的數(shù)據(jù)類型(如C語言的int、float),但其概念更廣,一般可分為圖5.2中所示的三種。圖5.2類型構(gòu)成
(1)基類型:最基本的類型稱為基類型?;愋偷拿Q定義為其描述的縮寫,通常為1~2個(gè)字符。有些常用的基類型有約定的用法,如:
n:整型數(shù)據(jù),如C語言中的int;
sz:以零結(jié)束的字符串(C語言中以?'\0'?結(jié)束的字符串);
f:標(biāo)志(flag)。
(2)加類型前綴構(gòu)成的類型:在基類型前加上類型前綴就構(gòu)成一個(gè)新的類型。常用的類型前綴有:
p:指針,例如pc表示指向字符型數(shù)據(jù)的指針類型;
c:計(jì)數(shù)(count);
i:數(shù)組下標(biāo);
d:偏移量。
(3)加后綴構(gòu)成新類型——子類型:在基類型后面加上一個(gè)或兩個(gè)小寫英文字母作為對(duì)基類型的進(jìn)一步規(guī)定。例如:x表示坐標(biāo)類型,xi表示以英寸計(jì)的坐標(biāo)類型。如果通過加上類型前綴或后綴的方法所構(gòu)成的類型表達(dá)式變得很長,則應(yīng)該定義一個(gè)新的基類型。匈牙利命名規(guī)則中的限定詞可以使用完整的英文單詞。必要時(shí)也可以使用英文單詞的縮寫或者將多個(gè)英文單詞連起來使用(每個(gè)單詞的第一個(gè)字母采用大寫)。例如上面例子中的hWndParent,其中Wnd為英文Window的縮寫。常用的一些縮寫限定詞如:
Temp(或Tmp、T) 表示臨時(shí)變量
Prev(或Prv) 前一個(gè)(Previous)
Next 下一個(gè)
Dest 目標(biāo)
Src 源限定詞也可以使用數(shù)字,有時(shí)也可以是空白。選擇限定詞應(yīng)該遵循以下幾條原則:
(1)對(duì)于布爾變量,限定詞應(yīng)描述其值為“真”時(shí)的情形,以便于閱讀程序。例如,fOpen表示文件打開是否成功,則下面的程序片斷在閱讀時(shí)更易于理解:
if(fOpen){ …/*文件打開成功執(zhí)行的操作*/
}
else{ …/*文件打開失敗執(zhí)行的操作*/
}換一個(gè)相反的限定詞Fail,讀者可以體會(huì)一下其中的區(qū)別。
(2)對(duì)于枚舉集合中的值,逐一描述其元素。例如一個(gè)表示顏色的枚舉類型,用co表示類型,該類型的常量元素可以命名為coRed、coGreen等。微軟公司在Windows中,常量一般采用大寫英文字母表示。例如Windows消息常量,均以WM_開始(WindowsMessage的縮寫),后面跟表示該常量含義的限定詞,如WM_ACTIVATE表示窗口被激活的消息,WM_CHAR表示鍵盤輸入消息。
(3)在與其他類型有關(guān)的情況下,也可以用該“其他類型”作為限定詞,此時(shí)要將其第一個(gè)字母大寫。在使用匈牙利命名規(guī)則時(shí)應(yīng)注意的是,有些程序設(shè)計(jì)語言允許的標(biāo)識(shí)符長度較短,此時(shí)限定詞應(yīng)注意采用縮寫。特別要注意的是,有些程序設(shè)計(jì)語言,如FoxBASE等,當(dāng)變量名長度超出規(guī)定的長度時(shí),將超出部分截?cái)喽唤o出任何警告信息,往往會(huì)將不同的變量名當(dāng)作同一個(gè)變量。子程序或函數(shù)的命名方法可以參照變量命名方法。函數(shù)名可由三個(gè)部分構(gòu)成:函數(shù)名=<類型><作用><參數(shù)>以上三個(gè)部分每一部分均可為空,每一部分的每一個(gè)單詞均以大寫字母開頭。完整列出三個(gè)部分往往會(huì)使函數(shù)名或子程序名變得很長,造成使用上的不便。如果參數(shù)個(gè)數(shù)很多,可列出主要的一個(gè)或多個(gè)參數(shù)。微軟公司的WindowsAPI函數(shù)名稱通常只有<作用>部分,例如上面例子中的CreateWindow。目前常用的高級(jí)語言如C++、PASCAL對(duì)函數(shù)的調(diào)用形式的檢查一般比較嚴(yán)格,參數(shù)或類型使用錯(cuò)誤大部分可由編譯器檢查出來,特別是目前一些開發(fā)工具,如Delphi、VisualC++?等還可以在源程序輸入時(shí)實(shí)時(shí)給出函數(shù)原型的提示,因此在函數(shù)名中包含類型或參數(shù)信息意義不大。5.2.4語句構(gòu)造模塊設(shè)計(jì)階段確定了模塊內(nèi)部的邏輯結(jié)構(gòu),編碼階段則根據(jù)程序的邏輯結(jié)構(gòu)構(gòu)造語句。構(gòu)造語句應(yīng)該遵守以下原則:
(1)語句應(yīng)該簡單而直接,不要為了提高效率而使程序變得復(fù)雜或難以理解。早期的計(jì)算機(jī)存儲(chǔ)空間和機(jī)時(shí)往往十分昂貴,程序員往往為了減少程序運(yùn)行時(shí)所占用的存儲(chǔ)空間和運(yùn)行時(shí)間而使用一些編程技巧,使程序變得難以理解。請(qǐng)看下面的C程序片斷:
a=a?b;
b=a+b;
a=b?a;上面三行C語言程序?qū)崿F(xiàn)了變量a、b值的交換,省去了使用中間變量,程序的功能變得很不直觀,難以理解。通常交換變量可采用中間變量實(shí)現(xiàn):
c=a;
a=b;
b=c;隨著計(jì)算機(jī)硬件價(jià)格的下降,效率的重要性在很多時(shí)候不再是第一位,而隨著軟件規(guī)模的擴(kuò)大,程序的可讀性成為衡量軟件質(zhì)量的一個(gè)極其重要的因素。對(duì)程序效率的追求,主要依靠好的設(shè)計(jì)和優(yōu)秀的算法來達(dá)到,而不能希望從語句的改進(jìn)方面獲得很大的提高。
(2)不要為了節(jié)省空間而將多條語句寫成一行。將多條語句放在一行并不能使軟件的可執(zhí)行代碼減小,反而會(huì)降低程序的可讀性。
(3)盡量避免復(fù)雜的條件測(cè)試。復(fù)雜的條件表達(dá)式不僅影響程序的可讀性,而且不易測(cè)試,難以保證其正確性。
(4)盡量減少“非”條件的測(cè)試。“非”條件的測(cè)試往往會(huì)引起閱讀上的困難。在使用“非”條件測(cè)試時(shí)應(yīng)注意條件表達(dá)式中變量或函數(shù)名限定詞的選擇應(yīng)遵守5.2.3節(jié)中布爾變量限定詞的命名原則。下面是C語言中的一個(gè)條件語句的例子:
if(!strcmp(s1,s2))這種寫法在C語言中代碼效率較高,因而在一定的范圍內(nèi)流行很廣,可是它的風(fēng)格很差。如果兩個(gè)字符串相等,那么返回真。但是“!”的使用則表明不相等的時(shí)候才執(zhí)行if后面的語句。這個(gè)問題可以通過宏定義來解決:
#defineStreq(s1,s2)(strcmp((s1),(s2))==0)現(xiàn)在上面的條件語句可改寫為
if(Streq(s1,s2))雖然程序代碼的效率較低,但程序變得易于閱讀理解。
(5)避免大量使用循環(huán)嵌套和條件嵌套。大量的嵌套使程序的邏輯變得很復(fù)雜,不易理解。另外要注意在使用嵌套時(shí)應(yīng)使用begin…end(Pascal語言)、花括號(hào)(C語言)等將同一層次的語句標(biāo)識(shí)出來,防止二義性。例如,下面的C語言程序結(jié)構(gòu)片斷:
if(條件表達(dá)式1)
{ if(條件表達(dá)式2)
語句1
}
else
語句2在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。例如下面兩個(gè)C程序片段,程序1長循環(huán)在最外層,效率低,而程序2長循環(huán)在最內(nèi)層,效率較高。程序1:
for(row=0;row<100;row++)
{
for(col=0;col<5;col++)
{
sum=sum+a[row][col];
}
} 程序2:
for(col=0;col<5;col++)
{
for(row=0;row<100;row++)
{
sum=sum+a[row][col];
}
}
(6)利用括號(hào)使邏輯表達(dá)式和算術(shù)表達(dá)式的運(yùn)算次序直觀清晰。一些程序設(shè)計(jì)語言運(yùn)算符的結(jié)合性和優(yōu)先性很復(fù)雜,難以記憶,即使你能夠保證它的正確性,也應(yīng)該使用括號(hào)使運(yùn)算順序更直觀清晰。這樣做不僅可以使程序更易于他人閱讀,而且可以杜絕錯(cuò)誤。
(7)不要為追求效率而使用中間變量。有時(shí)可以使用中間變量來暫存某些運(yùn)算結(jié)果,減少程序運(yùn)算的次數(shù),提高程序運(yùn)行的效率,但中間變量的含義不明確,在閱讀時(shí)不易理解。例如,下面的程序運(yùn)算a=(b-c2)2:
a1=(b-c*c);
a=a1*a1;這里引進(jìn)了中間變量a1暫存b-c2的值,減少了運(yùn)算的次數(shù),但破壞了原來直接了當(dāng)?shù)谋磉_(dá)式,而且分成了兩條語句,使程序的易理解性受到了影響。
(8)不要用浮點(diǎn)數(shù)作相等比較。浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部表示方法與整型數(shù)據(jù)不同,它是不精確的。使用浮點(diǎn)數(shù)進(jìn)行相等比較往往不能得到預(yù)期的結(jié)果。請(qǐng)看下面的C語言程序:
main(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版城市更新項(xiàng)目施工環(huán)保及文明施工協(xié)議3篇
- 2025年度高標(biāo)準(zhǔn)住宅木工支模與裝修一體化承包協(xié)議4篇
- 2025年度個(gè)人設(shè)備租賃借款合同模板7篇
- 2025年染料中間體項(xiàng)目可行性研究報(bào)告
- 個(gè)人信用貸款合同2024年度3篇
- 2025年度挖掘機(jī)交易信息服務(wù)平臺(tái)合作協(xié)議4篇
- 2025版木跳板生產(chǎn)設(shè)備采購合同示范文本4篇
- 二零二五年度鐘點(diǎn)工家庭保姆綜合服務(wù)合同
- 二零二五年度港口集裝箱運(yùn)輸公司股權(quán)轉(zhuǎn)讓合同
- 2025年度酒店客房滿意度調(diào)查與改進(jìn)合同
- 2024年高考八省聯(lián)考地理適應(yīng)性試卷附答案解析
- 足浴技師與店內(nèi)禁止黃賭毒協(xié)議書范文
- 中國高血壓防治指南(2024年修訂版)要點(diǎn)解讀
- 2024-2030年中國光電干擾一體設(shè)備行業(yè)發(fā)展現(xiàn)狀與前景預(yù)測(cè)分析研究報(bào)告
- 湖南省岳陽市岳陽樓區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末數(shù)學(xué)試題(解析版)
- 農(nóng)村自建房安全合同協(xié)議書
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語言溝通發(fā)展量表(長表)-詞匯及手勢(shì)(8-16月齡)
評(píng)論
0/150
提交評(píng)論