代碼大全2內(nèi)容簡介.ppt

上傳人:max****ui 文檔編號:15583177 上傳時間:2020-08-22 格式:PPT 頁數(shù):38 大?。?.85MB
收藏 版權(quán)申訴 舉報 下載
代碼大全2內(nèi)容簡介.ppt_第1頁
第1頁 / 共38頁
代碼大全2內(nèi)容簡介.ppt_第2頁
第2頁 / 共38頁
代碼大全2內(nèi)容簡介.ppt_第3頁
第3頁 / 共38頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《代碼大全2內(nèi)容簡介.ppt》由會員分享,可在線閱讀,更多相關(guān)《代碼大全2內(nèi)容簡介.ppt(38頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、1、歡迎進入軟件的世界,這章闡述了軟件構(gòu)建的重要性,軟件構(gòu)建大體上就是說具體程序員做的工作,而不是需求收集、產(chǎn)品設計、業(yè)務分析、測試、運維人員等做的工作,雖然這些人的工作在整個軟件開發(fā)生命周期中也非常的重要,但是一個軟件開發(fā)的最主要的部分卻是具體程序員做的那部分事情。一般的軟件公司里具體程序員的數(shù)量應該占很大的比重,大多數(shù)的程序員也是具體程序員,只有很少的程序員經(jīng)過多年的工作學習能成為項目經(jīng)理,業(yè)務分析人員,架構(gòu)師等高級軟件從業(yè)人員。 具體程序員做什么工作呢?理解架構(gòu)師做出的架構(gòu)設計,做你負責的模塊的詳細設計,做出自己的負責模塊的開發(fā)計劃,編碼,測試,解決測試人員提出的BUG,以及網(wǎng)站上線后排

2、查線上的問題等等。如果你做的是這些工作,那你就是具體程序員,你做的大多事情就是軟件構(gòu)建的事情。 只要你是個程序員,就應該系統(tǒng)的,好好的學習下軟件構(gòu)建的技能和知識,這比你學很多種語言,嘗試很多種花哨的新技術(shù)要值很多,至少我看了這本書的其中幾章有這個體會,第一次認真考慮軟件構(gòu)建中的一些基礎(chǔ)的,細節(jié)的,基本的,通用的思維方式,編碼技巧和規(guī)范。,2、用隱喻來更充分的理解軟件開發(fā),這章總的來說可讀可不讀,比較理論。 我們平時把軟件編碼叫做寫代碼,讓外行人聽起來像是在寫文章,就是把你心里的想法一點一點的有條理的寫出來,在這一點上,編碼和寫文章確實有相似之處,但寫文章一般是你自己寫,編碼則需要和別人合作。

3、還有在軟件設計的時候,我們經(jīng)常拿蓋房子來比喻,蓋房子之前要先畫好藍圖,整體結(jié)構(gòu),考慮好水、電的布局等,蓋一個小狗窩和蓋一棟大樓的過程也是不一樣的,做一個小軟件和一個超大型的軟件的過程也是不一樣的。如果你能很好把軟件的開發(fā)過程想象成某些生活中具體的例子,找到他們的相似之處和不同之處,你就能更好的理解軟件開發(fā),以及利用這些隱喻來與人更好的溝通。你腦子里如果有很多這樣的隱喻,在你做軟件設計時就會不經(jīng)意的想起來,成為你思考和權(quán)衡不同方案的工具。,3、三思而后行:前期準備,做任何事情都需要前期準備,在軟件開發(fā)中更是如此,盡管如此,還是有很多程序員接到任務后就是想著盡快編碼。要想保證一個軟件的質(zhì)量,在前期

4、準備,需求分析,架構(gòu)設計,編碼,測試,維護等每一個環(huán)節(jié)都要重視質(zhì)量。具體程序員接到任務的時候要檢查一下在你之前的那些軟件活動有沒有準備好,如果需求中有好多沒有說明的地方,架構(gòu)設計也不明確,你不知道需要和其它模塊之間如何通信,基礎(chǔ)組件啥也沒有,這種情況下進行詳細設計和編碼會很受罪。和老板同事達成前期準備重要性的共識之后,就是如何做前期準備以及如何判斷前期準備已經(jīng)做好的技巧,這些是更實用的地方。如何做前期準備基本上是需求分析人員,產(chǎn)品經(jīng)理和架構(gòu)師的關(guān)心的問題,而判斷前期準備是否已準備好則是具體程序員也需要具備的能力。 所以我們在開發(fā)之前要要先通讀特性文檔的內(nèi)容,看看設計上是不是有疑難的地方、有不明

5、確的地方、有不理解的地方等,及時溝通解決問題。 前期準備所花費的時間是不容易把握的,也沒有個固定的衡量標準,但前期準備是必須要做的,前期準備的根本目的是降低風險,提高項目質(zhì)量。,4、防錯編程,4.1 對錯誤輸入的保護 4.2 錯誤處理技術(shù) 4.3 異常,防御式編程,這一概念來自 防御式駕駛,在防御式駕駛中要建立這樣一種思維,那就是你永遠也不能確定另一位司機將要做什么。這樣才能保證 在其他人做出危險動作時你也不會受到傷害。防御式編程主要思想:子程序應該不因傳入錯誤數(shù)據(jù)而被破壞,哪怕是有其他子程序產(chǎn)生的錯誤數(shù)據(jù)。,4.1 對錯誤輸入的保護,檢查所有外部進來的數(shù)據(jù) 如文件、用戶、網(wǎng)絡或其他外部接口獲

6、取數(shù)據(jù)時,應檢查獲得數(shù)據(jù),確保他在允許的范圍內(nèi)。對應數(shù)值要要確保在允許的范圍內(nèi),對于字符串要確保其不超長等。 檢查所有輸入?yún)?shù)的值 決定如何處理錯誤的輸入數(shù)據(jù) 要根據(jù)具體的使用情況,后面會講,4.2錯誤處理技術(shù),主要有以下幾種方法 1、返回中立值 有時候錯誤處理的最佳方法就是繼續(xù)執(zhí)行操作并返回一個沒有危害的數(shù)值,比如數(shù)值計算可以返回0,字符串可以返回空字符串,好像我們的SPF類,再比如一個繪圖的功能,如果接收到一個錯誤的顏色可以使用默認顏色繼續(xù)繪制,當然如果是癌癥病人的X光片的繪圖程序,還是不要現(xiàn)實某個“中立值”,人家會找你拼命的,這時候關(guān)閉程序會比限時錯誤的病人數(shù)據(jù)要好。 2. 換用下一個正

