C++代碼整潔之道:C++17可持續軟體開發模式實踐

C++代碼整潔之道:C++17可持續軟體開發模式實踐

《C++代碼整潔之道:C++17可持續軟體開發模式實踐》是2019年4月1日機械工業出版社出版的圖書,由[德] 史蒂芬·羅斯(Stephan Roth)編寫。

基本介紹

  • 中文名:C++代碼整潔之道:C++17可持續軟體開發模式實踐
  • 作者:[德] 史蒂芬·羅斯(Stephan Roth)
  • 出版時間:2019年4月1日
  • 出版社:機械工業出版社
  • ISBN:9787111621904
內容簡介,圖書目錄,

內容簡介

本書致力於講述C++整潔代碼之道!如果你想讓自己寫的代碼更加整潔,那么這本書適合你閱讀。本書需要熟悉C++語言的基本概念,才能有效的掌握其中的內容。如果你只是想從C++開發開始,並且沒有C++語言的基礎知識,你應該首先選擇一個好的C++入門的練習項目。此外,本書也不包含任何深奧的技巧和雜亂的知識點。我知道C++有很多令人興奮的技巧,但這些通常不是整潔代碼的精神,也不是現代C++的代碼風格。除此之外,這本書為了幫助C++程式設計師提高技能水平,並舉例說明如何編寫易於理解的、靈活的、可維護的和高效的C++代碼。即使你是一個經驗豐富的C++開發人員,這本書中也有一些值得學習的地方,我認為這些值得學習的地方能夠促進你的工作。書中所提出的原則和實踐可以套用於新的軟體系統,有時被稱為“綠地項目”,以及具有悠久歷史的遺留系統,通常被稱為“棕地項目”。

圖書目錄

