《C++ API设计》
基本信息
作者: (美)Martin Reddy
译者: 刘晓娜 臧秀涛 林健
丛书名: 图灵程序设计丛书
出版社:人民邮电出版社
ISBN:9787115322999
上架时间:2013-7-23
出版日期:2013 年8月
开本:16开
页码:1
版次:1-1
所属分类:计算机 > 软件与程序设计 > C++ > C++
更多关于 》》》《C++ API设计》
内容简介
计算机书籍
如何构建高效、健壮、稳定且可扩展的优质api ?对于这一软件工程上的难题,martin reddy 凭借长期的从业经验,对优质api 所应具备的各要素进行了全面分析,针对api 的不同风格及模式,以及大型长期项目的内在需求,给出了种种最佳设计策略,从而对api 设计过程的规范性及可持续性作出了理论上不可磨灭的贡献。
《c++ api设计》适合具有一定c++ 编程经验的程序员阅读,也适合对api 设计主题感兴趣的读者参考。
现代软件开发中的一大难题就是如何编写优质的api。api负责为某个组件提供逻辑接口并隐藏该模块的内部细节。多数程序员依靠的是经验和冒险,从而很难达到健壮、高效、稳定、可扩展性强的要求。martin reddy博士在自己多年经验基础之上,对于不同api风格与模式,总结出了api设计的种种最佳策略,着重针对大规模长期开发项目,辅以翔实的代码范例,从而有助于设计决策的成功实施,以及软件项目的健壮性及稳定性的实现。
主要内容:
api简介及其特点
api的一些设计模式及惯用法
影响api的设计的一些c++特性
把控api的风格与性能
版本控制与文档化的实现
各种优秀的测试方法
如何创建脚本绑定,以便api能被诸如ruby和python等语言调用
可扩展性api的基本实现方式
类库的编译器实现
目录
《c++ api设计》
第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 案例研究:fmod c++ 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 最小化#include依赖 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
相关推荐
《C++ API设计》探索了常常被忽视的技术性和非技术性问题,有助于推动成功的设计决策,从而产生高质量的、健壮的而且可以长期使用的API。” ——Eric Gregory,Pixar动画工作室软件架构师 “《C++ API设计》面向中...
C++ API设计.pdf
【C++ API设计教程代码】是一份专注于C++应用程序接口(API)设计的教程资源,包含了一系列相关的代码示例和文档。这个压缩包文件提供的内容可能涵盖了从基础概念到高级设计模式,以及文档编写和项目配置等多个方面...
C++ API设计是一门深奥且重要的技术,它关乎到软件的可维护性、扩展性和易用性。在本文中,我们将深入探讨C++ API设计的关键要素,包括接口设计原则、命名规范、错误处理机制、封装策略以及面向对象特性在API设计中...
《c++ api设计》适合具有一定c++ 编程经验的程序员阅读,也适合对api 设计主题感兴趣的读者参考。 现代软件开发中的一大难题就是如何编写优质的api。api负责为某个组件提供逻辑接口并隐藏该模块的内部细节。多数...
C++API设计一书的源代码即: This package contains the C++ source code examples from the book "API Design for C++" by Martin Reddy.
c++ api design . learn how to design c++ api
在C++编程中,API(应用程序接口)设计是构建可重用、可扩展且易于使用的软件组件的关键。API设计的好坏直接影响到代码的...通过学习和分析这些示例,你可以提升自己在C++ API设计上的能力,从而编写出更高质量的代码。
根据给出的文件信息,以下是关于“C++设计API”这本书的知识点。 首先,这本书的标题是...书中的内容可能涵盖了API设计的原则、实践以及如何在C++环境下应用它们,是C++开发者和API设计者不可多得的学习资料。
这份手册旨在帮助程序员更有效地理解和使用C++进行API设计与实现。 C++是一种强类型、静态类型的编程语言,它支持面向对象编程,并在近年来增加了对现代编程范式的支持,如协程、模板元编程和移动语义。C++ API设计...
通过阅读和理解这份文档,开发者可以提高对C++语言的理解,更好地利用C++ API来设计高效、可靠的软件。同时,由于是中文版,对于国内开发者来说,理解和学习将更为便捷。不过,要注意的是,非官方文档可能存在一些...
C++ API 设计时考虑了性能,使用了内存管理和连接池等技术减少开销。通过批量操作(如批量索引和删除),可以进一步提高效率。 6. **示例代码** 以下是一个简单的示例,展示如何使用C++ API 创建索引、索引文档并...
这些内容涵盖了C++程序设计的各个方面,无论是初学者还是经验丰富的开发者,都能从中受益。 此外,手册还可能包含对C++语言特性的深入解释,如重载运算符、继承、多态、模板元编程、SFINAE原则、类型安全等。对于想...
C++ API中文帮助文档是为C++...通过深入学习C++ API中文帮助文档,开发者可以熟练掌握C++标准库的使用,提升代码质量和效率,更好地进行系统设计和开发。这份文档不仅是解决问题的工具,更是提升编程技能的宝贵教材。
10. **设计模式**:设计模式是软件工程中的最佳实践,如工厂模式、单例模式、观察者模式等,在C++中都有广泛应用。 这份C/C++ API帮助文档大全,无论对于初学者还是有经验的开发者,都是一个宝贵的资源。它覆盖了从...
C++ API中文版是一款专为中文用户设计的C++编程参考文档,旨在提供简洁明了的C++标准库接口描述,帮助开发者更高效地理解和使用C++语言。这份API文档通常包含了大量的函数、类和模板的详细说明,是C++程序员必备的...
在C++ API中文参考的两个CHM文件——"C++ Api大全.chm"和"C++API中文参考.CHM"中,开发者可以找到关于C++ API的详细信息。CHM是微软的“Compiled HTML Help”格式,是一种常见于Windows系统的离线帮助文档,其中包含...