7、確的數(shù)據(jù) 在處理數(shù)據(jù)流的時候返回下一個正確的數(shù)據(jù)即可。如果你在讀取數(shù)據(jù)庫時候發(fā)現(xiàn)一條數(shù)據(jù)已經(jīng)損壞,可以繼續(xù)讀下去找到正確的記錄位置。比如你以每秒100次的速度讀取體溫計的數(shù)據(jù),那么如果某一次的數(shù)據(jù)讀取錯誤,你只需要等待1/100然后繼續(xù)讀取即可。 3、返回和上次相同的數(shù)據(jù) 比如某些情況下你沒有讀取到數(shù)據(jù),那么可以簡單的返回前一次的結(jié)果。當然如果你在管理ATM機上操作,你可能就不希望返回上一個結(jié)果了,因為那可能是前一個用戶的銀行帳號。,4.2錯誤處理技術(shù),4、換用最接近的合法值 比如體溫計的數(shù)據(jù)定義在1-100之前,如果你獲得數(shù)據(jù)小于0,你可以把他替換為0就是最接近的合法值,同樣大于100就替換

8、為100,生活中的例子就是倒車,倒車時速度表無法負的速度,所以直接顯示0。 5. 把警告信息記錄到日志文件中 在檢測到錯誤的時候你可以在日志文件中增加一條警告信息,然后繼續(xù)執(zhí)行,方便查詢總結(jié),比如系統(tǒng)日志。 6、返回一個錯誤代碼 7、調(diào)用錯誤處理函數(shù)/對象 優(yōu)點是:集中處理,調(diào)用更簡單 缺點是耦合性太強,不容移植,如果出現(xiàn)安全問題容易被攻擊。 8、錯誤發(fā)生時顯示出錯誤 不要破壞界面的一致性,攻擊者可能會利用這個找到漏洞,所以我們要求不能顯示.net的黃頁一樣。,4.2錯誤處理技術(shù),9、用最妥當?shù)姆绞皆诰植刻幚?7、關(guān)閉/停止程序 有些系統(tǒng)一旦檢查到錯誤就會關(guān)閉,這通常是遇到比較嚴重或者安全攸關(guān)

