版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第十一章 編碼和語言選擇,軟件工程,引言,軟件工程編碼階段的任務是將詳細設計翻譯成計算機可以“理解”并且最終可運行的代碼。 根據(jù)基本機制可將程序設計語言分為過程式程序設計語言、函數(shù)式程序設計語言、邏輯程序設計語言和面向?qū)ο蟪绦蛟O計語言四類。 編碼階段不應單純追求編碼效率,而應全面考慮編寫程序、測試程序、說明程序和修改程序等各項工作。 影響編碼質(zhì)量的因素包括編程語言、編程準則和編程風格,它們對程序的可靠性、可讀性、可測試性和可維護性都將產(chǎn)生深遠的影響。,通常把編碼和測試統(tǒng)稱為實現(xiàn)。 編碼(Coding):把軟件設計翻譯成計算機可以理解的形式用某種程序設計語言書寫的程序 編碼階段涉及的問題 語言選
2、擇 編碼風格 編程準則 程序效率,引言,目的 用選定的程序設計語言將模塊的過程性描述翻譯為用該語言書寫的源程序 編碼 模塊的過程性描述 源程序 (不可執(zhí)行的) (可執(zhí)行的),編碼概述,編碼的過程 熟悉所選語言的功能和程序開發(fā)環(huán)境 仔細閱讀設計文檔詳細設計 弄清要編碼的模塊的外部接口與內(nèi)部過程 對編碼產(chǎn)生的源程序的要求 正確可靠 簡明清晰 有較高的執(zhí)行效率,編碼概述,效率與清晰是一對矛盾的要求 要優(yōu)先考慮程序的清晰性和可理解性,對編碼的有關說明,編碼 要求,清晰第一 (對大多數(shù)模塊),效率第一 (對個別模塊),用單入/單出保證控制流的直線性 用限制GOTO保證控制流的局部性,用GOTO與其它技巧
3、消除重復編碼,編碼概述,設計是編碼的先導,要復審設計 編碼要熟悉所用的語言 要恰倒好處利用編程語言的特點 測試階段也要編寫一些測試程序,對編碼的有關說明,編碼概述,編程標準,人們總是希望編制清晰、緊湊、高效的程序,但這些特性在編碼時往往互相矛盾,一般應依次考慮下列原則: (1)編制易于修改、維護的代碼 主要措施是在模塊化和面向?qū)ο笤敿氃O計的基礎上,進一步按屬性劃分程序。 (2)編制易于測試的代碼 一般來說,人們總是通過運用條件編譯語句盡早設計出測試用例、采用統(tǒng)一的命名規(guī)則管理這些測試用例并適時地進行回歸測試等一系列措施提高程序的可測試性。,編程標準(續(xù)),(3)必須將編程與編文檔的工作統(tǒng)一開來
4、。一個程序段的文檔應包括下列內(nèi)容: 代碼的功能; 代碼的完成者; 代碼在整個軟件系統(tǒng)中的位置; 代碼編制、復審的時間; 保留代碼的原因; 代碼中如何使用數(shù)據(jù)結構和算法。 (4)編程中采用統(tǒng)一的標準和約定,降低程序復雜性 (5)限定每一層的副作用,減少耦合度 (6)盡可能地重用,編碼的風格,追求“聰明”和“技巧”提倡“簡明”和“直接” 使用標準的控制結構 清晰的前提下求取效率 Make it right before you make it faster. Make it clear before you make it faster. Keep it right when you make i
5、t faster. (求快不忘保持程序正確) Keep it simple to make it faster. (保持程序簡單以求快) Dont sacrifice clarity for “efficiency”. (書寫清楚,不要為“效率”犧牲清楚),源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標準 程序具有良好的風格包括: 源程序文檔化 數(shù)據(jù)說明 語句結構 輸入/輸出方法 同時要考慮設計出的程序的執(zhí)行效率問題,編碼的風格,(1)符號名的命名 符號名即標識符,包括模塊名、變量名、常量名、標號名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。 這些名字應能反映它所代表的實際東西,應有一定實際意
6、義。 例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。 應當選擇精煉的意義明確的名字。必要時可使用縮寫名字,但這時要注意縮寫規(guī)則要一致,并且要給每一個名字加注釋。,1、源程序文檔化,編碼的風格,(2)程序的注釋 夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。 注釋決不是可有可無的。 一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個源程序的13到12,甚至更多。 注釋分為序言性注釋和功能性注釋。,編碼的風格,通常置于每個程序模塊的開頭部分,它應當給出程序的整體說明。有關項目包括: 程序標題; 有關本模塊功能和目的的說明; 主要算
7、法; 接口說明:包括調(diào)用形式,參數(shù)描述,子程序清單; 有關數(shù)據(jù)描述:重要的變量及其用途,約束或限制條件,以及其它有關信息; 模塊位置:在哪一個源文件中,或隸屬于哪一個軟件包; 開發(fā)簡歷:模塊設計者,復審者,復審日期,修改日期及有關說明等。,1)序言性注釋,編碼的風格,嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會怎么樣。而不要解釋下面怎么做。 要點: 描述一段程序,而不是每一個語句; 用縮進、空行或加框,使程序與注釋容易區(qū)別; 注釋要正確。,2)功能性注釋,編碼的風格,例如, /*ADD AMOUNT TO TOTAL*/ TOTAL=AMOUNTTOTAL
8、此注釋不好。 如果注明把月銷售額計入年度總額,便使讀者理解了下面語句的意圖: /*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/ TOTAL=AMOUNTTOTAL,編碼的風格,(3)視覺組織(空格、空行和移行) 恰當?shù)乩每崭?,可以突出運算的優(yōu)先性,避免發(fā)生運算的錯誤。 自然的程序段之間可用空行隔開。 移行也叫做向右縮格。 對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結構更加清晰。,編碼的風格,例如,兩重選擇結構嵌套,寫成下面的移行形式,層次就清楚得多。 for(i=1;i=n;i+) for(j=1;j=n;j+) aiji*10+j;,
9、編碼的風格,在設計階段已經(jīng)確定了數(shù)據(jù)結構的組織及其復雜性。在編寫程序時,則需要注意數(shù)據(jù)說明的風格。 為了使程序中數(shù)據(jù)說明更易于理解和維護,必須注意以下幾點: 數(shù)據(jù)說明的次序應當規(guī)范化 說明語句中變量安排有序化 使用注釋說明復雜數(shù)據(jù)結構,2、數(shù)據(jù)說明,編碼的風格,(1)數(shù)據(jù)說明的次序應當規(guī)范化 數(shù)據(jù)說明次序規(guī)范化,使數(shù)據(jù)屬性容易查找,也有利于測試,排錯和維護。 原則上,數(shù)據(jù)說明的次序與語法無關,其次序是任意的。但出于閱讀、理解和維護的需要,最好使其規(guī)范化,使說明的先后次序固定。,編碼的風格,(2)說明語句中變量安排有序化 例如,在FORTRAN程序中數(shù)據(jù)說明次序 常量說明 簡單變量類型說明 數(shù)組
10、說明 公用數(shù)據(jù)塊說明 所有的文件說明 在類型說明中還可進一步要求。例如,可按如下順序排列: 整型量說明 實型量說明 字符量說明 邏輯量說明,編碼的風格,當多個變量名在一個說明語句中說明時,應當對這些變量按字母的順序排列。帶標號的全程數(shù)據(jù)(如FORTRAN的公用塊)也應當按字母的順序排列。 例如,把 integer size,length,width,cost,price 寫成: integer cost,length,price,size,width,編碼的風格,(3)使用注釋說明復雜數(shù)據(jù)結構 如果設計了一個復雜的數(shù)據(jù)結構,應當使用注釋來說明在程序?qū)崿F(xiàn)時這個數(shù)據(jù)結構的固有特點。 例如,對鏈表結
11、構和用戶自定義的數(shù)據(jù)類型,都應當在注釋中做必要的補充說明。,編碼的風格,在設計階段確定了軟件的邏輯流結構,但構造單個語句則是編碼階段的任務。語句構造力求簡單、直接,不能為了片面追求效率而使語句復雜化。 (1)在一行內(nèi)只寫一條語句 在一行內(nèi)只寫一條語句,并且采取適當?shù)囊菩懈袷?,使程序的邏輯和功能變得更加明確。,3、語句結構,編碼的風格,(2)程序編寫首先應當考慮清晰性 程序編寫首先應當考慮清晰性,不要刻意追求技巧性,使程序編寫得過于緊湊。 例如,有一個用C語句寫出的程序段: AI=AIAT; AT=AIAT; AI=AIAT; 此段程序可能不易看懂,有時還需用實際數(shù)據(jù)試驗一下。,編碼的風格,實際
12、上,這段程序的功能就是交換AI和AT中的內(nèi)容。目的是為了節(jié)省一個工作單元。如果改一下: WORK=AT; AT=AI; AI=WORK; 就能讓讀者一目了然了。,編碼的風格,(3)程序要能直截了當?shù)卣f明程序員的用意。 程序編寫得要簡單,寫清楚,直截了當?shù)卣f明程序員的用意。例如, for(i=1;i=n;i+) for(j=1;j=n;j+) vij(ij) * (ji),編碼的風格,除法運算()在除數(shù)和被除數(shù)都是整型量時,其結果只取整數(shù)部分,而得到整型量。 當ij時,i/j=0 當ji時,j/i=0 得到的數(shù)組 當ij時,vij=(ij)*(ji)=0 當ij時,vij=(ij)*(ji)=1
13、 這樣得到的結果,v是一個單位矩陣。,編碼的風格,寫成以下的形式,就能讓讀者直接了解程序編寫者的意圖。 for(i1;i=n;i+) for(j1;j=n;j+) if(i=j) vij1.0; else vij0.0;,編碼的風格,(4)除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。 (5)首先要保證程序正確,然后才要求提高速度。 (6)避免使用臨時變量而使可讀性下降。,例如,有的程序員為了追求效率,往往喜歡把表達式 AI1AI; 寫成 AIAI; XAI1AI; 這樣將一句分成兩句寫,會產(chǎn)生意想不到的問題,編碼的風格,(7)讓編譯程序做簡單的優(yōu)化。 (8)盡可能使用庫函數(shù) (9
14、)避免不必要的轉(zhuǎn)移。同時如果能保持程序可讀性,則不必用GOTO語句。,編碼的風格,IF(XY) GOTO 30 IF(YZ) GOTO 50 SMALLZ GOTO 70 30 IF(XZ) GOTO 60 SMALLZ GOTO 70 50 SMALLY GOTO 70 60 SMALLX 70 CONTINUE,例如,有一個求三個數(shù)中最小值的程序:,編碼的風格,程序只需編寫成: smallx; if ( y small ) smally; if ( z =a) if(char=z) cout“This is a letter。”; else cout= 0 Ai, j:=0; 行主序:50
15、次缺頁;列主序,5000次缺頁,編碼的風格,在微型計算機/嵌入式系統(tǒng)中,存儲器的容量對軟件設計和編碼的制約很大。因此要選擇可生成較短目標代碼且存儲壓縮性能優(yōu)良的編譯程序,有時需采用匯編程序。 提高存儲器效率的關鍵是程序的簡單性。,編碼的風格,(4)影響輸入輸出的因素 輸入輸出可分為兩種類型: 面向人(操作員)的輸入輸出 面向設備的輸入輸出 1)如果操作員能夠十分方便、簡單地錄入輸入數(shù)據(jù),或者能夠十分直觀、一目了然地了解輸出信息,則可以說面向人的輸入輸出是高效的。,編碼的風格,2)關于面向設備的輸入/輸出,可以提出一些提高輸入/輸出效率的指導原則,輸入/輸出的請求應當最小化; 對于所有的輸入/輸
16、出操作,安排適當?shù)木彌_區(qū),以減少頻繁的信息交換。 對輔助存儲(例如磁盤),選擇盡可能簡單的,可接受的存取方法;,編碼的風格,對輔助存儲的輸入/輸出,應當成塊傳送; 對終端或打印機的輸入/輸出,應考慮設備特性,盡可能改善輸入/輸出的質(zhì)量和速度; 任何不易理解的,對改善輸入/輸出效果關系不大的措施都是不可取的; 任何不易理解的所謂“超高效”的輸入/輸出是毫無價值的。,編碼的風格,編碼語言,程序設計語言的發(fā)展,FORTRAN COBOL BASIC,PASCAL C Ada,C+ Java ,SQL 報表生成 ,適用各類應用領域的語言,編碼語言,可從如下方面比較程序設計語言: (1)軟件心理學觀點:
17、影響程序員心理的語言特性 (2)軟件工程的觀點:對于程序編碼的工程上的要求 詳細設計能夠容易的翻譯成代碼 源程序可移植性 編譯程序高效率 盡可能利用代碼自動生成工具 可維護性 (3)程序設計語言的技術性能:模塊化、數(shù)據(jù)結構能力,編碼語言,選擇語言的重要的考慮因素 (1)應用領域; (2)算法和計算復雜性; (3)軟件運行環(huán)境; (4)用戶需求中關于性能方面的需要(可移植性、可靠性、系統(tǒng)響應時間等); (5)數(shù)據(jù)結構的復雜性; (6)軟件開發(fā)人員的知識水平; (7)可用的編譯器與交叉編譯器。,編碼語言,選擇高級程序設計語言 高級語言明顯優(yōu)于匯編語言,因此,除了在很特殊的應用領域(例如,對程度執(zhí)行
18、時間和使用的空間都有很嚴格限制的情況;需要產(chǎn)生任意的甚至非法的指令序列;體系結構特殊的微處理機,以致在這類機器上通常不能實現(xiàn)高級語言編譯程序),或者大型系統(tǒng)中執(zhí)行時間非常關鍵的(或直接依賴于硬件的)一小部分代碼需要用匯編語言書寫之外,其他程序應該一律用高級語言書寫。,編碼語言,為了使程序容易測試和維護以減少生命周期的總成本,選用的高級語言應該有理想的模塊化機制,以及可讀性好的控制結構和數(shù)據(jù)結構;為了便于調(diào)試和提高軟件可靠性,語言特點應該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤;為了降低軟件開發(fā)和維護的成本,選用的語言應該有良好的獨立編譯機制。,選擇高級語言的要求,編碼語言,程序設計支持環(huán)境(PSE),現(xiàn)今編程過程大多在一組CASE工具的支持下進行,這組工具輔助完成編輯、編譯、調(diào)試、項目管理等一系列任務,人們稱這組工具構成一個程序設計支持環(huán)境(PSE),一個富有吸引力的PSE應具備下列特性: 通用性適用于不同的語言、不同的應用領域和開發(fā)方法; 適應性能通
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025內(nèi)蒙古赤峰市林西縣體制單位面向林西招錄備考題庫附答案
- 2025年事業(yè)單位招聘《行測》考試題庫含答案
- 電力系統(tǒng)維護與檢修作業(yè)指導
- 2025年電力市場營銷策劃與實施手冊
- 2024年湖北經(jīng)濟學院輔導員考試參考題庫附答案
- 2024年湖南師范大學樹達學院輔導員考試筆試題庫附答案
- 2024年湖南財政經(jīng)濟學院輔導員考試筆試真題匯編附答案
- 2024年濱州醫(yī)學院輔導員招聘備考題庫附答案
- 2024年福州外語外貿(mào)學院輔導員考試參考題庫附答案
- 2024年鄭州經(jīng)貿(mào)學院輔導員招聘備考題庫附答案
- 移動通信基站設備安裝培訓教材
- 2024-2025學年云南省昆明市盤龍區(qū)高二(上)期末數(shù)學試卷(含答案)
- 臨床成人失禁相關性皮炎的預防與護理團體標準解讀
- 創(chuàng)新創(chuàng)業(yè)教育學習通超星期末考試答案章節(jié)答案2024年
- 《最奇妙的蛋》完整版
- 三年級科學上冊蘇教版教學工作總結共3篇(蘇教版三年級科學上冊知識點整理)
- 種子室內(nèi)檢驗技術-種子純度鑒定(種子質(zhì)量檢測技術課件)
- SEMI S1-1107原版完整文檔
- 心電監(jiān)測技術操作考核評分標準
- 大疆植保無人機考試試題及答案
- 《LED顯示屏基礎知識培訓》
評論
0/150
提交評論