C++ API设计PDF电子书下载
- 电子书积分:13 积分如何计算积分?
- 作 者:(美)MARTINREDDY著;刘晓娜,臧秀涛,林健译
- 出 版 社:北京:人民邮电出版社
- 出版年份:2013
- ISBN:9787115322999
- 页数:363 页
第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并行开发 8
1.4何时应当避免使用API 9
1.5 API示例 10
1.5.1 API层次 10
1.5.2真实示例 12
1.6文件格式和网络协议 13
1.7关于本书 15
第2章 特征 17
2.1问题域建模 17
2.1.1提供良好的抽象 17
2.1.2关键对象的建模 19
2.2隐藏实现细节 20
2.2.1物理隐藏:声明与定义 20
2.2.2逻辑隐藏:封装 22
2.2.3隐藏成员变量 23
2.2.4隐藏实现方法 26
2.2.5隐藏实现类 28
2.3最小完备性 29
2.3.1不要过度承诺 29
2.3.2谨慎添加虚函数 30
2.3.3便捷API 31
2.4易用性 33
2.4.1可发现性 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回调、观察者和通知 50
2.6稳定的、文档详细且经过测试的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的优点 61
3.1.5 Pimpl的缺点 62
3.1.6 C语言的不透明指针 62
3.2单例 64
3.2.1在C+++中实现单例 64
3.2.2使单例线程安全 66
3.2.3单例与依赖注入 68
3.2.4单例与单一状态 69
3.2.5单例与会话状态 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实现观察者模式 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创建用例 95
4.3.1开发用例 95
4.3.2用例模板 95
4.3.3编写高质量用例 96
4.3.4需求与敏捷开发 98
4.4 API设计的元素 100
4.5架构设计 102
4.5.1架构的开发 103
4.5.2架构的约束 104
4.5.3识别主要抽象 105
4.5.4创造关键对象 106
4.5.5架构模式 109
4.5.6架构的交流 110
4.6类的设计 111
4.6.1面向对象概念 112
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函数设计 121
4.7.1函数设计选项 121
4.7.2函数命名 122
4.7.3函数参数 123
4.7.4错误处理 125
第5章 风格 129
5.1纯C API 129
5.1.1 ANSI C特性 130
5.1.2 ANSI C API的优点 132
5.1.3使用ANSI C编写API 132
5.1.4从C+++中调用C函数 134
5.1.5案例研究:FMOD C API 135
5.2面向对象的C+++ API 136
5.2.1面向对象API的优点 136
5.2.2面向对象API的缺点 136
5.2.3案例研究:FMODC+++ API 137
5.3基于模板的API 138
5.3.1基于模板的API示例 138
5.3.2模板与宏 139
5.3.3基于模板的API的优点 140
5.3.4基于模板的API的缺点 141
5.4数据驱动型API 141
5.4.1数据驱动型Web服务 142
5.4.2数据驱动型API的优点 143
5.4.3数据驱动API的缺点 144
5.4.4支持可变参数列表 144
5.4.5案例研究:FMOD数据驱动型API 147
第6章C+++用法 149
6.1命名空间 149
6.2构造函数和赋值 150
6.2.1控制编译器生成的函数 152
6.2.2定义构造函数和赋值操作符 153
6.2.3 explicit关键字 154
6.3 const正确性 155
6.3.1方法的const正确性 155
6.3.2参数的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函数参数 171
6.6.1指针与引用参数 171
6.6.2默认参数 172
6.7避免使用?define定义常量 173
6.8避免使用友元 175
6.9导出符号 176
6.10编码规范 179
第7章 性能 181
7.1通过const引用传递输入参数 182
7.2最小化?nclude依赖 184
7.2.1避免“无所不包型”头文件 184
7.2.2前置声明 184
7.2.3 冗余的?include警戒语句 186
7.3声明常量 188
7.4初始化列表 190
7.5内存优化 192
7.6除非需要,勿用内联 196
7.7写时复制 198
7.8迭代元素 202
7.8.1迭代器 202
7.8.2随机访问 203
7.8.3数组引用 204
7.9性能分析 205
7.9.1时效性分析 205
7.9.2基于内存的分析 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文件格式和并行发布产品 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预发布审查 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文档涉及的内容 234
9.2文档的类型 236
9.2.1自动生成的API文档 237
9.2.2概述文档 237
9.2.3示例和教程 238
9.2.4发布说明 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测试驱动开发 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缺陷跟踪系统 279
10.5.4持续构建系统 280
第11章 脚本化 282
11.1添加脚本绑定 282
11.1.1扩充或嵌入 282
11.1.2脚本化的优点 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构造函数 292
11.3.4扩充Python API 293
11.3.5 C+++中的继承 295
11.3.6跨语言多态 296
11.3.7支持迭代器 298
11.3.8综合应用 298
11.4使用SWIG添加Ruby绑定 300
11.4.1使用SWIG包装C+++ API 301
11.4.2调整Ruby API 303
11.4.3构造函数 304
11.4.4扩充Ruby API 304
11.4.5 C+++中的继承 305
11.4.6跨语言多态 307
11.4.7综合应用 307
第12章 可扩展性 310
12.1通过插件扩展 310
12.1.1插件模型概览 311
12.1.2插件系统设计问题 313
12.1.3以C+++实现插件 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
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《设计十六日 国内外美术院校报考攻略》沈海泯著 2018
- 《计算机辅助平面设计》吴轶博主编 2019
- 《高校转型发展系列教材 素描基础与设计》施猛责任编辑;(中国)魏伏一,徐红 2019
- 《景观艺术设计》林春水,马俊 2019
- 《高等教育双机械基础课程系列教材 高等学校教材 机械设计课程设计手册 第5版》吴宗泽,罗圣国,高志,李威 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《Cinema 4D电商美工与视觉设计案例教程》樊斌 2019
- 《通信电子电路原理及仿真设计》叶建芳 2019
- 《高等学校“十三五”规划教材 C语言程序设计》翟玉峰责任编辑;(中国)李聪,曾志华,江伟 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《办好人民满意的教育 全国教育满意度调查报告》(中国)中国教育科学研究院 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《人民院士》吴娜著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《中国人民的心》杨朔著;夕琳编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中华人民共和国成立70周年优秀文学作品精选 短篇小说卷 上 全2册》贺邵俊主编 2019
- 《指向核心素养 北京十一学校名师教学设计 数学 九年级 上 配人教版》周志英总主编 2019
- 《中华人民共和国成立70周年优秀文学作品精选 中篇小说卷 下 全3册》洪治纲主编 2019