第九章軟件實現(xiàn)課件_第1頁
第九章軟件實現(xiàn)課件_第2頁
第九章軟件實現(xiàn)課件_第3頁
第九章軟件實現(xiàn)課件_第4頁
第九章軟件實現(xiàn)課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章軟件實現(xiàn)第九章軟件實現(xiàn)1程序員的秉性?具備誠實的品性–勤奮的程序員在調(diào)試無窮多的Bug時,已經(jīng)深深地體會了“誠實”的意義?信奉簡單實用主義–程序員的基本工作是將復(fù)雜的問題轉(zhuǎn)化為計算機能處理的一些簡單的程序?喜歡技術(shù)挑戰(zhàn)–程序員喜歡接觸新技術(shù),愿意攻克技術(shù)難題–高水平的程序員喜歡與高水平的程序員一起工作–這種喜好可能導(dǎo)致程序員干活偏離項目真正的需求程序員的秉性?具備誠實的品性2程序員應(yīng)具備的能力?基礎(chǔ)知識–英語的功底–數(shù)學(xué)基礎(chǔ)(算法分析與設(shè)計)–計算機科學(xué)基礎(chǔ)知識?基本技能–認(rèn)識事務(wù)的能力(抽象、模型、結(jié)構(gòu)、層次)–做事的邏輯性和條理性–溝通技能、演講技巧和團(tuán)隊協(xié)作能力–學(xué)習(xí)新知識和新技術(shù)的能力?職業(yè)化訓(xùn)練和實踐經(jīng)驗程序員應(yīng)具備的能力?基礎(chǔ)知識3如何做好程序員?職業(yè)道德

–上班時間不干與工作無關(guān)的事情?你如何看待上班玩游戲??下班后待在公司里干與工作無關(guān)的事情行不行?–不損害集體利益?常見的損害行為:泄密、盜取成果?怎樣減少無意的泄密?–不干危害社會的事情?你如何看待黑客行為??問題:在大學(xué)生涯中,如何培養(yǎng)這些素質(zhì)?如何做好程序員?職業(yè)道德4如何做好程序員?工作態(tài)度–認(rèn)真負(fù)責(zé)?在辦公室老實上班,工作時間比別人長,是“認(rèn)真負(fù)責(zé)”嗎??怎樣是真正意義的“認(rèn)真負(fù)責(zé)”?–服務(wù)意識?程序員要為后續(xù)階段和產(chǎn)品質(zhì)量的工作提供服務(wù)?你對用戶提出的要求應(yīng)采取什么態(tài)度?–團(tuán)隊協(xié)作?如何在團(tuán)隊中發(fā)揮自己的作用??問題:在課程實驗中,你對上述要求有體會嗎?如何做好程序員?工作態(tài)度5如何做好程序員?高效率地工作

–合理安排一天的時間

?你怎樣安排一天的時間?如何保證精力充沛的?

–開會

?如何看待會議?怎樣使得會議效率高?

–處理電子郵件

?電子郵件是很好的通信工具,但使用不當(dāng)可能損害工作效率

?你認(rèn)為以什么方式處理電子郵件比較好?

–隨時記錄

?你是否有隨時記錄問題和靈感的習(xí)慣?如何做好程序員?高效率地工作6如何做好程序員學(xué)無止境–不斷學(xué)習(xí)新技術(shù)?“主動”學(xué)習(xí)是很關(guān)鍵的?學(xué)習(xí)的內(nèi)容完全依賴個人的喜好嗎?–提高綜合才能?缺乏表達(dá)能力和管理能力是軟件開發(fā)人員的通病?應(yīng)該真正學(xué)會軟件工程的思想–向錯誤和失敗學(xué)習(xí)?抓住一切機會,勇于實踐?隨時有面對無知和承認(rèn)錯誤的勇氣,善于總結(jié)和提高如何做好程序員學(xué)無止境7軟件編碼規(guī)范?軟件編碼規(guī)范–與特定語言相關(guān)的描寫如何編寫代碼的規(guī)則集合?現(xiàn)實–軟件全生命周期的70%成本是維護(hù)–軟件在其生命周期中很少由原編寫人員進(jìn)行維護(hù)?目的–提高編碼質(zhì)量,避免不必要的程序錯誤–增強程序代碼的可讀性、可重用性和可移植性軟件編碼規(guī)范?軟件編碼規(guī)范8軟件編碼規(guī)范?基本要求

