注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡軟件與程序設計C/C++及其相關C++ API設計

C++ API設計

C++ API設計

定 價:¥89.00

作 者: Martin Reddy 著,劉曉娜,臧秀濤,林健 譯
出版社: 人民郵電出版社
叢編項:
標 簽: C C++ C# VC VC++ 程序設計 計算機/網(wǎng)絡

ISBN: 9787115322999 出版時間: 2013-08-01 包裝: 平裝
開本: 16開 頁數(shù): 380 字數(shù):  

內(nèi)容簡介

  現(xiàn)代軟件開發(fā)中的一大難題就是如何編寫優(yōu)質(zhì)的API。API負責為某個組件提供邏輯接口并隱藏該模塊的內(nèi)部細節(jié)。多數(shù)程序員依靠的是經(jīng)驗和冒險,從而很難達到健壯、高效、穩(wěn)定、可擴展性強的要求。Martin Reddy博士在自己多年經(jīng)驗基礎之上,對于不同API風格與模式,總結出了API設計的種種最佳策略,著重針對大規(guī)模長期開發(fā)項目,輔以翔實的代碼范例,從而有助于設計決策的成功實施,以及軟件項目的健壯性及穩(wěn)定性的實現(xiàn)。《C++ API設計》主要內(nèi)容:API簡介及其特點API的一些設計模式及慣用法影響API的設計的一些C++特性把控API的風格與性能版本控制與文檔化的實現(xiàn)各種優(yōu)秀的測試方法如何創(chuàng)建腳本綁定,以便API能被諸如Ruby和Python等語言調(diào)用可擴展性API的基本實現(xiàn)方式類庫的編譯器實現(xiàn)

作者簡介

  Martin Reddy,博士是軟件行業(yè)的一名老兵,有著15年以上的從業(yè)經(jīng)驗,共撰寫過40多篇論文,擁有3項軟件專利,并與他人合著了Level of Detail for 3D Graphics。另外,他還是ACM以及IEEE的會員。早年,他曾在SRI International供職5年,主要從事分布式三維地形可視化技術方面的工作,他成功創(chuàng)建了在Web上描述3D地球空間信息模型的ISO標準,并且還連續(xù)兩年被選為Web3D協(xié)會的會長。他曾在Pixar動畫工作室工作過6年,擔任內(nèi)部動畫系統(tǒng)的首席工程師,設計并實現(xiàn)了很多高性能API,這些API在一些奧斯卡獲獎及提名影片的制作中都發(fā)揮了關鍵作用,這些影片有《海底總動員》、《超人總動員》、《賽車總動員》、《料理鼠王》,以及《機器人總動員》等。他還開辦了一家咨詢公司Code Reddy,為各家軟件公司提供技術咨詢,主要客戶有Linden Lab和Planet 9 Studios,為大型在線3D虛擬世界《第二人生》設計了API并改善了其基本架構?,F(xiàn)在他擔任ToyTalk公司的首席技術官。

圖書目錄

