標籤:程式員 小型項目 集合體
第二部分:建立高品質的代碼
第五章:軟體構建中的設計
“在大型項目中,設計可能會詳細到讓編碼工作近乎機械化”
“在小型項目中,設計可能就是指用虛擬碼寫個類的介面,或者詢問旁邊的程式員那個模式好,畫幾個類的關係圖”
——基本沒有經曆過大型項目,小型項目描述的過程跟我接觸的非常的相似,最多多個設計評審。
“當沒人知道對一處代碼的改動會對其他代碼帶來什麼影響的時候,項目也就停止進展了”
——得多複雜,多糟糕的項目才會到這個地步啊,沒有體會過。
因為項目主要是網路的,沒有什麼僱員、僱主之類很容易抽象的對象,所以製作的類基本都是c子程式和資料的集合體。不知道是不是不對,不過也沒感覺出來不對啊。
“資訊隱藏在不斷增長、大量變化的環境裡尤其有用”
剛開始的代碼裡面把所有的私人變數都加了get、set,但是慢慢就覺得麻煩,全部都公開了,感覺項目一個人維護,全部私人變數都封裝,有時候沒感覺出來什麼意義,如果個別需要特別處理的變數才封裝成方法。
不知道得大到什麼程度、或者變動到什麼程式,才有明顯的意義。或者說,我沒有感覺出太大的好處。
“不要使用布爾變數做狀態變數,請使用枚舉”
——這個比較有道理,因為如果從2種變成為3種類型,修改是個累人的活。
P117 寫總結郵件這點不錯,每次討論後,經常有遺忘,或者有人記錯了,導致爭論和疑問。
第六章:可以工作的類
“不懂得ADT(抽象資料類型)的程式員只是把稍有關係的子程式和資料堆在一起,叫做類。”
——感覺自己就是這樣,不過看完了這章,感覺就是教你把私人成員隱藏起來,隱藏實現細節,除了介面全部黑盒。
繼承與包含,我用的包含最多,繼承最少。
一直討厭使用繼承,最大的原因是用source insight看代碼不方面,老是跳到基類的方法裡面去了。不知道什麼閱讀工具會比較好。
“當你想讓基類控制介面,用繼承。當你想染自己控制介面,用包含”
用繼承主要是放在list裡面方便,不過我平時都是用一個類,然後包括一個void*,來訪那些包含的類,再用一個type變數標記是哪種類。
P155
“避免建立萬能類”——有時候視圖控制資料分離,難道不是這種結構作為過渡嗎?
“消除無關緊要類”——類比結構體放資料方便很多,為什麼不能出現專門放資料但是沒有行為的類?
C++中,只有virtural的方法才能被覆蓋,java預設方法都能被覆蓋。
第七章:高品質的子程式
子程式的參數不要超過7個,可以做成結構體,這樣增加一個參數的時候會比較方便。
不要出現神秘值,用常量定義或者用枚舉來替代100,4.0,3.14之類的常量。
子程式要盡量單一而明確的任務。
避免把輸入值當做工作變數。
子程式可以避免代碼重複,更易懂,提高可移植性,未來去最佳化也比較方便。
第八章:防禦式編程
“主要思想:傳入錯誤的參數也不怕”
斷言是不錯的方法,但是linux裡面用斷言感覺不是很好,因為螢幕列印有什麼用處,還不如列印到日誌裡面去,狠點的話,列印日誌後退出程式好了。
處理錯誤有多種情況,不錯網路情況估計就是警示和重試了吧。
在正確性和健壯性之間選擇。
“只有真正的例外才拋出異常,異常應該和斷言一樣,是永遠不應該發生的事情”
——這個好像跟com不符合哦,com主要是拋出異常的,尤其是解碼的com,拋出的異常種類那叫一個多。
——這裡的理由是“異常弱化的了封裝性”
P203頁批評程式員用異常返回錯誤是為用而用
——記得以前我上學的時候,一個同學還說他師兄是真正的物件導向,所有返回錯誤值的地方都用異常處理,當時我們崇拜了一陣子。不過這裡也未必全對,畢竟是一本書。
“刪除一個對象之前把它填滿垃圾資料”
——夠狠,也是個好主意,這樣不會出現有時候出錯有時候正常的情況了,如果以後再試圖使用肯定崩潰。
第九章:虛擬碼編程
1、使用自然語言來精確描述特定的操作。
2、避免使用目標程式設計語言中的文法元素。(這樣會受制於程式文法上的約束)
3、先超出語言來描述解決問題的意圖。
4、再以足夠低的層次上編寫虛擬碼,以便可以近乎自動的從它生產代碼。
5、寫好代碼後,可以把虛擬碼當做注釋存在。
架構應該提前指明多少資源可用,好確定效能還是可讀性優先。
“寫一個子程式前先考慮怎麼測試它”——感覺很困惑,也沒有舉出例子,不就是檢查輸入輸出嗎?還能考慮什嗎?
本文出自 “飛翔正義的部落格” 部落格,請務必保留此出處http://xzq2000.blog.51cto.com/2487359/1767391
《代碼大全2》學習筆記2