–程序結(jié)構(gòu)清析且簡單易懂,單個函數(shù)的行數(shù)一般不要超過100行(特殊情況例外)。–算法設(shè)計應(yīng)該簡單且直接了當(dāng),代碼要精簡,避免出現(xiàn)垃圾程序。–盡量使用標(biāo)準(zhǔn)庫函數(shù)(類方法)和公共函數(shù)(類方法)。–最好使用括號以避免二義性。?問題:以下示例有什么問題?如何修改?if(cond1&&cond2||cond3&&cond4||cond5&&cond6)doSomethings();軟件編碼規(guī)范?基本要求9軟件編碼規(guī)范?可讀性要求:可讀性第一,效率第二。?舉例:JAVA程序的標(biāo)準(zhǔn)格式(課本P198示例9.1)–文件結(jié)構(gòu)?說明版權(quán)和版本信息的文件頭注釋?package和import語言?類和接口說明語句–Section結(jié)構(gòu)?Class/interface的注釋?Class/interface語句?Class/interface實現(xiàn)注釋(必要時)?Class(static)變量?Instance變量(public,protected,package,private)?Constructors?Methods(以功能進(jìn)行分組)軟件編碼規(guī)范?可讀性要求:可讀性第一,效率第二。10軟件編碼規(guī)范?舉例:JAVA程序注釋(課本P205示例9.6)

–三種風(fēng)格:文檔風(fēng)格、C語言風(fēng)格、單行注釋–注意事項

?程序中的注釋不能過多?不必要注釋含義已經(jīng)十分清楚的代碼?修改代碼時應(yīng)該同時修改注釋,以保證注釋和代碼的一致性?注釋應(yīng)當(dāng)準(zhǔn)確易懂,防止出現(xiàn)二義性?注釋的位置應(yīng)該與被描述的代碼相鄰,應(yīng)該寫在程序代碼的上方并且和代碼左對齊?變量定義和分支語句(條件分支、循環(huán)語句等)必須寫注釋,因為這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵。軟件編碼規(guī)范?舉例:JAVA程序注釋(課本P205示例911軟件編碼規(guī)范代碼的版式:適當(dāng)?shù)目招写a行及行內(nèi)空格分行、對齊與縮進(jìn)命名規(guī)則聲明注釋軟件編碼規(guī)范代碼的版式:12軟件編碼規(guī)范軟件編碼規(guī)范的要求:可讀性要求:可讀性第一,效率第二。結(jié)構(gòu)化要求正確性與容錯性要求可重用與可移植性要求軟件編碼規(guī)范軟件編碼規(guī)范的要求:13錯誤嚴(yán)重性?問題:

–編譯沒有錯誤是否說明程序沒有錯誤?–如何發(fā)現(xiàn)程序中的邏輯錯誤或語義錯誤??嚴(yán)重性是代碼檢查的基本特性,通過其分類可以劃定錯誤的優(yōu)先順序,以便理性地調(diào)度工作。?錯誤的嚴(yán)重性

–嚴(yán)重的:需求沒有滿足–很小的:不影響運行和維護(hù)–中等的:除了以上兩種情況錯誤嚴(yán)重性?問題:14錯誤類型?邏輯問題

–遺漏的事件或步驟;重復(fù)的邏輯;忽視的前提條件;不必要的函數(shù);誤解;忽視的條件測試;檢查錯誤的變量;不正確的循環(huán)等?計算問題

–不充分的或不正確的等式表達(dá)式;精確性的損失;符號約定錯誤?接口/時間問題

–不正確的中斷處理;不正確的I/O時間分配;不匹配的子程序?數(shù)據(jù)處理問題

–不正確的數(shù)據(jù)初始化;不正確的數(shù)據(jù)訪問或數(shù)據(jù)存儲;不正確的數(shù)據(jù)標(biāo)量值或單位;不正確的數(shù)據(jù)維數(shù)?不正確的數(shù)據(jù)范圍錯誤類型?邏輯問題15錯誤類型?數(shù)據(jù)問題–不正確或缺少敏感數(shù)據(jù);不正確或缺少操作數(shù)據(jù);不正確或缺少表中的嵌入數(shù)據(jù);不正確或缺少外部數(shù)據(jù);不正確或缺少輸出數(shù)據(jù);不正確或缺少輸入數(shù)據(jù)?文檔問題–模糊說明等?文檔的質(zhì)量–可適用的標(biāo)準(zhǔn)不匹配等?之前修改引起的錯誤?互操作性問題–與其他軟件或構(gòu)件不兼容錯誤類型?數(shù)據(jù)問題16代碼檢查清單

?代碼檢查:類–類的命名是否與需求和設(shè)計相符?–能否是抽象的?–類的頭部是否說明了該類的目的?–類的頭部是否引用了相關(guān)的需求和設(shè)計元素?–是否說明了該類所從屬的包?–是否盡量地私有(private)?–應(yīng)該是final(Java語言)嗎?–是否已經(jīng)應(yīng)用了文檔標(biāo)準(zhǔn)?代碼檢查清單

?代碼檢查:類17

代碼檢查清單

