




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第五章程序編碼本章內(nèi)容作為一般掌握內(nèi)容前面所介紹的軟件工程開發(fā)階段都是為了一個目標:將軟件表示變換為計算機能夠“理解”的形式。本階段的內(nèi)容就是把“設(shè)計”變換成用程序設(shè)計語言編寫的程序。引言《亮劍》中有一句話:“國民黨參謀部的作戰(zhàn)方針往往都是英明的,只是讓一群蠢材給執(zhí)行了”。據(jù)說,上帝把每一個人都創(chuàng)造為美麗的天使,只是天使在下凡時,有人腳先落地,而有的人卻是臉先著地。上面兩個笑話說明:“無論你預(yù)先設(shè)計的有多么完美,沒有正確、良好的執(zhí)行也是無用的”。引言程序編碼階段的目標就是:選定程序設(shè)計語言,以規(guī)范、科學(xué)的方法將模塊的設(shè)計翻譯成可執(zhí)行的程序。模塊的過程性描述(不可執(zhí)行的)源程序(可執(zhí)行的)編碼引言本章主要內(nèi)容5.1對源程序的質(zhì)量要求5.2程序設(shè)計語言的選擇5.3結(jié)構(gòu)化程序設(shè)計5.4程序設(shè)計風(fēng)格5.5程序效率5.1對源程序的質(zhì)量要求1.正確性2.易理解、易修改(程序有良好的結(jié)構(gòu)和設(shè)計風(fēng)格)程序設(shè)計語言程序設(shè)計語言的分類:程序設(shè)計語言高級語言低級語言面向過程的語言如:C語言Pascal面向?qū)ο笳Z言如:JavaC++匯編語言機器語言5.2程序設(shè)計語言的選擇程序設(shè)計語言的分類語言級別語言硬件CPU)依賴性由強到弱描述數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性(越來越高)描述軟件特征的層次(由低到高)第一代機器語言Z80,M68008088,M680000,1代碼計算細節(jié)第二代匯編語言字符指令系統(tǒng)第三代(工業(yè)時代的產(chǎn)物)高級語言功能強大的操作系統(tǒng),編譯和解釋后的.exe通用于多種機器數(shù)組,字符串,帶鏈表等動態(tài)數(shù)據(jù)結(jié)構(gòu)。不支持大型數(shù)據(jù)共享過程性描述,“怎樣做”第四代(信息時代的產(chǎn)物)OO、SQL等4GL語言O(shè)OA,OOD,領(lǐng)域分析,行為模型,關(guān)系模型,如ROSE、UML、USECASE等支持抽象數(shù)據(jù)類型;支持大型數(shù)據(jù)共享和大型數(shù)據(jù)庫等高效處理機制;能夠滿足多功能、一體化的要求(不僅具有強大的控制邏輯、數(shù)據(jù)操作能力,還應(yīng)包括生成和處理報表,圖形、分析統(tǒng)計等功能)非過程性語言,面向應(yīng)用,只須說明“做什么”5.2程序設(shè)計語言的選擇5.2程序設(shè)計語言的選擇選擇程序設(shè)計語言的標準要綜合考慮以下各方面因素來決定:1)從程序員方面考慮:
應(yīng)選擇一種程序員熟悉的語言。2)從用戶方面考慮如果所開發(fā)的系統(tǒng)的維護工作是由用戶來完成的,應(yīng)選擇一種既有利于系統(tǒng)功能實現(xiàn),又是用戶所熟悉的程序設(shè)計語言。5.2程序設(shè)計語言的選擇3)從軟件的可移植性方面考慮應(yīng)選擇一種標準化程度高,并且程序的可移植性好的語言實現(xiàn)設(shè)計。4)從應(yīng)用領(lǐng)域方面考慮不同的語言有不同的適用范圍,適合的程序設(shè)計語言所提供的環(huán)境有利于程序員實現(xiàn)功能,在一定程度上簡化編程,且有利于后期的測試和維護工作。5.2程序設(shè)計語言的選擇選擇語言的原則為:1.最少工作量原則;2.最少技巧性原則;3.最少錯誤原則;4.最少維護原則;5.最少記憶原則。5.3結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計采用自頂向下、逐步細化的設(shè)計方法和單入口、單出口的控制結(jié)構(gòu)。這種控制結(jié)構(gòu)包括有:順序選擇循環(huán)1.關(guān)于GOTO語句的爭論2.結(jié)構(gòu)化程序設(shè)計的原則使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序;選用的控制結(jié)構(gòu)只準許有一個入口和一個出口;程序語句組成容易識別的塊(Block),每塊只有一個入口和一個出口;復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)進行組合嵌套來實現(xiàn);嚴格控制GOTO語句。5.3結(jié)構(gòu)化程序設(shè)計3.結(jié)構(gòu)化程序設(shè)計方法:自頂向下、逐步求精。采用從抽象→具體的方法,逐步分解,細化問題,逐步導(dǎo)出可執(zhí)行的源代碼。不提倡直接編寫源程序。例如:設(shè)計一個函數(shù)“核對密碼”。intcheckPwd(charid[10],charpwd[10]){
根據(jù)id提取用戶正確密碼truepwd;
與pwd比較是否一致,并返回信號(正確返回1;錯誤返回0)。}5.3結(jié)構(gòu)化程序設(shè)計進一步細化intcheckPwd(charid[10],charpwd[10]){ 連接到數(shù)據(jù)庫; 根據(jù)id查詢出用戶正確密碼; 保存到變量truepwd中; 關(guān)閉數(shù)據(jù)庫;
if(pwd==truepwd) return1; else return0;}再進一步細化…………(略)5.4程序設(shè)計風(fēng)格程序的良好風(fēng)格包括:源程序文檔化數(shù)據(jù)說明語句說明輸入/輸出方法5.4.1源程序文檔化——標識符
標識符的命名
標識符,包括模塊名、變量名、常量名、標號名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。這些名字應(yīng)能反映它所代表的實際東西,應(yīng)有一定實際意義。例如,表示次數(shù)的量用Times,表示總量用Total,表示平均值用Average,表示和的量用Sum等。名字不是越長越好,應(yīng)當(dāng)選擇精煉的意義明確的名字。必要時可使用縮寫名字,但注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。5.4.1源程序文檔化——標識符在一個程序中,一個變量只應(yīng)用于一種用途。例:new.balance.accounts.payable
//名字太長nbap
//需加注釋N//?附:東軟推薦的命名方法避免容易被主觀解釋的難懂的名稱,如AnalyzeThis()。這樣的名稱會導(dǎo)致多義性。在類屬性的名稱中包含類名是多余的,如Book.BookTitle。而是應(yīng)該使用Book.Title。只要合適,在變量名的末尾或開頭加計算限定符(Avg、Sum、Min、Max、Index)。在變量名中使用互補對,如min/max、begin/end。東軟推薦的命名方法布爾變量名應(yīng)該包含Is,這意味著Yes/No或True/False值,如fileIsFound。在命名狀態(tài)變量時,避免使用諸如Flag的術(shù)語。即使對于可能僅出現(xiàn)在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。如:Fori=1To7。而是使用命名常數(shù),如Fori=1ToNUM_DAYS_IN_WEEK以便于維護和理解。5.4.1源程序文檔化——注釋程序的注釋程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。注釋絕不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的1/3到1/2,甚至更多。注釋分為序言性注釋和功能性注釋。5.4.1源程序文檔化——注釋序言性注釋通常置于每個程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對于理解程序本身具有引導(dǎo)作用。包括:程序標題;有關(guān)本模塊功能和目的的說明;主要算法;接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單;有關(guān)數(shù)據(jù)描述:重要的變量及其用途,約束或限制條件,以及其它有關(guān)信息;模塊位置:在哪一個源文件中,或隸屬于哪一個軟件包;開發(fā)簡歷:模塊設(shè)計者,復(fù)審者,復(fù)審日期,修改日期及有關(guān)說明等。5.4.1源程序文檔化——注釋功能性注釋功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。要點:描述一段程序,而不是每一個語句;用縮進和空行,使程序與注釋容易區(qū)別;注釋要正確。附:東軟的注釋原則修改代碼時,總是使代碼周圍的注釋保持最新。在每個例程的開始,提供標準的注釋樣本以指示例程的用途、假設(shè)和限制。注釋樣本應(yīng)該是解釋它為什么存在和可以做什么的簡短介紹。避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。避免雜亂的注釋,如一整行星號。而是應(yīng)該使用空白將注釋同代碼分開。避免在塊注釋的周圍加上印刷框。這樣看起來可能很漂亮,但是難于維護。在部署發(fā)布之前,移除所有臨時或無關(guān)的注釋,以避免在日后的維護工作中產(chǎn)生混亂。如果需要用注釋來解釋復(fù)雜的代碼節(jié),請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。在編寫注釋時使用完整的句子。注釋應(yīng)該闡明代碼,而不應(yīng)該增加多義性。在編寫代碼的同時就注釋,因為以后很可能沒有時間這樣做。另外,如果有機會復(fù)查已編寫的代碼,在今天看來很明顯的東西六周以后或許就不明顯了。附:東軟的注釋原則避免多余的或不適當(dāng)?shù)淖⑨?,如幽默的不主要的備注。使用注釋來解釋代碼的意圖。注釋代碼中不十分明顯的任何內(nèi)容。為防止問題反復(fù)出現(xiàn),對錯誤修復(fù)和解決方法代碼總是使用注釋,尤其在團隊環(huán)境中。對由循環(huán)和邏輯分支組成的代碼使用注釋。這些是幫助源代碼讀者的主要方面。在整個應(yīng)用程序中,使用統(tǒng)一樣式來構(gòu)造注釋。附:東軟的注釋原則用空白將注釋同注釋分隔符分開。在沒有顏色提示的情況下查看注釋時,這樣做會使注釋很明顯且容易被找到。在所有的代碼修改處加上修改標識的注釋。為了使層次清晰,在閉合的右花括號后注釋該閉合所對應(yīng)的起點。如:namespaceLangchao.Procument.Web
{}//namespaceLangchao.Procument.Web附:東軟的注釋原則5.4.1源程序文檔化——視覺組織
視覺組織恰當(dāng)?shù)乩每崭?,可以突出運算的優(yōu)先性,避免發(fā)生運算的錯誤。例如,將表達式
(A<-17)ANDNOT(B<=49)ORC寫成
(A<-17)ANDNOT(B<=49)ORC自然的程序段之間可用空行隔開;5.4.1源程序文檔化——視覺組織移行也叫做向右縮格。它是指程序中的各行不必都在左端對齊。對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。例如,兩重選擇結(jié)構(gòu)嵌套,寫成下面的移行形式,層次就清楚得多。
IF(…)THEN
IF(…)THEN
……
ELSE
……
ENDIF
……
ELSE
……
ENDIF5.4.2數(shù)據(jù)說明在設(shè)計階段確定了數(shù)據(jù)結(jié)構(gòu)的組織及其復(fù)雜性。在編寫程序時,則需要注意數(shù)據(jù)說明的風(fēng)格。為了使程序中數(shù)據(jù)說明更易于理解和維護,必須注意以下幾點:數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化說明語句中變量安排有序化使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)5.4.2數(shù)據(jù)說明(1)數(shù)據(jù)說明的次序規(guī)范化數(shù)據(jù)說明次序規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測試,排錯和維護。原則上,數(shù)據(jù)說明的次序與語法無關(guān),其次序是任意的。但出于閱讀、理解和維護的需要,最好使其規(guī)范化,使說明的先后次序固定。如按照數(shù)據(jù)類型或者數(shù)據(jù)結(jié)構(gòu)來確定說明的次序5.4.2數(shù)據(jù)說明(2)說明語句中變量安排有序化當(dāng)多個變量名在一個說明語句中說明時,應(yīng)當(dāng)對這些變量按字母的順序排列。例如,把integersize,length,width,cost,price;
寫成
integercost,length,price,size,width;5.4.2數(shù)據(jù)說明(3)使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)如果設(shè)計了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),應(yīng)當(dāng)使用注釋來說明在程序?qū)崿F(xiàn)時這個數(shù)據(jù)結(jié)構(gòu)的固有特點。例如,對鏈表結(jié)構(gòu)和C、C++中用戶自定義的數(shù)據(jù)類型,都應(yīng)當(dāng)在注釋中做必要的補充說明。
在設(shè)計階段確定了軟件的邏輯流結(jié)構(gòu),但構(gòu)造單個語句則是編碼階段的任務(wù)。語句構(gòu)造力求簡單,直接,不能為了片面追求效率而使語句復(fù)雜化。5.4.3語句結(jié)構(gòu)5.4.3語句結(jié)構(gòu)
在一行內(nèi)只寫一條語句在一行內(nèi)只寫一條語句,并且采取適當(dāng)?shù)囊菩懈袷剑钩绦虻倪壿嫼凸δ茏兊酶用鞔_。許多程序設(shè)計語言允許在一行內(nèi)寫多個語句。但這種方式會使程序可讀性差。因而不可取。
例如,有一段排序程序FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;由于一行中包括了多個語句,掩蓋了程序的循環(huán)結(jié)構(gòu)和條件結(jié)構(gòu)。//改進布局FORI:=0TON-1DOBEGIN
T:=I;
FORJ:=I+1TONDO
IF(A[J]<A[T])THENT:=J;
IFT≠ITHEN
BEGIN
WORK:=A[T];
A[T]:=A[I];
A[I]:=WORK;
END
END;5.4.3語句結(jié)構(gòu)5.4.3語句結(jié)構(gòu)盡量只采用三種基本的控制結(jié)構(gòu)來編寫程序。避免采用過于復(fù)雜的條件測試。盡量減少使用“否定”條件的條件語句。避免使用大量循環(huán)嵌套和條件嵌套利用括號使邏輯表達式或算術(shù)表達式的運算次序清晰直觀用邏輯表達式代替分支嵌套。注意計算機浮點數(shù)運算的特點,例如,浮點數(shù)運算10.0*0.1通常不等于1.0。不要單獨進行浮點數(shù)的比較。用它們做比較,其結(jié)果常常發(fā)生異常情況。5.4.3語句結(jié)構(gòu)在程序中應(yīng)有出錯處理功能。確保所有變量在使用前都被初始化。程序編寫首先應(yīng)當(dāng)考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。不要為了追求效率而喪失了清晰性。事實上,程序效率的提高主要應(yīng)通過選擇高效的算法來實現(xiàn)。首先要保證程序正確,然后才要求提高速度。反過來說,在使程序高速運行時,首先要保證它是正確的。5.4.4輸入和輸出輸入和輸出的方式和格式應(yīng)當(dāng)盡可能方便用戶的使用。不論是批處理的輸入/輸出方式,還是交互式的輸入/輸出方式,在設(shè)計和編碼時都應(yīng)考慮下列原則:對所有輸入數(shù)據(jù)都要進行檢驗,識別錯誤的輸入,以保證每個數(shù)據(jù)的有效性檢查輸入項的各種重要組合的合理性,必要時報告輸入狀態(tài)信息使得輸入的步驟和操作盡可能簡單,并保持簡單的輸入格式應(yīng)允許缺省值5.4.4輸入和輸出輸入一批數(shù)據(jù)時,最好使用輸入結(jié)束標志在交互式輸入/輸出方式輸入時,在屏幕上使用提示符明確提示交互輸入的請求,指明可使用選擇項的種類和取值范圍,在屏幕上給出狀態(tài)信息程序設(shè)計語言對格式有嚴格要求時,應(yīng)保持輸入格式的一致給所有的輸出加注解,并設(shè)計輸出報表格式5.5程序效率程序的效率是指程序的執(zhí)行速度及程序所需占用的內(nèi)存的存儲空間。程序編碼是最后提高運行速度和節(jié)省存儲的機會,因此在此階段不能不考慮程序的效率。算法影響程序效率。5.5程序效率——算法對效率的影響
源程序的效率與詳細設(shè)計階段確定的算法的效率直接相關(guān)。在詳細設(shè)計翻譯轉(zhuǎn)換成源程序代碼后,算法效率反映為程序的執(zhí)行速度和存儲容量的要求。轉(zhuǎn)換過程中的指導(dǎo)原則是:在編程序前,盡可能化簡有關(guān)的算術(shù)表達式和邏輯表達式;仔細檢查算法中嵌套的循環(huán),盡可能將某些語句或表達式移到循環(huán)外面;5.5程序效率——算法對效率的影響盡量避免使用多維數(shù)組;盡量避免使用指針和復(fù)雜的表;不要混淆數(shù)據(jù)類型,避免在表達式中出現(xiàn)類型混雜;盡量采用整數(shù)算術(shù)表達式和布爾表達式;選用等效的高效率算法。5.5程序效率——存儲效率在大中型計算機系統(tǒng)中,存儲限制不再是主要問題。在這種環(huán)境下,對內(nèi)存采取基于操作系統(tǒng)的分頁功能的虛擬存儲管理,給軟件提供了巨大的邏輯地址空間。采用結(jié)構(gòu)化程序設(shè)計,將程序功能合理分塊,使每個模塊或一組密切相關(guān)模塊的程序體積大小與每頁的容量相匹配,可減少頁面調(diào)度,減少內(nèi)外存交換,提高存儲效率。選擇可生成較短目標代碼且存儲壓縮性能優(yōu)良的編譯程序,有時需采用匯編程序。提高存儲效率的關(guān)鍵是程序的簡單性。習(xí)題【1】判斷以下針對“好的編碼風(fēng)格”的說法是否正確:通常情況下,程序應(yīng)做到清晰第一、效率第二。變量名要見名知意
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度行政合同概念與特征解析及實施細則
- 2025年度短視頻演員形象代言合同書
- 二零二五年度商鋪裝修工程保修與維修合同
- 二零二五年度生活服務(wù)類電商平臺商家入駐合作協(xié)議
- 2025年度講師國際交流與合作合同
- 二零二五年度房地產(chǎn)銷售資料打印復(fù)印合同協(xié)議
- 二零二五年度高科技產(chǎn)業(yè)合作誠意金合同
- 2025年度電商平臺店鋪合作經(jīng)營協(xié)議
- 二零二五年度個人房屋買賣資金監(jiān)管協(xié)議
- 二零二五年度商鋪租賃合同租賃物損壞賠償協(xié)議
- 新概念二-第24課課件
- 《土地管理法》課件
- 項目使用林地可行性報告
- 網(wǎng)絡(luò)安全技術(shù)服務(wù)方案
- 明天版幼兒園大班語言領(lǐng)域《尖嘴巴和短尾巴》課件
- 文旅項目招商方案
- AC800M特點優(yōu)勢課件
- 2024屆湖南省高三九校聯(lián)盟第一次聯(lián)考數(shù)學(xué)試卷(含答案)
- 電氣工程及其自動化的發(fā)展趨勢
- 【基于近些年數(shù)據(jù)的千禾味業(yè)公司盈利能力分析案例(9000字論文)】
- 人教版 七年級下冊 歷史 期中測試(一)
評論
0/150
提交評論