9、的功能上,比如windows的安全日志即使?jié)M了,也會正常工作,但你可以配置windows,讓它在日志滿的時候停止服務,在安全信息攸關(guān)的環(huán)境下中這樣做是明智的。,4.3異常處理,異常是把代碼中的錯誤或者異常事件傳遞給調(diào)用方的特殊手段。如果在程序中遇到了意料之外的情況就可以拋出異常。 異常要審慎明智的使用,下面給出一些異常上的建議。 拋出異常,讓其他部分去解決問題 只有在真正的異常才使用,不能到處try-catch 不能用異常來推卸責任,盡量局部處理 不要在構(gòu)造和析構(gòu)函數(shù)中使用異常。 5、正確的抽象級上使用異常 6、異常信息應該包含詳細的異常數(shù)據(jù),便于解讀。 7、不要使try-catch為空,一定

10、要進行處理,也不能讓try為空。 所以說盡量建立集中的異常處理報告,規(guī)范化異常使用,甚至考慮不用異常,使用其他方法替換。,5、使用條件語句,簡單的 if-else 格式 使用 if-else 雖然很簡答,但是有很多細節(jié)應該注意: 1.先寫很正常很普通的分支,再寫不尋常的分支 好處:這樣可以突出判斷的主體部分,不至于讓次要的部分混淆程序執(zhí)行的過程,使程序易讀。 2.在分支中要特別注意相等的條件,確保其正確性 使用 =來的清晰,這樣可能會犯在數(shù)組中類似的越界錯誤,5.1、if 語句,3.把正常情況下執(zhí)行的代碼放在if后面,而不是防在else后面 把想要在正常情況下執(zhí)行的代碼放在前面,這樣可以使程

11、序的功 清晰易讀,清楚地了解到程序究竟是做什么功能的。,5.1、if 語句,5.1、if 語句,5.1、if 語句,4.If 后面的子句要有一個有意義的意思??梢允∪lse子句 bad: if(SomeTest) good: if(!SomeTest) : elseDoSomething() DoSomething() ,5.1、if 語句,5.考慮 else 子句 else子句盡量不要省略,以免發(fā)生沒有考慮到的錯誤,除非在顯而易見的情況下才可以省略。 6.檢查 else 子句的正確性 檢查的重點應該是程序的主要部分,即if部分,有可能的話,也 要檢查else部分 7

12、.檢查是不是把if 和 else 里的處理頁反了 這是個常見的錯誤,一定要注意小心避免,5.1、if 語句,If else if else 鏈式操作 下面給出關(guān)于if- else if -else操作的一些建議 1.用返回布爾值的函數(shù)來代替復雜的邏輯表達式 如果判斷的條件是復雜的表達式的話,程序既不易讀,也不易修改。,1、if 語句,2.把最常見的情況放在最前面 最常見的情況放在前面可以增加程序的可讀性,使人閱讀程序時提高效率。 3.確保所有的路徑都被覆蓋 在程序的最后再加上一個 else ,并且在這個判斷里面使用 斷言或者給程序員顯示警告。這里,出錯的信息是給程序員看的,方便開發(fā)期間的

