-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
6/20 新書到! 5/31 新書到! 5/24 新書到! 5/18 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:斯提芬·羅特類別:1. -> 程式設計 -> C++ -> C++
譯者:
出版社:機械工業出版社C++代碼整潔之道:C++17可持續軟件開發模式實踐 3dWoo書號: 50985
詢問書籍請說出此書號!

有庫存
NT售價: 445

出版日:4/17/2019
頁數:210
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111621904
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

本書介紹如何使用現代C++編寫可維護、可擴展和可持久的軟件。對于每一個對編寫整潔的C++代碼感興趣的開發人員、軟件架構師或團隊領導來說,這本書都是必需的。如果你想自學編寫整潔的C++代碼,本書也正是你需要的。本書旨在幫助所有級別的C++開發人員編寫可理解的、靈活的、可維護的和高效的C++代碼。即使是經驗豐富的C++開發人員,也將受益匪淺。



如果想用C++語言編寫出易維護的、擴展性良好的以及生命力強的軟件,那么,對于所有的軟件開發人員、軟件設計人員、對現代C++代碼感興趣或想降低開發成本的項目領導者來說,本書都是必需品。如果你想自學編寫整潔的C++代碼,那么本書也是你需要的。本書旨在通過一些示例幫助各個技術層次的開發人員編寫出易懂的、靈活的、可維護的和高效的C++代碼。即使你是一名資深的開發工程師,在本書中也可以找到有價值的知識點。

  如果你不關心你的代碼,那么,使用任何編程語言都有可能寫出龐大的、糟糕的以及難以維護的代碼。但是,實際應用中的C++工程往往是糟糕的,并且有越來越壞的趨勢。很多現代C++代碼的風格與20世紀80年代的風格類似。

  提倡軟件工藝和代碼整潔之道的人,好像把C++開發人員遺忘了。網上充斥著大量代碼風格很差的例子,這些例子中的代碼都需要優化,但是在優化的時候,他們完全無視設計模式的基本原則以及良好代碼風格的指導原則,導致最后的代碼雖然高效,但是晦澀難懂。本書將告訴你如何避免這些情況的發生,以及教你如何擺脫編寫C++代碼的陋習。你將會發現你編寫的代碼會變得很高效,更重要的是,你會樂在其中。



你將獲得以下技能:

學會C++整潔代碼的原則和規則。

學會C++測試驅動開發(TDD)。

學會設計模式以及習慣用法的知識。

學會使用書中提到的設計模式。
目錄:

譯者序
關于作者
關于技術審校
致謝
第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
序: