




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計劃在開始抽象一下代碼大全,如何表達(dá)都沒有部長的抽象度高。還是做一些實在的工作,把咱們從第一章到第十九章的讀書體會一一總結(jié)于下。第三章描述軟件構(gòu)建必須做的準(zhǔn)備工作。本章沿用了第二章隱喻的概念,把軟件構(gòu)建必須做的準(zhǔn)備工作隱喻為建造房子之前的準(zhǔn)備工作,使我們很清楚的知道這一章要描述的內(nèi)容。軟件項目的成敗與構(gòu)建前的準(zhǔn)備工作緊密耦合在一起,就像房子的地基或者承重設(shè)計有問題,蓋到封頂了才發(fā)現(xiàn)房子開始傾斜,承重墻出現(xiàn)裂縫,這棟房子只能被推到重來。聯(lián)系到軟件質(zhì)量,也是這個道理。在項目的開始階段強調(diào)質(zhì)量,比事后彌補花費的開銷要小的多。風(fēng)險預(yù)測與控制是項目的開始階段必須要做的工作之一,只有在一開始就明確了項目有哪些風(fēng)險,才有可能在項目管理過程中,有計劃有措施的管理這些風(fēng)險,將這些風(fēng)險盡早清除掉。那么為什么往往準(zhǔn)備工作做得不充分呢?是經(jīng)驗。老板的經(jīng)驗不夠,可以用合理的方式溝通,開發(fā)人員的經(jīng)驗不夠,只會多一個觸目驚心的不成功案例。本章接著論述了幾點有力簡潔的論據(jù),如果食物鏈打動不了你的話,那幾組數(shù)據(jù)總該讓人沉思,在項目周期開始之前,應(yīng)該思考一下開發(fā)團隊準(zhǔn)備好了嗎?不同的軟件項目,前續(xù)的計劃和管理也各有側(cè)重。那么對于序列式與迭代式的討論,更像是“瀑布模型”與“增量模型”的比較,沒有絕對優(yōu)劣之分,需要具體項目具體分析。構(gòu)建前的準(zhǔn)備工作必然牽扯到問題的定義,這確保了項目的輸出的產(chǎn)品是不是符合客戶的原始需求。可怕的是,客戶需求可能變化,穩(wěn)定的需求只能保證最大化的引導(dǎo)客戶需求,幫助客戶開發(fā)需求,保證客戶的需求在軟件開發(fā)時不變更、少變更。最后討論的是,準(zhǔn)備工作中的軟件架構(gòu),好多同學(xué)分不清楚architecture與framework的區(qū)別,這里的解釋讓人茅塞頓開,進(jìn)一步又給出了architecture包括了什么內(nèi)容,這是很重要的知識點。第四章告訴我們一些關(guān)鍵的構(gòu)建決策。世界上有一百多種編程語言,有20多種已經(jīng)missing了。在項目中,選擇哪種編程語言將對生產(chǎn)率和代碼質(zhì)量產(chǎn)生很大的影響。好在我們在這件事情上沒有選擇的余地,我們用的是標(biāo)準(zhǔn)C,但是超越語言層面理解編程是有很必要的。最近在CSDN的一位大牛的博客里看到一片無責(zé)總結(jié)2010年技術(shù)浪潮的文章,HTML5.0與服務(wù)器端云計算的應(yīng)用等等,在這樣機遇百出的背景下,如何相應(yīng)調(diào)整IT職業(yè)規(guī)劃和長期目標(biāo)是值得每位同學(xué)思考的問題。也幸運,我是個LTE的初學(xué)者,但是LTE發(fā)展前景那是沒的說,好好工作,天天向上吧。下面進(jìn)入第二部分。這一章講的是軟件設(shè)計。設(shè)計不是憑空臆想出來的,一定是在不斷參與設(shè)計實踐、學(xué)習(xí)設(shè)計模式、吃到蹩腳設(shè)計苦頭后演化和完善起來,最終構(gòu)建成一位優(yōu)秀軟件工程師的設(shè)計經(jīng)驗。這里對設(shè)計的定義比公司二級培訓(xùn)給出的設(shè)計的定義要完整和豐富的多。我們需要重點關(guān)注的是理想的設(shè)計特征最小的復(fù)雜度、易于維護、高內(nèi)聚低耦合、可擴展、可重用、可移植等等,這幾乎涉及到了軟件體系結(jié)構(gòu)所有的評價標(biāo)準(zhǔn)。其實上,這里的設(shè)計不僅包括了軟件體系結(jié)構(gòu)的設(shè)計,還細(xì)化到類的抽象和子程序的設(shè)計。類的的抽象包括數(shù)據(jù)的封裝與隱藏,類間的關(guān)系繼承、組合等。這里涉及到了設(shè)計模式和設(shè)計方法自上而下、自下而上與分治法。每一部分的內(nèi)容都提供了很多書籍,推薦大家閱讀四人幫的設(shè)計模式和經(jīng)典算法書籍中的分治法的設(shè)計與實現(xiàn)。這里,只需要弄懂字面意思,以后在工作實踐中再慢慢深入研究。第六章描述類。類是有一組數(shù)據(jù)和子程序構(gòu)成的集合。一個類不論是抽象的,還是具體的,都必然是內(nèi)聚、明確定義、指責(zé)明確的概念實體。邏輯上,類就是一類事物的代表。這一章為構(gòu)建高質(zhì)量的類提供一些高明的建議,還是在談經(jīng)驗。抽象數(shù)據(jù)類型(ADT)建議大家關(guān)注數(shù)據(jù)結(jié)構(gòu)的第一章,這里不再詳述。抽象數(shù)據(jù)類型是類的基礎(chǔ)。首先談到的是類的接口,類接口是類中的函數(shù),分為“內(nèi)部接口”與“外部接口”。封裝的概念通常理解為把相關(guān)聯(lián)的數(shù)據(jù)放到一個類中,但封裝也包含了接口的封裝,也就是功能上的封裝。這是類本身的分析,那么,類與類之間的關(guān)系又分為了包含(has a)和繼承(is a),通過語言機制又可以實現(xiàn)多態(tài)。不明白的是,為什么本書沒有包涵多態(tài)。多態(tài)在C+、Java、C#中都存在,或許作者認(rèn)為多態(tài)是語言層面的,不應(yīng)該放在通用的范疇討論。時間不充分的話,第六章可以先跳過去,不過,還是需要回頭看的,一些成功的框架通過模擬繼承、多態(tài)支持面向?qū)ο髾C制,典型的是COM。使用C這樣的過程語言構(gòu)建軟件框架時,如果提供了面向?qū)ο蟮臋C制,那么該框架將具有更大的優(yōu)勢。第七章討論如何編寫高質(zhì)量的子程序。仔細(xì)分析162頁的低質(zhì)量子程序?qū)斫馐裁词歉哔|(zhì)量的子程序很有幫助。從這里開始,我們實實在在的踩到了代碼上。盡管子程序給程序帶了這樣那樣的好處,我們只要把握一個原則,子程序是“功能”上的最小劃分?!肮δ堋鄙系?,可能的是功能的內(nèi)聚、執(zhí)行順序的內(nèi)聚、數(shù)據(jù)通信的內(nèi)聚、過程序列的內(nèi)聚、邏輯上的內(nèi)聚,甚至是臨時的內(nèi)聚。給過程命名就是給函數(shù)起名字,函數(shù)的名字應(yīng)該是自解釋的,能夠完整包涵該函數(shù)實現(xiàn)的功能。一個函數(shù)的代碼行數(shù)最好控制在50行左右,參數(shù)控制在7個以內(nèi)。使用內(nèi)聯(lián)和宏是有風(fēng)險的,禁止無節(jié)制的使用。如何使用內(nèi)聯(lián)和宏需要遵照部門的編程規(guī)范執(zhí)行。第八章講防御式編程。它的主要思想是,承認(rèn)程序是會出錯的,在這個前提下,在編寫程序的時候,要做好充分的準(zhǔn)備,防止別的程序出錯的時候不會蔓延到自己的程序,也就是子程序應(yīng)該不因傳入錯誤數(shù)據(jù)而被破壞,哪怕是由其他子程序產(chǎn)生的錯誤數(shù)據(jù)。本書給出一種很形象的說法“垃圾進(jìn),什么都不出”、“垃圾進(jìn)來,出去的是錯誤提示”、“不許垃圾進(jìn)來”。這里處理技術(shù)分為三個部分,檢查外部數(shù)據(jù),確保它們的正確性,用測試角度說,就是確保它們的值在有效等價類里,是有意義的;檢查輸入?yún)?shù),確保函數(shù)接受的外部輸入是合法值,好的辦法是在接受參數(shù)后,if判斷下,或者使用斷言,如果出錯,要么什么都不做,直接返回,或者給出出錯提示,出錯提示的類型主要是打印出錯信息。這里復(fù)習(xí)一下C語言的斷言assert,首先它是宏,只在程序的debug模式彈出出錯對話框,對于發(fā)布的程序版本沒有任何開銷。通常,斷言和出錯處理選用一種即可。使用斷言時,把出錯處理放在斷言后面做為補救是目光長遠(yuǎn)的一種做法。這里了解到了回歸測試,原來測試不僅僅到驗收測試就截至了說到底斷言只是程序員的調(diào)試手段,那么程序出錯了怎么辦,檢測到錯誤數(shù)據(jù),應(yīng)該采取哪種措施。本書給出了很多種,最常用的是兩種,一是返回0(0代表著函數(shù)的異常),或者在日志文件中記錄一條錯誤信息。其他出錯處理方式也有很借鑒意義,系統(tǒng)級項目應(yīng)該約定出錯處理方式,而不應(yīng)該由各位程序員隨意選擇,也就是本書所說的高層次設(shè)計需要對錯誤處理方式作出一致的約定。像C+、Java等設(shè)計了異常機制,程序可以拋出異常,再捕捉異常,處理或者忽略異常。隔欄策略把數(shù)據(jù)分為“不干凈數(shù)據(jù)”與“干凈數(shù)據(jù)”,類似“防火墻”。最后,是調(diào)試工具的使用,優(yōu)秀的程序員善于利用各種工具,工具是提升效率很重要的一個步驟。第九章講偽代碼的編寫過程(PPP)。寫偽代碼有助于清晰表述設(shè)計思路,它其實就是編碼的詳細(xì)設(shè)計,只涉及思路,不考慮實現(xiàn),是程序設(shè)計到創(chuàng)建子程序之間可以選擇的、過渡性的步驟。最早接觸偽代碼是在算法設(shè)計中,用來表述算法的設(shè)計思路,是一種算法描述語言。本章描述了從編寫偽代碼到構(gòu)件子程序的完整過程。需要注意的是,偽代碼沒有標(biāo)準(zhǔn)的編寫規(guī)范,最好可以參考算法設(shè)計類書籍。把編譯器的警告級別調(diào)到最高是軟件調(diào)試與自測的好辦法,一開始就這樣設(shè)置,會減少誤碼率。第十章講變量使用的一般事項。這里的變量指代對象和內(nèi)置數(shù)據(jù)類型,是廣義的。開始的數(shù)據(jù)認(rèn)知測試很有用,有一些疑問,tree怎么能是個變量呢?思考一下,這里的變量是廣義的,只要能夠存貯數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)都可以成為變量。這個疑問等到交流活動再請教更有經(jīng)驗的同事。隱式聲明變量很危險,還好C語言里貌似不能這樣。要使用,先聲明,再初始化,在聲明的時候初始化是良好的編程風(fēng)格。談到變量就會聯(lián)系變量的作用域。以前編程習(xí)慣是把所有的變量聲明為全局變量,這在系統(tǒng)項目里造成的危害無法想像,應(yīng)該改掉這個懶習(xí)慣,盡可能的使變量局部化。盡可能縮短變量的生存時間是個很好的建議。還有兩個原則特別有用,進(jìn)入循環(huán)之前再初始化循環(huán)里用的變量,在變量馬上被使用時初始化。這樣能夠減少犯錯的幾率。變量的持續(xù)性是需要我仔細(xì)思考的問題,因為變量的生存周期難以預(yù)料,在刪除一個指針后將其賦值為null,是為了避免使用野指針一個慣用的做法。平時接觸的到是C+的靜態(tài)綁定和動態(tài)綁定,這里講的是變量的綁定時間,留作疑問吧。最后,講變量用途要單一,春生做的培訓(xùn)提到部門出的一個故障,一個變量做兩種用途,看似節(jié)省了一個變量,其實被故障埋下了隱患,導(dǎo)致程序的可讀性、可維護性、健壯性都不高。第十一章講變量的命名。在看這一章之前,先回顧了一下,以往編程中我是怎么命名一個變量的。有時,為了起一個合適的名字糾結(jié)好一陣子,結(jié)果起的名字還不是很滿意。等仔細(xì)閱讀本章之后,驚嘆于本章的覆蓋面之廣,以后再遇到起名字的問題時,還是翻這本書吧。命名的原則是要完全、準(zhǔn)確的描述出該變量所代表的事物。在閱讀代碼時,會積累一些命名的經(jīng)驗,看一眼,就知道這個變量的作用域、用途,一些命名方式已經(jīng)約定俗成了。二級培訓(xùn)的編程規(guī)范講變量名不得超過31個字符。這里給的建議是9到16個字符為最好。我習(xí)慣用的還是微軟采用的匈牙利命名法。第十二章講基本數(shù)據(jù)類型。避免使用神秘數(shù)。把編譯器的警告級別調(diào)到最高也是防止數(shù)據(jù)類型間隱式轉(zhuǎn)換的好辦法。整數(shù)計算時要防止溢出。浮點數(shù)計算時,要避免浮點間的比較。C中的字符串涉及到字符串指針和字符數(shù)組,C的標(biāo)準(zhǔn)庫里也提供了很多字符串處理函數(shù),要對它們有個清楚的認(rèn)識,使用的時候,知道這些函數(shù)是怎么工作的,避免隱晦問題。對于布爾變量,二級培訓(xùn)的編程規(guī)范是特別長的布爾變量要分開判斷,或者分行顯示。曾經(jīng)遇到過這樣的問題,一個if判斷里的與或的布爾變量在一行顯示,非常的長,到后來不知道那里的判斷的意義,這是很不好的編程風(fēng)格。如果有一組性質(zhì)或功能類似的數(shù)據(jù)的話,優(yōu)先考慮使用枚舉類型,這是提高程序可讀性、可靠性的好辦法。用大寫命名具名常量也可以提高程序可讀性。使用數(shù)組時,要時刻警惕數(shù)組越界問題。書中提到了使用typedef帶來的種種好處。在整個系統(tǒng)中,使用typedef來定義一些通用的數(shù)據(jù)類型是非常好的做法,例如C中沒有布爾型,typedef int Boolean;還例如:typedef unsigned short uint16;在內(nèi)存資源受限的系統(tǒng)中,類似uint16的數(shù)據(jù)類型能夠節(jié)省很多資源。但是在模塊中使用的話,還是要慎重,除非變量命名得很好。第十三章不常見的數(shù)據(jù)類型。對于C程序開發(fā)人員,這一章必須好好讀,結(jié)構(gòu)體、指針、全局變量是C程序常見的一部分。結(jié)構(gòu)體是C中最重要的數(shù)據(jù)結(jié)構(gòu),使用結(jié)構(gòu)體組織數(shù)據(jù)塊可以產(chǎn)生結(jié)構(gòu)化的數(shù)據(jù),一些更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的結(jié)點均基于結(jié)構(gòu)體,它與C+中的類其實是一回事。指針是初學(xué)C時最為難理解的數(shù)據(jù)類型,對于計算機內(nèi)存永遠(yuǎn)是相同的,指向該內(nèi)存地址的指針的基類型不同,這塊內(nèi)存存貯的數(shù)據(jù)的意義也不一樣。指針使用的內(nèi)容多到無法在這里一一總結(jié)。最基本的建議是聲明指針和初始化指針一起完成;使用指針時先檢測該指針是否為null,是否指向合理的內(nèi)存地址;確認(rèn)該指針不再使用,馬上釋放它,并將其置為null。盡管指針不好理解,但是使用指針可以直接操作內(nèi)存,因此指針的效率很高,使用指針最經(jīng)典的是字符串拷貝:*strDest+=*strSrc;對于全局變量,本書給出了大多數(shù)程序員的共識:使用全局?jǐn)?shù)據(jù)的風(fēng)險比局部數(shù)據(jù)的風(fēng)險大,只有萬不得已時才使用全局?jǐn)?shù)據(jù)。全局?jǐn)?shù)據(jù)的好處顯而易見,但是副作用更多,全局?jǐn)?shù)據(jù)是程序的公共資源,誰都能用,多線程共同存取全局?jǐn)?shù)據(jù)的情況則更加危險。春生部長的培訓(xùn)中特別提到的全局變量引起的案例發(fā)人深省。第十九章一般的控制問題。很多語言提供了布爾數(shù)據(jù)類型,C沒有提供,但我們可以使用宏定義來定義1為TRUE,0為FALSE。正確的設(shè)計控制語句中的條件判斷。面對復(fù)雜的條件判斷,可以設(shè)置中間量,也可以將其封裝為一個布爾函數(shù)。在if語句中,把判斷條件從否定形式轉(zhuǎn)換成肯定形式,并且互換if和else字句中的代碼,這樣設(shè)計if語句,會更加貼切大多數(shù)人的思維模式。下面學(xué)習(xí)了狄摩根定義,定義了邏輯等價可以簡化否定的布爾判斷。對于復(fù)雜條件判斷,使用括號將具有實際邏輯意義的條件判斷包含在一起,又能防止邏輯操作符之間優(yōu)先級的誤用,因此加括號是一種良好編程風(fēng)格。不同語言的條件判斷的求值順序不用,有的支持短路求值,依賴于語言細(xì)節(jié)的編程風(fēng)格是不值得提倡的。按照數(shù)軸的順序編寫數(shù)值表達(dá)式可以提升代碼的可讀性。與零值比較的指導(dǎo)原則在林銳的高質(zhì)量C編程的文檔中看到過,在這章復(fù)習(xí)到了這部分內(nèi)容。if(x=0)與if(0=x)哪個好的問題,也存在爭議,我傾向if(x=0),因為這樣的順序更容易理解,在寫if(x=0)時,我均反復(fù)確認(rèn)沒少=號。即使是空語句也得加。避免深層次的嵌套的方法是重新設(shè)計if和else子句執(zhí)行的判斷,或者代碼重構(gòu)為更簡單的子程序,本書講了很多種方法。結(jié)構(gòu)化編程的核心思想是任何一種控制流都可以由順序、選擇和迭代(循環(huán))種結(jié)構(gòu)生成,對break、contin
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管道工程未來市場需求演變趨勢與挑戰(zhàn)預(yù)測考核試卷
- 木結(jié)構(gòu)建筑的智能家居系統(tǒng)集成考核試卷
- 糧食倉儲企業(yè)綠色經(jīng)濟企業(yè)文化建設(shè)考核試卷
- 帶式輸送機設(shè)計
- 秋游活動方案
- 《幼兒繪畫秋天》課件
- 2025年公共營養(yǎng)師之二級營養(yǎng)師考前沖刺模擬試卷A卷含答案
- 中學(xué)生課前三分安全教育
- 蛋糕促銷活動方案
- 小學(xué)一年級文明就餐教育
- 2022年全國大學(xué)生英語競賽C類試題
- 裝飾、裝修施工方案
- 礦井瓦斯抽采
- 施工現(xiàn)場安全檢查記錄表(周)以及詳細(xì)記錄
- 立法學(xué)完整版教學(xué)課件全套ppt教程
- 五年級下冊科學(xué)說課課件 -1.2 沉浮與什么因素有關(guān) |教科版 (共28張PPT)
- 流動注射分析儀常見問題解決方案.
- 《出口報關(guān)單模板》word版
- 邊坡護坡檢驗批表格模板
- 工會會計制度——會計科目和會計報表(全)
- 馬清河灌區(qū)灌溉系統(tǒng)的規(guī)劃設(shè)計課程設(shè)計
評論
0/150
提交評論