商品簡介
本書內容簡介:使用現代C++編寫可維護、可擴展和持久的軟件。對於每一個對好的C++代碼感興趣的開發人員、軟件架構師或團隊領導來說,這本書都是必須的,因此也想節省開發成本。如果你想自學編寫整潔C++代碼,本書正是你所需要的。編寫它是為了幫助所有級別的C++開發人員,並通過示例展示如何編寫可理解的、靈活的、可維護的和高效的C++代碼。即使是經驗豐富的C++開發人員,在本書中也會發現一些有用的信息和數據。
目次
譯者序關於作者關於技術審校致謝第1章 簡介11.1 軟件熵21.2 整潔的代碼41.3 為什麼使用C++41.4 C++11―新時代的開始51.5 適合本書的讀者51.6 本書使用的約定61.6.1 擴展閱讀61.6.2 說明、提示和警告61.6.3 示例代碼71.6.4 編碼風格71.7 相關網站和代碼庫71.8 UML圖8第2章 構建安全體系92.1 測試的必要性92.2 測試入門112.3 單元測試132.4 關於QA152.5 良好的單元測試原則162.5.1 單元測試的代碼的質量162.5.2 單元測試的命名162.5.3 單元測試的獨立性172.5.4 一個測試一個斷言182.5.5 單元測試環境的獨立初始化192.5.6 不對getters和setters做單元測試192.5.7 不對第三方代碼做單元測試202.5.8 不對外部系統做單元測試202.5.9 如何處理數據庫的訪問202.5.10 不要混淆測試代碼和產品代碼212.5.11 測試必須快速執行232.5.12 測試替身24第3章 原則273.1 什麼是原則273.2 保持簡單和直接原則(KISS)283.3不需要原則(YAGNI)293.4 避免複製原則(DRY)293.5 信息隱藏原則303.6 高內聚原則333.7 松耦合原則353.8 小心優化原則383.9 最少驚訝原則(PLA)393.10 童子軍原則39第4章 C++代碼整潔的基本規範414.1 良好的命名424.1.1 名稱應該自解釋434.1.2 使用域中的名稱454.1.3 選擇適當抽象層次的名稱454.1.4 避免冗餘的名稱464.1.5 避免晦澀難懂的縮寫474.1.6 避免匈牙利命名和命名前綴474.1.7 避免相同的名稱用於不同的目的484.2 注釋494.2.1 讓寫代碼像講故事一樣494.2.2 不要為易懂的代碼寫注釋504.2.3 不要通過注釋禁用代碼504.2.4 不要寫塊注釋514.2.5 特殊情況的注釋是有用的534.3 函數564.3.1 只做一件事情594.3.2 讓函數盡可能小594.3.3 函數命名614.3.4 使用容易理解的名稱614.3.5 函數的參數和返回值624.4 C++工程中的C風格代碼724.4.1 使用C++的string和stream替代C風格的char*734.4.2避免使用printf()、sprintf()和gets()等744.4.3 使用標準庫的容器而不是C風格的數組774.4.4 用C++類型轉換代替C風格的強制轉換804.4.5 避免使用宏81第5章 現代C++的高級概念835.1 資源管理845.1.1 資源申請即初始化855.1.2 智能指針865.1.3 避免顯式的new和delete925.1.4 管理特有資源925.2 Move語義945.2.1 什麼是Move語義945.2.2 左值和右值的關係955.2.3 右值引用965.2.4 不要濫用Move975.2.5 零原則985.3 編譯器是你的搭檔1025.3.1 自動類型推導1025.3.2 編譯時計算1055.3.3 模板變量1075.4 不允許未定義的行為1085.5 Type-Rich編程1105.6 瞭解你使用的庫1165.6.1 熟練使用1165.6.2 熟練使用Boost1215.6.3 應該瞭解的一些庫1215.7 恰當的異常和錯誤處理機制1225.7.1 防患於未然1235.7.2 異常即異常―字面上的意思1265.7.3 如果不能恢復則儘快退出1285.7.4 用戶自定義異常1285.7.5 值類型拋出,常量引用類型捕獲1305.7.6 注意catch的正確順序130第6章 面向對象1316.1 面向對象思想1326.2 抽象―解決複雜問題的關鍵因素1336.3 類的設計原則1346.3.1 讓類盡可能小1346.3.2 單一職責原則(SRP)1356.3.3 開閉原則(OCP)1356.3.4 裡氏替換原則(LSP)1366.3.5 接口隔離原則(ISP)1466.3.6 無環依賴原則1486.3.7 依賴倒置原則(DIP)1516.3.8 不要和陌生人說話(迪米特法則)1566.3.9 避免“貧血類”1606.3.10 只說不問1606.3.11 避免類的靜態成員162第7章 函數式編程1647.1 什麼是函數式編程1657.1.1 什麼是函數1667.2.2 pure函數和impure函數1677.2 現代C++中的函數式編程1687.2.1 C++模板函數編程1687.2.2 仿函數1707.2.3 綁定和函數包裝1767.2.4 Lambda表達式1787.2.5 通用Lambda表達式(C++14)1807.3 高階函數1817.4 整潔的函數式編程代碼186第8章 測試驅動開發1888.1 普通的舊單元測試的缺點1898.2 測試驅動開發作為顛覆者1908.2.1 TDD的流程1908.2.2 TDD的一個小例子:Code Kata1938.3 TDD的優勢2108.4 什麼時候不應該使用TDD212第9章 設計模式和習慣用法2139.1 設計原則與設計模式2149.2 常見的設計模式及應用場景2149.2.1 依賴注入模式2159.2.2 Adapter模式2269.2.3 Strategy模式2279.2.4 Command模式2319.2.5 Command處理器模式2359.2.6 Composite模式2389.2.7 Observer模式2419.2.8 Factory模式2459.2.9 Facade模式2489.2.10 Money Class模式2499.2.11 特例模式2529.3 什麼是習慣用法255附錄A UML簡要指南266參考文獻275