代碼大全讀書筆記

按照讀書順序整理
述而不作
此版為草稿



第二部分:高質量代碼


第六章:可工作的類

a.好處

提高程序自說明性
隱藏細節
隔離復雜度
流暢的參數傳遞
容易重構
...

public下實質就是對外開放的接口,而private則是封裝的細節

ADT:應采用盡可能高的抽象

b.接口設計原則

1.一個類只實現一個ADT,內聚性要高。對類內雜亂的函數:

轉移到其他類里,
轉移為私用子函數

2.使用一致的抽象層次,混亂的抽象會讓程序難以理解:
事務層次的類不應該提供容器的操作窗口,
如果有操作需求,也應是事務概念的操作

3.接口是對捕捉到的抽象進行選擇,
4.檢查是否存在相反操作需求
5.一半子程序使用一半數據,另一半子 程序使用另外一半數據,那么拆分類吧。
6.盡量把語義接口元素轉化為編程接口元素。如使用斷言等。

總之,接口應該展示一致的抽象。

c.封裝原則

對c++等語言代碼中,不要在private部分暴露實現細節。
封裝方法是

private EmployImplymentation * m_implymenTation

而把細節放入implymentation類里。
至少讀代碼時別去私用部分里找細節

封裝是對接口編程,而不是對內部實現細節編程。

封裝的思維:

如果一個人調用庫時發現問題,不應該查閱源代碼,而是聯系作者去修改發布。類內實現細節不應該影響使用者編程。如:

邏輯過程缺失:perform內包含initial,沒讀細節的使用者先initial再perform就會出bug

假設過強:使用classA.num代替classB.num.客戶不知道他們兩個的num相同。

緊密耦合事實上消除了封裝性。

e.繼承

種類:

公有:class a:public class baseClass;
1.baseClass中public元素在a中還是public,base中private元素在a中不可見
2.代表 is a 關系

私有:class b:public class base
1.base中public元素在b中是private,base中private不可見

何時選擇繼承:

1.多個類的共有元素需要一個基類去集中
2.派生類必須能夠通過基類的接口直接調用

3.LSP原則:使用時無須思考不同派生類的語義含義,即基類提供之接口讓人直接理解派生類的行為如:

loanAccount的interest和saveAccount中interest中語義不同,就不應在基類account中放入interest元素,interest的繼承并沒有減少程序員的思考量

4.不要過度設計。為未來工作著想的方式是讓眼下之成果盡可能清晰簡單。---只有一個派生類的繼承很值得懷疑
5.case語句下多操作都很類似暗示著多態的需求。
而種類確實不同的操作則不必。
6.繼承體系盡可能低

幾點注意事項:

1.避免萬能類,應該把功能放入萬能類他所操作的類上去。
2.避免動詞命名的類:只有動作而無數據的類只應該是其他類的子程序。

在軟件的歷史中,粒度的增長帶來軟件開發的進步。語句-子程序-類-包等。

第七章:高質量子程序


a.子程序作用

1.子程序名提供邏輯抽象解釋
2.避免重復代碼
3.封裝事務過程
.......

b.設計

內聚性:
功能內聚性:只完成一個功能
順序內聚性:順序執行的操作由上一步ans求下一步
通信內聚性:操作共享數據但無其他聯系
臨時內聚 :startup()等,不相關的操作組合在一起
邏輯內聚:通過傳入的控制字段選擇不同操作。如
inputAll(type)

對邏輯內聚:

不應該用一個程序控制另外一個程序的處理方式。
應把程序分為幾個平行程序在上層調用。若有相似的底層操作,則封裝成底層函數。
但如程序僅為if/case之內選擇不同函數,就成了常用的事件處理器。

c.函數命名

避免使用含糊的詞 如:HandleOutput->FormatAndPrint

找不到準確的詞說明子程序可能需要修改

描述程序做的所有事 :一個動賓結構,object.function()則不必
或者描述程序的返回值

一個恰如其份但是糟糕的函數名說明需要重新設計

#######子程序長度一般應少于200行

d.參數

1.接口參數按一定順序排列,如:修改-輸入-輸出型參數
考慮命名規則
2.使用自己函數定義的工作變量,如:
int workingVal=inputVal workingVal....... //注意這兩個變量命名是很差的
3.盡量采用const關鍵字
4.以斷言或注釋解釋參數的操作類型數值范圍等
5.參數過多說明耦合緊密。人腦很難記住超過7個單詞

7.確保形參實參一致
8.傳遞數據成員還是對象:
--取決于抽象

函數不要返回局部變量

e.宏程序

1.參數要套括號==
2.整個表達式外要套括號
3.多條語句外套{}
4.除非必要,還是不要用了吧...




第六部分:變量


代碼被閱讀的時間遠遠大于編寫的時間,確保代碼閱讀方便。

一般事項

1.顯式聲明,初始化
2.就近聲明和初始化
3.讓變量的跨度和存活時間盡可能短以減少攻擊窗口。(盡量不使用全局變量)
把相關的語句放在一起
提取語句成為單獨的子程序
4.拋棄變量時賦不合理的NULL值
5.變量晚綁定值可以獲得靈活性(使用具名變量)
6.單個變量只用于單一用途
7.檢查是否有未使用的已聲明變量


變量命名

1.8到16個字符
2.體現問題而非解決方案
3.一致的命名變量。
如revenueTotal---expenseAverage
例外numCustomers
4.采用對仗詞如old-new,source-target
5.用比i,j,k更具意義的詞為大循環或多重循環的循環變量命名
6.temp說明程序員并沒有完全的搞懂問題。
7.done,found,error等布爾變量。
8.枚舉類型使用組前綴。

一.命名規則

1.命名規則為代碼增加了結構,是一項全局決策。
2.用g_標識全局變量
3.變量首字母小寫,函數首字母大寫。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • 第一部分 打好基礎 Laying the Foundation 第一章 歡迎進入軟件構建的世界 Welcome t...
    白樺葉閱讀 4,654評論 0 17
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,710評論 18 399
  • 曾經我們的臉上總會帶著稚嫩的標簽,隨著時間,它慢慢褪去,身邊的人也在不停的變換著,感情的深淺忽上忽下,不知道是我...
    西柚小姐_085f閱讀 184評論 0 0
  • 小年夜,家家燈火通明,這樣的節日總會讓悲傷的字眼顯得格外冰冷,讓悲傷的人變得格格不入。 接到潔的電話時,我正刷著朋...
    木上南方閱讀 267評論 1 3
  • 知: 古人讀書,求博、求精,先博而后精。完全以興趣主導,突破目的與學科間界限。完全聽從自己的好奇心與求知欲去追尋一...
    sly61閱讀 501評論 0 1