13、調(diào)試工作。 4.如果程序語言支持的話,使用別的機制來代替if else if-else結(jié)構(gòu) 可以使用case來代替。,5.2、Case 語句,Case 語句是很常用的,在Java C# 語言里,使用switch case 機制。 下面給出使用Case需要注意的一些地方 使用效率最高的 Case 的組合的順序 如果Case的分支不是很多,安排他們的順序就無關(guān)緊要,若分支太多的話,就很重要了。,5.2、Case 語句,1.以數(shù)字或者字母的順序來安排 如果這些分支的重要性差不多的話,就使用字母序或數(shù)字來標記他們, 這樣一可以易讀,二可以很方便的找到該分支 2.正常情況下的分支要放在最前面 這樣可

14、以指示那些分支是正常的,哪些是不正常的。 3.把訪問頻率高的分支放在前面,低的放在后面 這樣一可以增加可讀性,使讀者清楚看到哪個分支最為常用, 同時,也提高了執(zhí)行效率,加快索引。,5.2、Case 語句,使用 Case 語句的一些建議 1.每一個 Case 里的操作都應該簡單 好處:短的代碼清晰易讀,增加可讀性,如果代碼很長的話,就把它們單獨放在一個模塊里。 2.不要使用容易出錯的變量來作為條件 作為判斷的變量應該簡單,下面一個例子是以用戶輸入?yún)?shù)的第一個字母作為標志的,(switch后面只能跟整型和字符型)這樣很容易出錯,如果非要那樣做的話,就不應該使用if-else if-else ,然后

15、把判斷的語句寫全。,5.2、Case 語句,5.2、Case 語句,2、Case 語句,3.盡量不要使用默認的分支來檢查合法的分支 如果沒有使用default子句,而僅僅是在case里面做一些處理的話,這樣可能會使程序以后維護起來比較麻煩,修改case 語句很不方便。盡量不要使用default來做檢查,而是采用多寫case的方法。 4.使用 default 子句來檢查錯誤 如果在程序中必須要有一個case 后面的部分不會被執(zhí)行,那么default里面就寫上顯示出錯的代碼。 5.在每一case的最后別忘了寫上break 類似于C的語言都必須要寫上break 以便能跳得出來,如果不寫的話就會跳到下

16、一個case 里面去。 6.如果非要在程序中執(zhí)行兩個以上的case的內(nèi)容(case嵌套if)的時候,一定要注釋清楚,個人建議還是不要這樣嵌套,還不如使用if-else if-else。,5.2、使用前的提示,在使用條件判斷語句的時候,一定要檢查是不是符合下面的要求 If-else 語句: 1.主體部分是不是在 if 語句中清晰的表達了? 2.在檢查等號條件是不是正確的?會不會發(fā)生越界錯誤? 3.是不是缺少else子句? 4.Else子句是不是正確的使用了? 5.If 和 else中分別需要做的工作又沒有混淆? 6.正常情況下的處理應該由if 來完成,是不是弄到else 里了。,5.3、使用前的

17、提示,If-else if-else 結(jié)構(gòu)需要注意的地方 1.復雜的邏輯表達式是不是封裝在單獨的函數(shù)中?通過函數(shù)調(diào)用的方式來實現(xiàn)判斷而不是直接寫在if里面? 2.是不是最常見的操作放在最前面? 3.是不是所有的路徑都覆蓋了? 4.是不是整個結(jié)構(gòu)都按照合理的方式來執(zhí)行?,5.3、使用前的提示,Switch Case 語句 1.是不是所有的case都按照有意義的順序排列? 2.是不是每個case里的操作都很簡單,通過函數(shù)調(diào)用來實現(xiàn)? 3.是不是合法的使用了default語句? 4.Default語句后面是不是有處理錯誤和報告錯誤的代碼? 5.在c c# java里是不是在每個case 后面跟上br

