第一部分 概念 3
第1章 复杂性 3
1.1 软件固有的复杂性 3
1.1.1 简单软件系统与复杂软件系统的特性 3
1.1.2 为什么软件具有固有的复杂性 4
1.1.3 不限制复杂性的后果 6
1.2 复杂系统的结构 7
1.2.1 复杂系统示例 7
1.2.2 复杂系统的5个属性 9
1.2.3 有组织的复杂性与紊乱的复杂性 10
1.3 还混乱状态以秩序 12
1.3.1 分解的作用 12
补充材料:分析和设计方法的分类 13
1.3.2 抽象的作用 15
1.3.3 层次的作用 15
1.4 设计复杂系统 16
1.4.1 工程是科学也是艺术 16
1.4.2 设计的含义 16
1.5 小结 18
1.6 进一步阅读材料 18
第2章 对象模型 20
2.1 对象模型的演化 20
2.1.1 软件工程的趋势 20
2.1.2 对象模型的基础 24
2.1.3 面向对象编程、面向对象设计和面向对象分析 25
补充材料:对象模型的基础 26
2.2 对象模型的要素 29
2.2.1 编程范例的种类 29
2.2.2 抽象 30
2.2.3 封装 35
2.2.4 模块化 40
2.2.5 层次 43
2.2.6 类型定义 48
2.2.7 并发性 54
2.2.8 持续性 56
2.3 应用对象模型 58
2.3.1 对象模型的优点 58
2.3.2 对象模型的应用 58
2.3.3 未解决的问题 59
2.4 小结 59
2.5 进一步阅读材料 60
第3章 类和对象 61
3.1 对象的本质 61
3.1.1 什么是对象以及什么不是对象 61
3.1.2 状态 63
3.1.3 行为 65
3.1.4 标识 68
3.2 对象间的关系 73
3.2.1 关系的种类 73
3.2.2 链 73
3.2.3 聚合 76
3.3 类的本质 77
3.3.1 什么是类以及什么不是类 77
3.3.2 接口和实现 79
3.3.3 类的生命期 80
3.4 类间的关系 80
3.4.1 关系的种类 80
3.4.2 关联 81
3.4.3 继承 82
补充材料:调用方法 88
3.4.4 聚合 96
3.4.5 使用 98
3.4.6 实例化 99
3.4.7 元类 101
3.5 类和对象的相互作用 102
3.5.1 类和对象间的关系 102
3.5.2 分析和设计中类和对象的角色 102
3.6 有关建立高质量的类和对象 102
3.6.1 衡量抽象的质量 102
3.6.2 选择操作 104
3.6.3 选择关系 105
3.6.4 选择实现 106
3.7 小结 107
3.8 进一步阅读材料 107
第4章 分类 109
4.1 正确分类的重要性 109
4.1.1 分类和面向对象的开发 109
4.1.2 分类的困难 110
4.2 识别类和对象 112
4.2.1 经典的方法与现代的方法 112
补充材料:一个分类问题 113
4.2.2 面向对象分析 116
4.3 关键的抽象和机制 120
4.3.1 识别关键的抽象 120
4.3.2 识别机制 122
4.4 小结 125
4.5 进一步阅读材料 125
第二部分 方法 129
第5章 表示法 129
5.1 表示法的要素 129
5.1.1 多重观察的需要 129
5.1.2 模型与视图 131
5.1.3 逻辑模型与物理模型 131
5.1.4 静态语义与动态语义 132
5.1.5 工具的角色 132
5.2 类图 133
5.2.1 基本要素:类和它们之间的关系 133
5.2.2 基本要素:类类别 136
5.2.3 高级概念 138
5.2.4 规格说明 147
5.3 状态转换图 149
5.3.1 基本要素:状态和状态转换 149
5.3.2 高级概念 152
5.3.3 规格说明 155
5.4 对象图 155
5.4.1 基本要素:对象和它们之间的关系 155
5.4.2 高级概念 159
5.4.3 规格说明 162
5.5 交互图 162
5.5.1 基本要素:对象和交互 162
5.5.2 高级概念 163
5.6 模块图 163
5.6.1 基本要素:模块和它们之间的依赖性 163
5.6.2 基本要素:子系统 165
5.6.3 高级概念 166
5.6.4 规格说明 166
5.7 进程图 167
5.7.1 基本要素:处理器、设备和连接 167
5.7.2 高级概念 168
5.7.3 规格说明 169
5.8 应用表示法 169
5.8.1 面向对象开发的产品 169
5.8.2 伸缩性 169
5.9 小结 170
5.10 进一步阅读材料 170
第6章 过程 171
6.1 首要原则 171
6.1.1 成功项目的特点 171
6.1.2 走向合理的设计过程 173
6.2 开发的微观过程 174
6.2.1 概述 174
6.2.2 识别类和对象 175
6.2.3 识别类和对象的语义 177
6.2.4 识别类和对象之间的关系 179
6.2.5 实现类和对象 182
6.3 开发的宏观过程 183
6.3.1 概述 183
6.3.2 概念建立 185
6.3.3 系统分析 186
6.3.4 系统设计 188
6.3.5 演化 190
6.3.6 维护 193
6.4 小结 194
6.5 进一步阅读材料 195
第7章 运用环境 197
7.1 管理和计划 197
7.1.1 风险管理 197
7.1.2 任务计划 198
7.1.3 走查 199
7.2 人员配备 200
7.2.1 资源配置 200
7.2.2 开发组角色 200
7.3 版本管理 202
7.3.1 集成 202
7.3.2 配置管理和版本控制 203
7.3.3 测试 203
7.4 复用 204
7.4.1 复用的元素 204
7.4.2 建立复用制度 204
7.5 质量保证和度量标准 205
7.5.1 软件质量 205
7.5.2 面向对象的度量标准 206
7.6 文档化 207
7.6.1 开发遗产 207
7.6.2 文档化的内容 207
7.7 工具 208
7.7.1 工具类别 208
7.7.2 牵涉的机构人员 210
7.8 特殊话题 210
7.8.1 具体领域的话题 210
7.8.2 技术转变 211
7.9 面向对象开发的益处和风险 211
7.9.1 面向对象开发的益处 211
7.9.2 面向对象开发的风险 212
7.10 小结 213
7.11 进一步阅读材料 214
第三部分 应用 217
第8章 数据采集:气象监测站 217
补充材料:气象监测站需求 217
8.1 分析 218
8.1.1 确定问题的边界 218
8.1.2 场景 226
8.2 设计 232
8.2.1 体系结构框架 232
8.2.2 框架机制 234
8.3 演化 237
8.3.1 版本发布计划 237
8.3.2 传感器机制 237
8.3.3 显示机制 240
8.3.4 用户界面机制 240
8.4 维护 243
8.5 进一步阅读材料 243
第9章 框架:基础类库 244
9.1 分析 244
9.1.1 确定问题的边界 244
补充材料:基础类库需求 245
9.1.2 模式 247
9.2 设计 248
9.2.1 策略问题 248
9.2.2 宏观组织 250
9.2.3 类家族 251
9.2.4 微观组织 253
9.2.5 时间和空间的语义 255
9.2.6 存储管理 260
9.2.7 异常条件 264
9.2.8 迭代 266
9.2.9 同步 270
9.3 演化 274
9.3.1 类接口设计 274
9.3.2 支持类 275
9.3.3 工具 277
9.4 维护 280
9.5 进一步阅读材料 283
第10章 客户/服务器计算:库存清单跟踪系统 284
10.1 分析 284
10.1.1 确定问题边界 284
补充材料:库存清单跟踪系统需求 284
10.1.2 客户/服务器计算 288
10.1.3 场景 289
10.1.4 数据库模型 294
10.1.5 SQL 297
10.1.6 模式分析 299
10.2 设计 300
10.2.1 客户/服务器体系结构 300
10.2.2 事务机制 304
10.2.3 构建客户程序 306
10.3 演化 308
10.3.1 版本发布管理 308
10.3.2 应用程序生成器 308
10.4 维护 309
10.5 进一步阅读材料 309
第11章 人工智能:密码分析 310
11.1 分析 310
11.1.1 确定问题边界 310
补充材料:密码分析需求 311
11.1.2 黑板框架的体系结构 313
11.1.3 知识源分析 314
11.2 设计 315
11.2.1 黑板框架的体系结构 315
11.2.2 知识源的设计 321
11.2.3 控制器的设计 326
11.3 演化 328
11.3.1 集成黑板框架 328
11.3.2 增加新的知识源 330
11.4 维护 331
11.4.1 增加新的功能 331
11.4.2 改变需求 332
11.5 进一步阅读材料 333
第12章 命令与控制:交通管理 334
12.1 分析 334
12.1.1 确定问题边界 334
补充材料:交通管理系统需求 335
12.1.2 系统需求与软件需求 337
12.1.3 关键的抽象与机制 339
12.2 设计 340
12.2.1 信息传递 340
12.2.2 列车时刻表计划 343
12.2.3 显示 345
12.2.4 传感器数据获取 346
12.3 演化 346
12.3.1 模块结构 346
12.3.2 子系统规格说明 347
12.4 维护 349
12.4.1 增加新功能 349
12.4.2 改变目标硬件 349
12.5 进一步阅读材料 350
后记 351
附录 面向对象的编程语言 352
术语表 366
参考文献 374
分类书目 392