当前位置:首页 > 工业技术
C++  API设计
C++  API设计

C++ API设计PDF电子书下载

工业技术

  • 电子书积分:13 积分如何计算积分?
  • 作 者:(美)MARTINREDDY著;刘晓娜,臧秀涛,林健译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2013
  • ISBN:9787115322999
  • 页数:363 页
图书介绍:本书通过大量C++代码阐述每一个概念,介绍了开发世界级API开发的各种策略。主要探讨了接口设计、文档、测试,以及脚本处理和插件可扩展性。通书重强调生成优雅且可长期使用的API。本书适合有一定C++编程经验的程序员阅读,也适合对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案例研究: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

相关图书
作者其它书籍
返回顶部