18、eak?,6、控制循環(huán),選擇循環(huán)類型 循環(huán)控制 寫循環(huán)簡單的方法從內(nèi)到外,6.1 選擇循環(huán)類型,循環(huán)類型:大多數(shù)語言中你只能用到少數(shù)的幾種循環(huán) 計數(shù)循環(huán),執(zhí)行的次數(shù)是固定的 條件循環(huán),預先不知道會運行多少次,他會在每次迭代時檢查。 死循環(huán),一旦啟動就一直執(zhí)行下去,知道死亡,你可能在心臟起搏器等嵌入式系統(tǒng)能找到。 迭代循環(huán),對容器類里的每個元素都執(zhí)行一次操作比如foreach 。,6.1 選擇循環(huán)類型,什么時候用while循環(huán) 如果你不知道循環(huán)的次數(shù),那么用while While也可以loop-with-exit循環(huán)(帶退出的的循環(huán)) while(true) a++; if (符合退出條件) b

19、reak; ,6.1 選擇循環(huán)類型,什么時候用for循環(huán) 循環(huán)確切次數(shù) 若是有中間中斷的情況,或是靠條件退出,用while替代 什么時候用foreach循環(huán) Foreach循環(huán)適用于對數(shù)組或者其他容器的各項元素進行操作,比如我們會使用foreach循環(huán)list中的數(shù)據(jù) Foreach(對象 in list對象) ,2 循環(huán)控制,循環(huán)易犯的錯誤:忽略了與循環(huán)有關(guān)的變量或累加器初始化、不正確的嵌套、不正確的循環(huán)中斷、忘記給循環(huán)變量一個增量或給錯了增量、用不正確的循環(huán)指標訪問數(shù)組元素。 while ( !inputFile.EndOfFile() !inputFile.EndOfFile();r

20、ecordCount++ ) inputFile.GetRecord(); recordCount++并不是控制循環(huán)的,控制循環(huán)結(jié)束的是inputFile.GetRecord();,6.2 循環(huán)控制,正確的使用方法 recordCount = 0; for ( inputFile.MoveToStart(); !inputFile.EndOfFile(); inputFile.GetRecord() ) recordCount++; inputFile.MoveToStart();對循環(huán)進行初始化, inputFile.EndOfFile(); 檢測循環(huán)是否已經(jīng)終止, inputFile.Ge

21、tRecord() 則是把循環(huán)推向終止,while做更清晰 inputFile.MoveToStart(); recordCount = 0; while ( !inputFile.EndOfFile() ) inputFile.GetRecord(); recordCount++; ,6.2 循環(huán)控制,處理循環(huán)體的注意 用 括起循環(huán); 將循環(huán)管理(如i++)放在循環(huán)頭或尾部 每個循環(huán)只做一件事 避免空循環(huán); while ( ( inputChar = cin.get() ) != n ) ; 這里例子產(chǎn)生空循環(huán)的原因是因為while表達式包含了兩項操作,循環(huán)工作和判斷是否終止的操作,下面的重

22、寫更加清晰 do inputChar = cin.get(); while ( inputChar != n );,6.2 循環(huán)控制,退出循環(huán)的注意 確保循環(huán)能結(jié)束,這是基本要求可以模擬設想一下。 讓循環(huán)的終止條件看起來更明顯,大概是說不要多出設置循環(huán)的退出條件。 不要隨意改變for的循環(huán)計數(shù)器,使其提前終止,6.2 循環(huán)控制,提前退出循環(huán)小心使用break和continue 考慮用break,而不用boolean flag 不要使過多的break過于分散在循環(huán)中 用continue在循環(huán)頭部測試,一種好的方法是,在循環(huán)開始初做完條件判斷后讓代碼越過剩下的循環(huán)體繼續(xù)運行。,如果在循環(huán)中要閱讀記錄并且要忽略掉一種記錄,那么可以這么判斷,6.2 循環(huán)控制,循環(huán)要多長? 最好短的一下能看完 限制在3層嵌套 把循環(huán)內(nèi)過長的部分封裝在函數(shù)內(nèi) 長的循環(huán)一定要寫注釋 寫循環(huán)簡單的方法從內(nèi)到外 從最本質(zhì)的工作寫起,然后加上外面的控制條件,,Thats all! Thank you!,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!