譯者序
關於作者
關於技術審校
致謝
第1章 簡介1
1.1 軟體熵2
1.2 整潔的代碼4
1.3 為什麼使用C++4
1.4 C++11—新時代的開始5
1.5 適合本書的讀者5
1.6 本書使用的約定6
1.6.1 擴展閱讀6
1.6.2 說明、提示和警告6
1.6.3 示例代碼7
1.6.4 編碼風格7
1.7 相關網站和代碼庫7
1.8 UML圖8
第2章 構建安全體系9
2.1 測試的必要性9
2.2 測試入門11
2.3 單元測試13
2.4 關於QA15
2.5 良好的單元測試原則16
2.5.1 單元測試的代碼的質量16
2.5.2 單元測試的命名16
2.5.3 單元測試的獨立性17
2.5.4 一個測試一個斷言18
2.5.5 單元測試環境的獨立初始化19
2.5.6 不對getters和setters做單元測試19
2.5.7 不對第三方代碼做單元測試20
2.5.8 不對外部系統做單元測試20
2.5.9 如何處理資料庫的訪問20
2.5.10 不要混淆測試代碼和產品代碼21
2.5.11 測試必須快速執行23
2.5.12 測試替身24
第3章 原則27
3.1 什麼是原則27
3.2 保持簡單和直接原則(KISS)28
3.3 不需要原則(YAGNI)29
3.4 避免複製原則(DRY)29
3.5 信息隱藏原則30
3.6 高內聚原則33
3.7 松耦合原則35
3.8 小心最佳化原則38
3.9 最少驚訝原則(PLA)39
3.10 童子軍原則39
第4章 C++代碼整潔的基本規範41
4.1 良好的命名42
4.1.1 名稱應該自解釋43
4.1.2 使用域中的名稱45
4.1.3 選擇適當抽象層次的名稱45
4.1.4 避免冗餘的名稱46
4.1.5 避免晦澀難懂的縮寫47
4.1.6 避免匈牙利命名和命名前綴47
4.1.7 避免相同的名稱用於不同的目的48
4.2 注釋49
4.2.1 讓寫代碼像講故事一樣49
4.2.2 不要為易懂的代碼寫注釋50
4.2.3 不要通過注釋禁用代碼50
4.2.4 不要寫塊注釋51
4.2.5 特殊情況的注釋是有用的53
4.3 函式56
4.3.1 只做一件事情59
4.3.2 讓函式儘可能小59
4.3.3 函式命名61
4.3.4 使用容易理解的名稱61
4.3.5 函式的參數和返回值62
4.4 C++工程中的C風格代碼72
4.4.1 使用C++的string和stream替代C風格的char*73
4.4.2 避免使用printf()、sprintf()和gets()等74
4.4.3 使用標準庫的容器而不是C風格的數組77
4.4.4 用C++類型轉換代替C風格的強制轉換80
4.4.5 避免使用宏81
第5章 現代C++的高級概念83
5.1 資源管理84
5.1.1 資源申請即初始化85
5.1.2 智慧型指針86
5.1.3 避免顯式的new和delete92
5.1.4 管理特有資源92
5.2 Move語義94
5.2.1 什麼是Move語義94
5.2.2 左值和右值的關係95
5.2.3 右值引用96
5.2.4 不要濫用Move97
5.2.5 零原則98
5.3 編譯器是你的搭檔102
5.3.1 自動類型推導102
5.3.2 編譯時計算105
5.3.3 模板變數107
5.4 不允許未定義的行為108
5.5 Type-Rich編程110
5.6 了解你使用的庫116
5.6.1 熟練使用116
5.6.2 熟練使用Boost121
5.6.3 應該了解的一些庫121
5.7 恰當的異常和錯誤處理機制122
5.7.1 防患於未然123
5.7.2 異常即異常—字面上的意思126
5.7.3 如果不能恢復則儘快退出128
5.7.4 用戶自定義異常128
5.7.5 值類型拋出,常量引用類型捕獲130
5.7.6 注意catch的正確順序130
第6章 面向對象131
6.1 面向對象思想132
6.2 抽象—解決複雜問題的關鍵因素133
6.3 類的設計原則134
6.3.1 讓類儘可能小134
6.3.2 單一職責原則(SRP)135
6.3.3 開閉原則(OCP)135
6.3.4 里氏替換原則(LSP)136
6.3.5 接口隔離原則(ISP)146
6.3.6 無環依賴原則148
6.3.7 依賴倒置原則(DIP)151
6.3.8 不要和陌生人說話(迪米特法則)156
6.3.9 避免“貧血類”160
6.3.10 只說不問160
6.3.11 避免類的靜態成員162
第7章 函式式編程164
7.1 什麼是函式式編程165
7.1.1 什麼是函式166
7.2.2 pure函式和impure函式167
7.2 現代C++中的函式式編程168
7.2.1 C++模板函式編程168
7.2.2 仿函式170
7.2.3 綁定和函式包裝176
7.2.4 Lambda表達式178
7.2.5 通用Lambda表達式(C++14)180
7.3 高階函式181
7.4 整潔的函式式編程代碼186
第8章 測試驅動開發188
8.1 普通的舊單元測試的缺點189
8.2 測試驅動開發作為顛覆者190
8.2.1 TDD的流程190
8.2.2 TDD的一個小例子:Code Kata193
8.3 TDD的優勢210
8.4 什麼時候不應該使用TDD212
第9章 設計模式和習慣用法213
9.1 設計原則與設計模式214
9.2 常見的設計模式及套用場景214
9.2.1 依賴注入模式215
9.2.2 Adapter模式226
9.2.3 Strategy模式227
9.2.4 Command模式231
9.2.5 Command處理器模式235
9.2.6 Composite模式238
9.2.7 Observer模式241
9.2.8 Factory模式245
9.2.9 Facade模式248
9.2.10 Money Class模式249
9.2.11 特例模式252
9.3 什麼是習慣用法255
附錄A UML簡要指南266
參考文獻275

相關詞條

熱門詞條

聯絡我們