第1章 API簡介  1
1.1  什么是API  1
1.1.1  契約和承包人  2
1.1.2  C++中的API  3
1.2  API設計上有什么不同  4
1.3  為什么使用API  5
1.3.1  更健壯的代碼  6
1.3.2  代碼復用  6
1.3.3  并行開發(fā)  8
1.4  何時應當避免使用API  9
1.5  API示例  10
1.5.1  API層次  10
1.5.2  真實示例  12
1.6  文件格式和網(wǎng)絡協(xié)議  13
1.7  關于本書  15
第2章 特征  17
2.1  問題域建?! ?7
2.1.1  提供良好的抽象  17
2.1.2  關鍵對象的建?! ?9
2.2  隱藏實現(xiàn)細節(jié)  20
2.2.1  物理隱藏:聲明與定義  20
2.2.2  邏輯隱藏:封裝  22
2.2.3  隱藏成員變量  23
2.2.4  隱藏實現(xiàn)方法  26
2.2.5  隱藏實現(xiàn)類  28
2.3  最小完備性  29
2.3.1  不要過度承諾  29
2.3.2  謹慎添加虛函數(shù)  30
2.3.3  便捷API  31
2.4  易用性  33
2.4.1  可發(fā)現(xiàn)性  34
2.4.2  不易誤用  34
2.4.3  一致性  36
2.4.4  正交  38
2.4.5  健壯的資源分配  40
2.4.6  平臺獨立  43
2.5  松耦合  44
2.5.1  僅通過名字耦合  45
2.5.2  降低類耦合  45
2.5.3  刻意的冗余  47
2.5.4  管理器類  48
2.5.5  回調(diào)、觀察者和通知  50
2.6  穩(wěn)定的、文檔詳細且經(jīng)過測試的API  53
第3章 模式  54
3.1  Pimpl慣用法  55
3.1.1  使用Pimpl  56
3.1.2  復制語義  59
3.1.3  Pimpl與智能指針  60
3.1.4  Pimpl的優(yōu)點  61
3.1.5  Pimpl的缺點  62
3.1.6  C語言的不透明指針  62
3.2  單例  64
3.2.1  在C++中實現(xiàn)單例  64
3.2.2  使單例線程安全  66
3.2.3  單例與依賴注入  68
3.2.4  單例與單一狀態(tài)  69
3.2.5  單例與會話狀態(tài)  71
3.3  工廠模式  71
3.3.1  抽象基類  72
3.3.2  工廠示例  73
3.3.3  擴展工廠示例  74
3.4  API包裝器模式  76
3.4.1  代理模式  76
3.4.2  適配器模式  79
3.4.3  外觀模式  81
3.5  觀察者模式  83
3.5.1  MVC架構  83
3.5.2  實現(xiàn)觀察者模式  84
3.5.3  推與拉觀察者  87
第4章 設計  88
4.1  良好設計的例子  89
4.1.1  積累技術債  89
4.1.2  償還技術債  90
4.1.3  為長期而設計  91
4.2  收集功能性需求  92
4.2.1  什么是功能性需求  93
4.2.2  功能性需求舉例  94
4.2.3  維護需求  94
4.3  創(chuàng)建用例  95
4.3.1  開發(fā)用例  95
4.3.2  用例模板  95
4.3.3  編寫高質(zhì)量用例  96
4.3.4   需求與敏捷開發(fā)  98
4.4  API設計的元素  100
4.5  架構設計  102
4.5.1  架構的開發(fā)  103
4.5.2  架構的約束  104
4.5.3  識別主要抽象  105
4.5.4  創(chuàng)造關鍵對象  106
4.5.5  架構模式  109
4.5.6  架構的交流  110
4.6  類的設計  111
4.6.1  面向?qū)ο蟾拍睢 ?12
4.6.2  類設計選項  113
4.6.3  使用繼承  113
4.6.4  Liskov替換原則  115
4.6.5  開放?封閉原則  118
4.6.6  迪米特法則  119
4.6.7  類的命名  120
4.7  函數(shù)設計  121
4.7.1  函數(shù)設計選項  121
4.7.2  函數(shù)命名  122
4.7.3  函數(shù)參數(shù)  123
4.7.4  錯誤處理  125
第5章 風格  129
5.1  純C API  129
5.1.1  ANSI C特性  130
5.1.2  ANSI C API的優(yōu)點  132
5.1.3  使用ANSI C編寫API  132
5.1.4  從C++中調(diào)用C函數(shù)  134
5.1.5  案例研究:FMOD C API  135
5.2  面向?qū)ο蟮腃++ API  136
5.2.1  面向?qū)ο驛PI的優(yōu)點  136
5.2.2  面向?qū)ο驛PI的缺點  136
5.2.3  案例研究:FMOD C++ API  137
5.3  基于模板的API  138
5.3.1  基于模板的API示例  138
5.3.2  模板與宏  139
5.3.3  基于模板的API的優(yōu)點  140
5.3.4  基于模板的API的缺點  141
5.4  數(shù)據(jù)驅(qū)動型API  141
5.4.1  數(shù)據(jù)驅(qū)動型Web服務  142
5.4.2  數(shù)據(jù)驅(qū)動型API的優(yōu)點  143
5.4.3  數(shù)據(jù)驅(qū)動API的缺點  144
5.4.4  支持可變參數(shù)列表  144
5.4.5  案例研究:FMOD數(shù)據(jù)驅(qū)動型API  147
第6章 C++用法  149
6.1  命名空間  149
6.2  構造函數(shù)和賦值  150
6.2.1  控制編譯器生成的函數(shù)  152
6.2.2  定義構造函數(shù)和賦值操作符  153
6.2.3  explicit關鍵字  154
6.3  const正確性  155
6.3.1  方法的const正確性  155
6.3.2  參數(shù)的const正確性  157
6.3.3  返回值的const正確性  157
6.4  模板  158
6.4.1  模板術語  158
6.4.2  隱式實例化API設計  160
6.4.3  顯式實例化API設計  162
6.5  操作符重載  164
6.5.1  可重載的操作符  164
6.5.2  自由操作符與成員操作符  165
6.5.3  為類添加操作符  166
6.5.4  操作符語法  168
6.5.5  轉換操作符  170
6.6  函數(shù)參數(shù)  171
6.6.1  指針與引用參數(shù)  171
6.6.2  默認參數(shù)  172
6.7  避免使用#define定義常量  173
6.8  避免使用友元  175
6.9  導出符號  176
6.10  編碼規(guī)范  179
第7章 性能  181
7.1  通過const引用傳遞輸入?yún)?shù)  182
7.2  最小化#include依賴  184
7.2.1  避免“無所不包型”頭文件  184
7.2.2  前置聲明  184
7.2.3  冗余的#include警戒語句  186
7.3  聲明常量  188
7.4  初始化列表  190
7.5  內(nèi)存優(yōu)化  192
7.6  除非需要,勿用內(nèi)聯(lián)  196
7.7  寫時復制  198
7.8  迭代元素  202
7.8.1  迭代器  202
7.8.2  隨機訪問  203
7.8.3  數(shù)組引用  204
7.9  性能分析  205
7.9.1  時效性分析  205
7.9.2  基于內(nèi)存的分析  207
7.9.3  多線程分析  208
第8章 版本控制  209
8.1  版本號  209
8.1.1  版本號的意義  209
8.1.2  小眾的編號方案  210
8.1.3  提供API的版本信息  211
8.2  軟件分支策略  213
8.2.1  分支策略  213
8.2.2  分支方針  213
8.2.3  API和并行分支  214
8.2.4  文件格式和并行發(fā)布產(chǎn)品  215
8.3  API的生命周期  216
8.4  兼容性級別  217
8.4.1  向后兼容性  217
8.4.2  功能兼容性  218
8.4.3  源代碼兼容性  218
8.4.4  二進制兼容性  219
8.4.5  向前兼容性  221
8.5  怎樣維護向后兼容性  222
8.5.1  添加功能  222
8.5.2  修改功能  223
8.5.3  棄用功能  224
8.5.4  移除功能  226
8.6  API審查  226
8.6.1  API審查的目的  226
8.6.2  API預發(fā)布審查  227
8.6.3  API預提交審查  228
第9章 文檔  230
9.1  編寫文檔的理由  230
9.1.1  定義行為  230
9.1.2  為接口契約編寫文檔  232
9.1.3  告知行為的改變  233
9.1.4  文檔涉及的內(nèi)容  234
9.2  文檔的類型  236
9.2.1  自動生成的API文檔  237
9.2.2  概述文檔  237
9.2.3  示例和教程  238
9.2.4  發(fā)布說明  238
9.2.5   授權信息  239
9.3  文檔可用性  241
9.4  使用Doxygen  242
9.4.1  配置文件  242
9.4.2  注釋風格和命令  242
9.4.3  API注釋  243
9.4.4  文件注釋  245
9.4.5  類注釋  245
9.4.6  方法注釋  246
9.4.7  枚舉注釋  247
9.4.8  帶有文檔的示例頭文件  247
第10章 測試  250
10.1  編寫測試的理由  250
10.2  API測試的類型  252
10.2.1  單元測試  253
10.2.2  集成測試  255
10.2.3  性能測試  257
10.3  編寫良好的測試  259
10.3.1  良好測試的特征  259
10.3.2  測試對象  260
10.3.3  關注測試工作量  261
10.3.4  與QA一起工作  261
10.4  編寫可測試的代碼  262
10.4.1  測試驅(qū)動開發(fā)  262
10.4.2  樁對象和模擬對象  264
10.4.3  測試私有代碼  267
10.4.4  使用斷言  269
10.4.5  契約編程  270
10.4.6  記錄并重放功能  272
10.4.7  支持國際化  273
10.5  自動化測試工具  273
10.5.1  自動化測試框架  274
10.5.2  代碼覆蓋率  277
10.5.3  缺陷跟蹤系統(tǒng)  279
10.5.4  持續(xù)構建系統(tǒng)  280
第11章 腳本化  282
11.1  添加腳本綁定  282
11.1.1  擴充或嵌入  282
11.1.2  腳本化的優(yōu)點  283
11.1.3  語言兼容性問題  284
11.1.4  跨越語言障礙  285
11.2  腳本綁定技術  286
11.2.1  Boost Python  286
11.2.2  SWIG  286
11.2.3  Python-SIP  287
11.2.4  COM自動化  287
11.2.5  CORBA  288
11.3  使用Boost Python添加Python綁定  289
11.3.1  構建Boost Python  290
11.3.2  使用Boost Python包裝C++ API  290
11.3.3  構造函數(shù)  292
11.3.4  擴充Python API  293
11.3.5  C++中的繼承  295
11.3.6  跨語言多態(tài)  296
11.3.7  支持迭代器  298
11.3.8  綜合應用  298
11.4  使用SWIG添加Ruby綁定  300
11.4.1  使用SWIG包裝C++ API  301
11.4.2  調(diào)整Ruby API  303
11.4.3  構造函數(shù)  304
11.4.4  擴充Ruby API  304
11.4.5  C++中的繼承  305
11.4.6  跨語言多態(tài)  307
11.4.7  綜合應用  307
第12章 可擴展性  310
12.1  通過插件擴展  310
12.1.1  插件模型概覽  311
12.1.2  插件系統(tǒng)設計問題  313
12.1.3  以C++實現(xiàn)插件  314
12.1.4  插件API  315
12.1.5  插件示例  317
12.1.6  插件管理器  318
12.1.7  插件版本控制  321
12.2  通過繼承擴展  322
12.2.1  添加功能  322
12.2.2  修改功能  323
12.2.3  繼承與STL  324
12.2.4  繼承與枚舉  325
12.2.5  訪問者模式  326
12.2.6  禁止子類化  331
12.3  通過模板擴展  332
12.3.1  基于策略的模板  332
12.3.2  奇特的遞歸模板模式  334
附錄A  庫  336
參考文獻  351
索引  355

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號