本书是专为有经验的C++软件的开发者、系统设计师、软件质量保证人员编写的。适合从事大型软件开发工作(如数据库、操作系统、编译程序和框架)的人员阅读。
本书将高层设计概念与特定的C++编程细节结合起来,满足下面两个要求:
1、一本面向对象设计的书,尤其侧重于C++编程语言实现方面。
2、一本c++程序设计的书,描述如何使用C++编程语言来开发非常大型的系统。
第0章 引言
0.1 从C到C++
0.2 用C++开发大型项目
0.3 重用
0.4 质量
0.5 软件开发工具
0.6 小结
第1部分 基础知识
第1章 预备知识
1.1 多文件C++程序
l.2 tyPedef(类型别名)声明
1.3 assert语句
1.4 有关风格的一些问题
1.5 迭代器
1.6 逻辑设计符号
1.7 继承与分层
1.8 最小化
1.9 小结
第2章 基本规则
2.1 概述
2.2 成员数据访问
2.3 全局名称空间
2.4 包含卫哨
2.5 冗余包含卫哨
2.6 文档
2.7 标识符命名现则
2.8 小结
第2部分 物理设计概念
第3章 组件
3.1 组件与类
3.2 物理设计规则
3.3 依赖(DependsOn)关系
3.4 隐含依赖
3.5 提取实际的依赖
3.6 友元关系
3.7 小结
第4章 物理层次结构
4.1 软件测试的一个比喻
4.2 一个复杂的子系统
4.3 测试好接口时的困难
4.4 易测试性设计
4.5 隔离测试
4.6 非循环物理依赖
4.7 层次号
4.8 分层次测试和增量式测试
4.9 测试一个复杂子系统
4.10 易测试性和测试
4.11 循环物理依赖
4.12 累积组件依赖
4.13 物理设计的质量
4.14 小结
第5章 层次化
5.1 导致循环物理依赖的一些原因
5.2 升级
5.3 降级
5.4 不透明指针
5.5 哑数据
5.6 冗余
5.7 回调
5.8 管理类
5.9 分解
5.10 升级封装
5.11 小结
第6章 绝缘
6.1 从封装到绝缘
6.2 C++结构和编译时耦合
6.3 部分绝缘技术
6.4 整体的绝缘技术
6.5 过程接口
6.6 绝缘或不绝缘
6.7 小结
第7章 包
7.1 从组件到包
7.2 注册包前缀
7.3 包层次化
7.4 包绝缘
7.5 包群(packape groups)
7.6 发布过程
7.7 main程序
7.8 启动(start-up)
7.9 小结
第3部分 逻辑设计问题
第8章 构建一个组件
8.1 抽象和组件
8.2 组件接口设计
8.3 封装程度
8.4 辅助实现类
8.5 小结
第9章 设计一个函数
9.1 函数接口规格说明
9.2 在接口中使用的基本类型
9.3 特殊情况函数
9.4 小结
第10章 实现一个对象
10.1 数据成员
10.2 函数定义
10.3 内存管理
10.4 在大型工程中使用C++模板
10.5 小结
附录A 协议层次结构设计板式
附录B 实现一个与ANSIC兼容的C++接口
附录C 一个依赖提取器/分析器包
附录D 快速参考
参考文献
作为Mentor Graphics公司IC分部的成员,我有幸与许多富有才智的软件工程师一起工作,共同开发了一些非常大型的系统。
早是1985年,Mentor Graphics公司就是最早用C++开发实际的大型项目的公司之一。那时,无人知道如何做,也没有人预料到项目会出现这样的问题——费用失控、偏离计划、可执行代码庞大、性能低劣以及令人难以置信的昂贵的开发周期,这是不成熟的开发方法不可避免的结果。
许多有价值的经验都是经过痛苦的历程获得的。没有什么书可以帮助指导这种设计过程,也从未有人在这样的规模上尝试使用面向对象设计。
十年后,由于积累了大量有价值的经验,Mentor Graphics公司已用C++开发了数个大型软件系统,同时也为其他人在做同样的工作时不用再付出高昂代价开辟了道路。
在我13年的C语言(后来转为C++)计算机辅助设计(CAD)软件开发生涯中,我多次看到了这样的情况:提前计划好总能生产出高质量、晚维护的软件产品。在Mentor Graphics公司,我一直强调要从一开始就确保质量,要把质量作为设计过程中一个必不可少的部分。
1990年我在Columbia大学开设了一门名为“面向对象设计与编程”的研究生课程。从1991年起,作为这门课程的老师,我有机会将我们在Mentor Graphics公司获得的许多经验传授给学生,这些经验是我们在从事工业化软件的开发过程中取得的。来自数百个研究生和专业程序员的提问和反馈信息,帮助我明确了很多重要的概念。本书是这些经验的总结。据我所知,这是第一本指导开发大型C++项目的书,也是第一本针对大天型C++项目中出现的质量问题的书。我希望这些住处在读者的工作中有用,就像在我的工作中所起的作用一样。