代碼檢查:屬性代碼檢查:構(gòu)造函數(shù)代碼檢查:方法頭代碼檢查:方法體

代碼檢查清單

代碼檢查:屬性18

實例分析例1:程序注釋?程序注釋的原則–注釋應(yīng)當(dāng)淺顯、明白–注釋不是程序員指南–注釋不是標(biāo)準(zhǔn)庫函數(shù)參考手冊–注釋的主要任務(wù)是答疑解惑而不是增加程序的行數(shù)–好的注釋是對設(shè)計思想的精確表述和清晰展現(xiàn)?問題:–例1的程序注釋存在什么問題?–按照上述原則,如何修改例1的程序注釋?

實例分析例1:程序注釋19

例2:變量命名規(guī)則例2所示的程序風(fēng)格如何?你能夠容易理解嗎?

例2:變量命名規(guī)則例2所示的程序風(fēng)格如何?你能夠容易理解20

例3:內(nèi)存問題?例3所示的程序運行時會崩潰,其中有四處足以讓程序崩潰的錯誤,找出錯誤并改加以正。?總結(jié)

–非法內(nèi)存訪問的基本特征是代碼訪問了不該訪問的內(nèi)存地址–某些“自由的”語言更容易引發(fā)內(nèi)存錯誤(如C/C++)–要避免產(chǎn)品中出現(xiàn)內(nèi)存錯誤,好的編碼規(guī)范、所選的語言和工具、有效的測試等工作都是有意義的

例3:內(nèi)存問題?例3所示的程序運行時會崩潰,其中有四處足21

例3:內(nèi)存問題?內(nèi)存的分配方式–從靜態(tài)存儲區(qū)域分配內(nèi)存在編譯時已分配好,在程序的整個運行期間都存在。例如:全局變量、靜態(tài)變量等。–在堆棧上創(chuàng)建在函數(shù)執(zhí)行期間,函數(shù)內(nèi)的局部變量(包括形參)的存儲單元都創(chuàng)建在堆棧上,函數(shù)結(jié)束時這些存儲單元自動釋放(堆棧清退)。–從堆(heap)上分配,也稱動態(tài)內(nèi)存分配程序運行期間用malloc或new申請任意數(shù)量的內(nèi)存,程序員自己掌握釋放內(nèi)存的恰當(dāng)時機(使用free或delete)。

例3:內(nèi)存問題?內(nèi)存的分配方式22

例3:內(nèi)存問題建議–使用malloc或new申請內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL(或進(jìn)行異常處理),以防使用值為NULL的指針。–不要忘記初始化指針、數(shù)組和動態(tài)內(nèi)存,防止將未初始化的內(nèi)存作為右值使用。–避免數(shù)組或指針下標(biāo)越界,特別要當(dāng)心“多1”或“少1”操作。–動態(tài)內(nèi)存的申請與釋放必須配對,防止內(nèi)存泄漏。–使用free或delete釋放了內(nèi)存之后,立即將指針置為NULL,防止產(chǎn)生“野指針”。

例3:內(nèi)存問題建議23

例4:例外處理

?總結(jié)–異常處理機制相當(dāng)有用,但同時也容易被誤用而導(dǎo)致代碼結(jié)構(gòu)混亂–在使用異常處理的過程中,小心其中可能存在的內(nèi)存問題–有必要認(rèn)真把握異常處理中的跳轉(zhuǎn)和嵌套機制

例4:例外處理

?總結(jié)24

例5:性能問題?例5所示程序的寫法對程序的執(zhí)行速度有所影響,請找出相關(guān)地方并進(jìn)行改進(jìn)。?總結(jié)–改進(jìn)算法可以顯著提高速度–將代碼和數(shù)據(jù)保存在更快的介質(zhì)上同樣可以顯著提高速度–編譯優(yōu)化選項并不總能提高速度

例5:性能問題?例5所示程序的寫法對程序的執(zhí)行速度有所25

習(xí)題

習(xí)題26

習(xí)題第一個for循環(huán)的代碼簡練且結(jié)構(gòu)清晰,但效率較低;第二個for循環(huán)的執(zhí)行效率較高,但結(jié)構(gòu)不夠緊湊。

習(xí)題第一個for循環(huán)的代碼簡練且結(jié)構(gòu)清晰,但效率較低;27

習(xí)題

習(xí)題28

習(xí)題程序1:系統(tǒng)運行崩潰。原因:GetMemory(str,100)并沒有將申請到的內(nèi)存?zhèn)骰氐秸{(diào)用程序,str一直是NULL,從而導(dǎo)致非法內(nèi)存訪問,使程序崩潰。

習(xí)題程序1:系統(tǒng)運行崩潰。29

習(xí)題

習(xí)題30

習(xí)題程序2:顯示“HelloWorld.”

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論