Jolt 大奖素有“软体业之奥斯卡”的美称,Jolt大奖精选丛书精选自Jolt 历届获奖图书,以植根于开发实践中的独到工程思想与杰出方法论为主要甄选方向。本书第1 版和第2 版分别于1991 年和1993 年荣获Jolt 震撼奖。
《面向对象分析与设计(第3版)(修订版)》是UML 创始人Grady Booch 的代表作之一。
《面向对象分析与设计(第3版)(修订版)》分为理论和套用两部分。理论部分深刻剖析了面向对象分析与设计(OOAD)的概念和方法。套用部分连续列出了5 个不同类型、不同领域的套用,描述如何从初始阶段到交付阶段,将OOAD 理论和方法套用到项目中。套用部分所涉及的领域包括系统架构、数据获取、密码分析、控制系统和Web 开发,还给出了一些关于重要问题的有效建议,包括分类、实现策略和高性价比的项目管理。《面向对象分析与设计(第3版)(修订版)》中介绍的概念都基于牢固的理论基础。同时,作者十分注重实效,基于其丰富的经验,面向软体工程实践者的实际需要,提出了改进的对象开发方法,用于解决系统和软体开发者面临的複杂问题;运用大量例子说明了基本概念,解释了方法,并展示了在不同领域的成功套用。
基本介绍
- 书名:面向对象分析与设计(第3版)(修订版)
- 作者:【美】Grady Booch(格雷迪.布奇),Robert A. Maksimchuk(罗伯特.A.马克西)等
- 译者:王海鹏 潘加宇
- ISBN:978-7-121-28666-7
- 页数:608
- 定价:109.00元
- 出版社:电子工业出版社
- 出版时间:2016年5月
- 开本:16
内容提要
Jolt 大奖素有“软体业之奥斯卡”的美称,Jolt大奖精选丛书精选自Jolt 历届获奖图书,以植根于开发实践中的独到工程思想与杰出方法论为主要甄选方向。本书第1 版和第2 版分别于1991 年和1993 年荣获Jolt 震撼奖。
《面向对象分析与设计(第3版)(修订版)》是UML 创始人Grady Booch 的代表作之一。
《面向对象分析与设计(第3版)(修订版)》分为理论和套用两部分。理论部分深刻剖析了面向对象分析与设计(OOAD)的概念和方法。套用部分连续列出了5 个不同类型、不同领域的套用,描述如何从初始阶段到交付阶段,将OOAD 理论和方法套用到项目中。套用部分所涉及的领域包括系统架构、数据获取、密码分析、控制系统和Web 开发,还给出了一些关于重要问题的有效建议,包括分类、实现策略和高性价比的项目管理。《面向对象分析与设计(第3版)(修订版)》中介绍的概念都基于牢固的理论基础。同时,作者十分注重实效,基于其丰富的经验,面向软体工程实践者的实际需要,提出了改进的对象开发方法,用于解决系统和软体开发者面临的複杂问题;运用大量例子说明了基本概念,解释了方法,并展示了在不同领域的成功套用。
《面向对象分析与设计(第3版)(修订版)》的表示法採用最新的UML 2.0,因此本书是学习UML 2.0 不可多得的参考书。本书非常适合实际系统和软体的开发者、系统分析师或架构师、项目经理阅读,也可以作为高等院校软体工程和高级编程课程的教材使用。
目录
第 1 篇 概念
第 1 章 複杂性 ....................................................................................... 2
1.1 複杂系统的结构 ....................................................................................... 3
1.1.1 个人计算机的结构 ....................................................................... 3
1.1.2 植物和动物的结构 ....................................................................... 4
1.1.3 物质的结构 ................................................................................... 5
1.1.4 社会机构的结构 ........................................................................... 5
1.2 软体固有的複杂性 ................................................................................... 6
1.2.1 定义软体複杂性 ........................................................................... 6
1.2.2 为什幺软体在本质上是複杂的 ................................................... 7
1.3 複杂系统的 5 个属性 ............................................................................. 11
1.3.1 层次结构 ..................................................................................... 11
1.3.2 相对本原 ..................................................................................... 12
1.3.3 关注点分离 ................................................................................. 12
1.3.4 共同模式 ..................................................................................... 12
1.3.5 稳定的中间形式 ......................................................................... 13
1.4 有组织和无组织的複杂性 ..................................................................... 13
1.4.1 複杂系统的规範形式 ................................................................. 13
1.4.2 人在处理複杂性时的能力局限 ................................................. 16
1.5 从混沌到有序 ......................................................................................... 17
1.5.1 分解的作用 ................................................................................. 17
1.5.2 抽象的作用 ................................................................................. 21
1.5.3 层次结构的作用 ......................................................................... 22
1.6 複杂系统的设计 ..................................................................................... 23
1.6.1 作为科学和艺术的工程 ............................................................. 23
1.6.2 设计的含义 ................................................................................. 23
1.7 小结 ......................................................................................................... 26
第 2 章 对象模型 ................................................................................. 27
2.1 对象模型的演进 ..................................................................................... 27
2.1.1 程式设计语言的换代 ................................................................. 28
2.1.2 第一代和第二代早期程式设计语言的拓扑结构 ..................... 30
2.1.3 第二代后期和第三代早期程式设计语言的结构 ..................... 31
2.1.4 第三代后期程式设计语言的结构 ............................................. 32
2.1.5 基于对象和面向对象的程式设计语言的结构 ......................... 33
2.2 对象模型基础 ......................................................................................... 35
2.2.1 面向对象编程 ............................................................................. 38
2.2.2 面向对象设计 ............................................................................. 39
2.2.3 面向对象分析 ............................................................................. 40
2.3 对象模型要素 ......................................................................................... 40
2.3.1 抽象的意义 ................................................................................. 42
2.3.2 封装的意义 ................................................................................. 48
2.3.3 模组化的意义 ............................................................................. 51
2.3.4 层次结构的意义 ......................................................................... 55
2.3.5 类型的意义 ................................................................................. 61
2.3.6 并发的意义 ................................................................................. 64
2.3.7 持久的意义 ................................................................................. 66
2.4 套用对象模型 ......................................................................................... 68
2.4.1 对象模型的好处 ......................................................................... 69
2.4.2 开放式问题 ................................................................................. 70
2.5 小结 ......................................................................................................... 70
第 3 章 类与对象 ................................................................................. 71
3.1 对象的本质 ............................................................................................. 71
3.1.1 什幺是对象,什幺不是对象 ..................................................... 72
3.1.2 状态 ............................................................................................. 74
3.1.3 行为 ............................................................................................. 77
3.1.4 标识符 ......................................................................................... 81
3.2 对象之间的关係 ..................................................................................... 83
3.2.1 连结 ............................................................................................. 84
3.2.2 聚合 ............................................................................................. 87
3.3 类的本质 ................................................................................................. 88
3.3.1 什幺是类,什幺不是类 ............................................................. 88
3.3.2 接口和实现 ................................................................................. 90
3.3.3 类的生命周期 ............................................................................. 91
3.4 类之间的关係 ......................................................................................... 92
3.4.1 关联 ............................................................................................. 92
3.4.2 继承 ............................................................................................. 94
3.4.3 聚合 ........................................................................................... 105
3.4.4 依赖关係 ................................................................................... 106
3.5 类与对象的互动 ................................................................................... 106
3.5.1 类与对象的关係 ....................................................................... 107
3.5.2 类与对象在分析和设计中的角色 ........................................... 107
3.6 创建高品质的类与对象 ....................................................................... 107
3.6.1 评判一种抽象的品质 ............................................................... 108
3.6.2 选择操作 ................................................................................... 109
3.6.3 选择关係 ................................................................................... 111
3.6.4 选择实现 ................................................................................... 113
3.7 小结 ....................................................................................................... 114
第 4 章 分类........................................................................................115
4.1 正确分类的重要性 ............................................................................... 115
4.1.1 分类的困难 ............................................................................... 116
4.1.2 分类的增量和叠代本质 ........................................................... 118
4.2 确定类和对象 ....................................................................................... 120
4.2.1 经典方法和现代方法 ............................................................... 120
4.2.2 面向对象分析 ........................................................................... 124
4.3 关键抽象与机制 ................................................................................... 132
4.3.1 确定关键抽象 ........................................................................... 132
4.3.2 识别机制 ................................................................................... 134
4.4 小结 ....................................................................................................... 137
第 2 篇 方法
第 5 章 表示法 ................................................................................... 140
5.1 统一建模语言 ....................................................................................... 140
5.1.1 简单历史回顾 ........................................................................... 141
5.1.2 模型与多重视图 ....................................................................... 141
5.1.3 图分类 ....................................................................................... 142
5.1.4 在实践中使用图 ....................................................................... 144
5.1.5 概念模型、逻辑模型和物理模型 ........................................... 145
5.1.6 工具的角色 ............................................................................... 145
5.1.7 面向对象开发的产品 ............................................................... 146
5.1.8 规模上的伸缩 ........................................................................... 147
5.1.9 UML 的语法和语义 ................................................................. 147
5.1.10 UML 2.0 信息资源 ................................................................. 148
5.2 包图 ....................................................................................................... 148
5.2.1 基本概念:包表示法 ............................................................... 149
5.2.2 基本概念:元素的可见性 ....................................................... 150
5.2.3 基本概念:依赖关係 ............................................................... 151
5.2.4 基本概念:包图 ....................................................................... 152
5.2.5 高级概念:导入和访问 ........................................................... 154
5.3 组件图 ................................................................................................... 156
5.3.1 基本概念:组件表示法 ........................................................... 157
5.3.2 基本概念:组件图 ................................................................... 158
5.3.3 基本概念:组件接口 ............................................................... 160
5.3.4 基本概念:组件实现 ............................................................... 161
5.3.5 高级概念:组件的内部结构 ................................................... 163
5.4 部署图 ................................................................................................... 164
5.4.1 基本概念:工件表示法 ........................................................... 165
5.4.2 基本概念:节点表示法 ........................................................... 165
5.4.3 基本概念:部署图 ................................................................... 166
5.5 用例图 ................................................................................................... 168
5.5.1 基本概念:执行者 ................................................................... 169
5.5.2 基本概念:用例 ....................................................................... 169
5.5.3 基本概念:用例图 ................................................................... 169
5.5.4 高级概念: ?include?和?extend?关係..................................... 172
5.5.5 高级概念:泛化 ....................................................................... 176
5.6 活动图 ................................................................................................... 177
5.6.1 基本概念:动作 ....................................................................... 178
5.6.2 基本概念:开始和停止 ........................................................... 178
5.6.3 基本概念:判断节点和合併节点 ........................................... 179
5.6.4 基本概念:分区 ....................................................................... 179
5.6.5 高级概念:分叉、结合和并发 ............................................... 180
5.6.6 高级概念:对象流 ................................................................... 182
5.6.7 高级概念:其他元素 ............................................................... 182
5.7 类图 ....................................................................................................... 182
5.7.1 基本概念:类表示法 ............................................................... 184
5.7.2 基本概念:类关係 ................................................................... 186
5.7.3 高级概念:模板(参数化)类 ............................................... 189
5.7.4 高级概念:可见性 ................................................................... 190
5.7.5 高级概念:关联端名称和限定符 ........................................... 191
5.7.6 高级概念:约束 ....................................................................... 192
5.7.7 高级概念:关联类和注解 ....................................................... 196
5.8 序列图 ................................................................................................... 197
5.8.1 基本概念:对象与互动 ........................................................... 197
5.8.2 基本概念:生命线与讯息 ....................................................... 198
5.8.3 高级概念:销毁事件 ............................................................... 199
5.8.4 高级概念:执行说明 ............................................................... 200
5.8.5 高级概念:互动使用 ............................................................... 201
5.8.6 高级概念:控制结构 ............................................................... 201
5.9 互动概述图 ........................................................................................... 204
5.9.1 基本概念:框 ........................................................................... 204
5.9.2 基本概念:控制流元素 ........................................................... 204
5.9.3 基本概念:互动图元素 ........................................................... 206
5.10 组合结构图 ......................................................................................... 206
5.10.1 基本概念:组合结构的部分 ................................................. 206
5.10.2 基本概念:组合结构的部分与接口 ..................................... 207
5.10.3 基本概念:组合结构连线器 ................................................. 208
5.10.4 高级概念:协作 ..................................................................... 208
5.11 状态机图 .............................................................................................. 209
5.11.1 基本概念:初始状态、最终状态和简单状态 ..................... 210
5.11.2 基本概念:转换与事件 ......................................................... 211
5.11.3 高级概念:状态活动——入口活动、 ................................. 213
执行活动和出口活动 ............................................................. 213
5.11.4 高级概念:控制转换 ............................................................. 213
5.11.5 高级概念:複合状态与嵌套状态 ......................................... 215
5.11.6 高级概念:并发与控制 ......................................................... 216
5.11.7 高级概念:子状态机状态 ..................................................... 221
5.11.8 高级概念:其他状态机图元素 ............................................. 222
5.12 时间图 ................................................................................................. 222
5.12.1 基本概念:更多相同之处 ..................................................... 223
5.12.2 基本概念:布局 ..................................................................... 223
5.12.3 基本概念:事件 ..................................................................... 224
5.12.4 基本概念:约束 ..................................................................... 224
5.12.5 高级概念:另一种表示形式 ................................................. 225
5.12.6 高级概念:事件与讯息 ......................................................... 226
5.13 对象图 ................................................................................................. 226
5.13.1 基本概念:对象 ..................................................................... 227
5.13.2 基本概念:对象关係 ............................................................. 228
5.13.3 高级概念:端点名称和限定符 ............................................. 229
5.14 通信图 ................................................................................................. 230
5.14.1 基本概念:对象、连结和讯息 ............................................. 230
5.14.2 基本概念:顺序表达式 ......................................................... 230
5.14.3 高级概念:讯息与同步 ......................................................... 233
5.14.4 高级概念:叠代子句和约束条件 ......................................... 233
5.15 小结 ..................................................................................................... 234
第 6 章 过程....................................................................................... 236
6.1 首要原则 ............................................................................................... 236
6.1.1 成功项目的特徵 ....................................................................... 236
6.1.2 追求理性的开发过程 ............................................................... 240
6.2 巨观过程:软体开发生命周期 ........................................................... 244
6.2.1 概述 ........................................................................................... 244
6.2.2 巨观过程的内容维:科目 ....................................................... 246
6.2.3 巨观过程的时间维:里程碑和阶段 ....................................... 249
6.2.4 巨观过程的时间维:叠代 ....................................................... 255
6.2.5 发行计画 ................................................................................... 257
6.3 微观过程:分析与设计过程 ............................................................... 260
6.3.1 概述 ........................................................................................... 260
6.3.2 抽象层次 ................................................................................... 261
6.3.3 活动 ........................................................................................... 262
6.3.4 产品 ........................................................................................... 263
6.3.5 微观过程与抽象层次 ............................................................... 267
6.3.6 识别元素 ................................................................................... 270
6.3.7 确定元素间的协作 ................................................................... 274
6.3.8 确定元素间的关係 ................................................................... 278
6.3.9 详细确定元素的语义 ............................................................... 281
6.4 小结 ....................................................................................................... 285
第 7 章 实战....................................................................................... 287
7.1 管理和计画 ........................................................................................... 288
7.1.1 风险管理 ................................................................................... 288
7.1.2 任务计画 ................................................................................... 289
7.1.3 开发複查 ................................................................................... 290
7.2 人员配备 ............................................................................................... 292
7.2.1 资源配置 ................................................................................... 292
7.2.2 开发团队角色 ........................................................................... 293
7.3 发布版本管理 ....................................................................................... 296
7.3.1 配置管理和版本控制 ............................................................... 296
7.3.2 集成 ........................................................................................... 297
7.3.3 测试 ........................................................................................... 298
7.4 复用 ....................................................................................................... 298
7.4.1 复用的元素 ............................................................................... 298
7.4.2 建立复用制度 ........................................................................... 299
7.5 质量保证和测量指标 ........................................................................... 299
7.5.1 软体质量 ................................................................................... 300
7.5.2 面向对象测量指标 ................................................................... 301
7.6 文档化 ................................................................................................... 304
7.6.1 开发遗产 ................................................................................... 304
7.6.2 文档化的内容 ........................................................................... 305
7.7 工具 ....................................................................................................... 306
7.7.1 工具种类 ................................................................................... 306
7.7.2 组织上的意义 ........................................................................... 307
7.8 特殊主题 ............................................................................................... 308
7.8.1 领域特定问题 ........................................................................... 308
7.8.2 採纳面向对象技术 ................................................................... 309
7.9 面向对象开发的好处和风险 ............................................................... 310
7.9.1 面向对象开发的好处 ............................................................... 310
7.9.2 面向对象开发的风险 ............................................................... 311
7.10 小结 ..................................................................................................... 313
第 3 篇 套用
第 8 章 系统架构——基于卫星的导航 ............................................... 316
8.1 初始 ....................................................................................................... 317
8.1.1 卫星导航系统的需求 ............................................................... 318
8.1.2 定义问题的边界 ....................................................................... 319
8.1.3 确定任务用例 ........................................................................... 322
8.1.4 确定系统用例 ........................................................................... 325
8.2 细化 ....................................................................................................... 329
8.2.1 开发一个好的架构 ................................................................... 329
8.2.2 定义架构开发活动 ................................................................... 330
8.2.3 验证所建议的系统架构 ........................................................... 331
8.2.4 分配非功能需求和确定接口 ................................................... 339
8.2.5 规定系统架构及其部署 ........................................................... 341
8.2.6 分解系统架构 ........................................................................... 344
8.3 构造 ....................................................................................................... 350
8.4 交付之后 ............................................................................................... 350
8.4.1 添加新的功能 ........................................................................... 351
8.4.2 改变目标硬体 ........................................................................... 352
第 9 章 控制系统——交通管理 .......................................................... 353
9.1 初始 ....................................................................................................... 354
9.1.1 列车交通管理系统的需求 ....................................................... 354
9.1.2 决定系统用例 ........................................................................... 357
9.2 细化 ....................................................................................................... 362
9.2.1 分析系统功能 ........................................................................... 362
9.2.2 定义 TTMS 架构 ...................................................................... 366
9.2.3 从系统工程到硬体和软体工程 ............................................... 368
9.2.4 关键抽象和机制 ....................................................................... 371
9.3 构造 ....................................................................................................... 373
9.3.1 讯息传送 ................................................................................... 374
9.3.2 列车时刻表计画 ....................................................................... 377
9.3.3 显示信息 ................................................................................... 381
9.3.4 感测器数据採集 ....................................................................... 382
9.3.5 发布版本管理 ........................................................................... 383
9.3.6 系统架构 ................................................................................... 384
9.3.7 子系统规格说明 ....................................................................... 385
9.4 交付之后 ............................................................................................... 387
第 10 章 人工智慧——密码分析 ........................................................ 389
10.1 初始 ..................................................................................................... 390
10.1.1 密码分析需求 ......................................................................... 390
10.1.2 定义问题的边界 ..................................................................... 391
10.1.3 黑板框架的架构 ..................................................................... 394
10.1.4 知识源的分析 ......................................................................... 396
10.2 细化 ..................................................................................................... 397
10.2.1 黑板对象 ................................................................................. 397
10.2.2 依赖和认定 ............................................................................. 399
10.3 构造 ..................................................................................................... 401
10.3.1 设计黑板对象 ......................................................................... 402
10.3.2 设计知识源 ............................................................................. 407
10.3.3 设计控制器 ............................................................................. 414
10.3.4 集成黑板框架 ......................................................................... 416
10.3.5 添加新的知识源 ..................................................................... 419
10.4 交付之后 ............................................................................................. 421
10.4.1 系统增强 ................................................................................. 421
10.4.2 改变需求 ................................................................................. 423
第 11 章 数据採集——气象监测站 .................................................... 424
11.1 初始 ...................................................................................................... 424
11.1.1 气象监测站需求 ..................................................................... 425
11.1.2 定义问题的边界 ..................................................................... 425
11.1.3 场景 ......................................................................................... 437
11.2 细化 ...................................................................................................... 438
11.2.1 气象监测系统用例 ................................................................. 438
11.2.2 架构框架 ................................................................................. 448
11.3 构造 ...................................................................................................... 450
11.3.1 帧机制 ..................................................................................... 450
11.3.2 发布计画 ................................................................................. 454
11.3.3 感测器机制 ............................................................................. 455
11.3.4 显示机制 ................................................................................. 457
11.3.5 用户界面机制 ......................................................................... 458
11.4 交付之后 .............................................................................................. 461
第 12 章 Web 套用——休假跟蹤系统 ............................................... 463
12.1 初始 ..................................................................................................... 464
12.1.1 需求 ......................................................................................... 464
12.1.2 用例模型 ................................................................................. 466
12.2 细化 ..................................................................................................... 467
12.2.1 部署视图 ................................................................................. 468
12.2.2 逻辑视图 ................................................................................. 470
12.2.3 进程视图 ................................................................................. 472
12.2.4 实现视图 ................................................................................. 475
12.2.5 用例视图 ................................................................................. 475
12.3 构造 ..................................................................................................... 480
12.3.1 用户体验模型 ......................................................................... 480
12.3.2 分析和设计模型 ..................................................................... 482
12.3.3 实体 ......................................................................................... 493
12.3.4 控制器 ..................................................................................... 502
12.3.5 Web 页面和用户界面 ............................................................. 503
12.4 交付和交付之后 ................................................................................. 508
附录 A 面向对象程式语言 ................................................................. 510
附录 B 进一步阅读 ............................................................................ 530
注解 ..................................................................................................... 539
术语表 .................................................................................................. 566
精彩节摘
出版说明
经久不息的迴蕩
今时的读书人,不复有无书可读之苦,却时有品种繁多而无从择优之惑,甚而专业度颇高的技术书领域,亦日趋遭逢乱花迷眼的境地。此时,若得觅权威书评,抑或有公信力的排行榜,可按图索骥,大大增加选中好书的命中率。然而,如此良助,不可多得,纵观中外也唯见一枝独秀——素有“软体业奥斯卡”之美誉的 Jolt 奖!
震撼世界者为谁
在计算设备已经成为企业生产和日常生活之必备工具的今天, 专业和大众用户对于软体的功能、 性能和用户体验的要求都在不断提高。 在这样的背景下,如何能够发挥出软体开发的最高效率和最大效能, 已经是摆在每一个从业者面前的重大课题,而这也正是 Jolt 大奖横空出世的初衷及坚持数年的宗旨。
Jolt 大奖历时 20 余年, 在图书及软体业知名度极高, 广受推崇。 奖如其名,为引领计算机科学与工程发展主流, Jolt 坚持将每年的奖项只颁给那些给整个IT 业界带来震撼结果的图书、工具、产品及理念等,因一流的眼光及超高的专业度而得以闻名遐迩,声名远播。
除图书外, Jolt 针对软体产品设有诸多奖项分类,如配置管理、协作工具、资料库引擎/资料库工具、设计工具/建模、开发环境、企业工具、库/框架、移动开发工具等。但图书历来是 Jolt大奖中最受瞩目且传播最广的一个奖项分支。Jolt 曾设有通用类图书、技术类图书等分类,每个分类又设有“卓越奖”( JoltAward,一般为一个)和“生产力奖”( Productivity Award,一般为 2 或 3 个)。获奖技术图书一经公布,即打上经典烙印,可谓一举“震撼全世界”(赞助商Jolt 可乐的广告词)。
作为计算机技术图书的后进,我们总在追问——是谁在震撼世界,是谁在照亮明天? Jolt 大奖恰似摆在眼前的橱窗, 让我们可以近距离观看潮流在舞蹈,倾听震撼在轰鸣!
朝花夕拾为哪般
Jolt 像是一年一度的承诺,在茫茫书海中为我们淘砺出一批批经得起岁月沖刷的杰作, 头顶桂冠的佳作也因而得以一批批引进中国, 为国人开阔了眼界,滋补了技术养分。然而,或因技术差距造就的生不逢时、水土不服,或因翻译、製作的不如人意,抑或是疏于宣传等诸多原因,这些经典着作在国内出版后,儘管不乏如获至宝的拥趸,却仍不为诸多人所知,从而与大量本应从中获益的读者擦肩而过。既然这生生错失的遗憾本不该发生,则更不应延续。为此,我们邀国外出版同行、国内技术专家一道,踏上朝花夕拾之路,竭力为广大读者筛选出历久弥新、震撼依旧的 Jolt 图书精品。
Jolt 获奖图书皆由业界专家一致评出,并得到软体从业人员的高度认可,虽然这些书今天读来, 不再能看到 20 世纪史诗时代那般日新月异的理论突破,以及依赖于高深繁複的科学研究所取得的系统化成果, 更多是在日复一日的开发实践中总结和提炼出来的工程思想和方法论。重新选材之所以有所弃取,从Jolt 多年来的评奖规律中可窥端倪——一万小时真理见凡是在工程思想领域取得革命性、颠覆性突破的图书,就被归于“震撼”获奖分类。比如,从基于过程的程式设计模型过渡到面向对象的全新模型,就是软体开发思想上的一次带来巨大震撼的革命;再比如,打破传统的瀑布模型而转向持续集成的软体交付模型,这也是一场业界的重大思想转变。像这样的重大思想突破,可以说是数年甚至数十年一遇的,而荣获 Jolt 大奖的图书中更为常见的,则是基于最佳实践的“生产效率”获奖者。获得此类殊荣的图书,都是作者们从平凡的、重複的,甚至用一般人的眼光看来不怎幺起眼的日常开发实践中,以独具的慧眼、过人的耐心和大胆的创新,闯开一条不平常道路的心血与经验总结。
这些图书所涉及的主题,都是普通的软体开发人员每天要面对的工作——代码阅读、 撰写测试用例、 修复软体问题……但就是这样貌似平淡无奇的工作,是否能每一天、每一个项目都做好,着实拉开了软体开发人员素质的差距,也决定了软体企业开发出来的产品和服务的质量。我们中国有一句古话,叫作熟能生巧;某位着名企业家也说过一句家喻户晓的名言:“把简单的事千百万次地做好,就是不简单的。”这些朴素而实际的真理,同样也是本套丛书最能彰显的所谓程式设计师精神。它建立在脚踏实地的实践基础之上,也充满了对于自由和创新的嚮往。
名作可堪比名曲
就不因岁月流逝而褪色来说,与这些 Jolt 名作相媲美者,只有那些百年响彻、震撼古今的经典名曲。希望本丛书带给大家的每部着作,也如百听不厌的乐曲,掩卷良久方余音绕樑,真知存心。仔细想来,软体开发与古典音乐岂非有异曲同工之妙?既是人类心智索问精确科学的探究, 亦是寻觅美学享受的追求。工程是艺术的根基,而艺术是工程的极致。衷心地希望各位读者能够认真阅读本丛书的本本珍品,并切实地用于自 己的日常工作中,在充分享受大师魅力的同时,为中国的软体事业谱写更多、更震撼的乐章。
谨以本书献给 Jan:
我的朋友,我的爱人,我的妻子。
——Grady
重看面向对象
软体的本质是什幺?从不同的角度来看,会有不同的答案。有人认为是程式加文档, 有人认为是人机互动,有人认为是增删改查, 有人认为是抽象模型,而我认为是算法。
计算机科学的基石是图灵机抽象:一个输入集合,一个输出集合,一个内部状态集合,一个计算规则集合。这个抽象十分强大,我们甚至可以认为一头奶牛也是一个图灵机:吃的是草,挤的是奶。
一个表达式也是一个图灵机,其中的运算元是输入,求值的结果是输出。一个函式也是图灵机,参数是输出,返回值是输出。编程或设计软体就是在通用图灵机的基础上,设计一个具体的图灵机。我们设计软体接受怎样的输入,设计软体内部的状态,设计表示计算规则的代码,设计软体的输出。
近年来逐渐流行的函式式编程,就是建立在这个抽象的基础上。而且函式式编程的思想由来已久,可以追溯到最古老的高级语言之一: Lisp。这种思想非常简单:给定一个输入集合,经过函式的处理,给出一个输出集合。由此也导出了 Map-Reduce 等流行的架构设计模式: 一个计算集群仍然是一个图灵机。纯粹的函式有一点不足, 它没有内部状态。 可以说, 它是简化了的图灵机。但在有些时候,我们确实需要内部状态。根据内部状态的不同,对于同样的输入,可能给出不一样的输出。于是便有了闭包的概念,它是一个函式加上相关的上下文环境状态。这样,我们可以毫无困难地构建任何具体的图灵机(好吧,正确实现一个算法还是比较困难的)。
闭包可以看成是拥有内部状态的函式,这就相当于一个简单的对象,它只有一个方法。反过来,对象可以看成是几个闭包,它们共享了内部状态。所以有人说:闭包是懒人的对象,对象是懒人的闭包。因此,函式式编程和面向对象思想,在底层基础上是一致的。
面向对象思想的历史和函式式一样久远。实际上,它们都是我们在设计算法时的一种抽象。只有利用抽象概念,才能实现人与人之间的沟通。“你想吃苹果吗?”这里的“苹果”就是一个抽象概念,它隐藏了苹果实现的许多细节。人的大脑喜欢工作在一组抽象概念上。名词是结构或存在的抽象,动词是行为或过程的抽象。
我们在设计算法时,既需要函式抽象,也需要对象抽象。今天,面向对象和函式式编程的思想在各种程式语言中融合,可以说是殊途同归。
抽象是强大的工具,但用得不好,也会产生不良的后果。最重要的问题,就是创建太多不必要的抽象。毕竟,抽象只是我们脑中的概念,我们可以创造出任何概念。比如上帝和各种鬼神,直到科学家说,在科学的系统里不需要假设存在一个上帝。面向对象在这方面遇到的问题比较多。举例来说,一个 Java的 Hello world 程式,就要涉及好几个概念,直接导致程式的代码比较长。而在函式式编程中, 这通常只是一次函式调用。又比如, 在一个使用 Struts、 Spring、Hibernate 构建的 Java Web 应用程式中,处理一个 Get 请求的调用栈,可能是长长的一串。数据在不同的概念抽象之间反覆倒手,白白浪费了计算资源。
任何两种观点都是互补的。 面向对象思想在过去的软体开发中取得了辉煌的成绩。函式式编程让我们能从另一个角度审视面向对象,更进一步体会面向对象抽象的强大,也发现面向对象中一些误用的地方。如无必要,勿增实体。也许我们不需要假设以太的存在,就能解释光在真空中的传播。
多年后重读这本书, 促使我重新思考, 需要利用哪些抽象来设计我的算法。
这些年来,这本书让我受益良多,再次向大家郑重推荐。
王海鹏
2016 年 1 月 5 日
作者简介
Grady Booch在软体架构、软体工程和建模领域的创新工作是世界知名的。从1981年Rational公司创建开始,他就一直担任该公司的首席科学家。Grady于2003年3月成为了IBM院士(IBM Fellow)。
Grady是统一建模语言(UML)最早的开发者之一,也是几个Rational产品的最早开发者之一。Grady曾担任世界各地一些複杂的软体密集型项目的架构师和架构指导者。
Grady是6本畅销书的作者,包括UML Users Guide和Object-Oriented Analysis with Applications。Grady发表了几百篇有关软体工程的技术文章,其中包括在20世纪80年代早期发表的文章,这些文章最先提出了面向对象设计的术语和实践。他曾在世界各地演讲和谘询。
Grady是美国计算机协会(ACM)、美国电气电子工程师学会(IEEE)、美国科学促进会(AAAS)、有社会责任的计算机专家协会(CPSR)的成员。他是IBM院士、ACM院士、世界技术网路院士,也是软体开发论坛梦想家。Grady是敏捷联盟、Hillside集团和软体架构师世界学院的创始委员会成员,也是Northface大学的顾问委员会成员。
Grady于1977年从美国空军学院获得学士学位,于1979年从加州大学圣巴巴拉分校获得电子工程科学硕士学位。
Grady与他的妻子和他的猫生活在科罗拉多。他的兴趣包括阅读、旅行、唱歌和弹奏竖琴。
Robert A. Maksimchuk是Unisys Chief Technology Office的一名研究主管。他关注新出现的建模技术,目的是提升Unisys 3D可视企业建模框架的战略方向。Bob为这项任务带来了不同行业的大量系统工程、建模、面向对象分析与设计的专业知识。他是UML for Mere Mortals和UML for Database Design的合着者,也写了许多文章。他曾经週游世界各地,在各种技术论坛上作为重要演讲者发言,举办关于UML和面向对象开发的研讨会和培训。Bob是电气电子工程师学会(IEEE)和国际系统工程学会(INCOSE)的成员。
Michael W. Engle是洛克希德马丁公司的首席工程师。他有超过26年的技术和管理经验——从项目启动到运营支持,涵盖了完整的系统开发生命周期。利用系统工程师、软体工程师和系统架构师的背景,Mike运用了面向对象技术,为複杂的系统开发提供创新的开发方式。
Bobbi J. Young,Ph.D.,是Unisys Chief Technology Office的一名研究主管。她有着多年的IT行业从业经验,与商业公司和国防部契约供应商一同工作。Young博士是一名谘询师,她在项目管理、企业架构、系统工程和面向对象分析与设计方面提供现场指导。在她的职业生涯中,她关注于系统生命周期过程和方法学,同时也关注企业架构。Young博士拥有生物学、计算机科学和人工智慧学位,她获得了管理信息系统的博士学位,也曾是美国海军预备役的一名指挥官(已退伍)。
Jim Conallen是IBM Rational的模型驱动开发战略小组的一名软体工程师。在这个小组中,他积极参与,将对象管理集团(OMG)的模型驱动架构(MDA)计画套用于IBM Rational的模型工具中。Jim在基于资产的开发和可复用资产规範(RAS)领域也很活跃。Jim经常在会议上演讲,也经常写文章。他的专业领域是Web套用开发。
他开发了UML的Web套用扩展(WAE)。这是对UML的一种扩展,让开发者能够利用UML在合适的抽象和细节层面上对Web套用的架构进行建模。这项工作是IBM Rational Rose和Rational XDE Web Modeling功能的基础。
Jim与人合着了两个版本的Building Web Applications with UML,第一个版本採用微软公司的ASP技术,后一个版本採用J2EE技术。
Jim的经验也来自于加入Rational之前的工作,那时他曾是独立的谘询师、Peace Corps的志愿者和大学讲师。他还是3个孩子的父亲。Jim从Widener大学获得了计算机和软体工程的学士学位和硕士学位。
Kelli Houston是IBM Rational的IT谘询专家。她是IBM内部方法的方法架构师,负责编写方法并集成IBM的方法。除了方法架构师的角色,Kelli还在IBM内部领导Rational Method Composer(RMC)特别兴趣小组(SIG)工作,为客户和IBM内部谘询师提供有效使用RMC方面的谘询和现场指导服务。
前言
人类渴望得到精神上的宁静、美学上的成就、家庭的安全、正义和自由。
这一切都不能通过工业化的生产效率来直接满足。但是,生产效率让人们得到充足的物质享受,而不至于与匮乏苦苦斗争。这为精神、美学和家庭事务赢得了时间,也使得社会能够将一些特殊的技能赋予司法机构以及维护权利的机构。
Harlan Mills
DPMA and Human Productivity
作为计算机专业人员,我们努力地去构建能工作而且有用的系统;作为软体工程师, 我们面临着在计算资源和人力资源有限的条件下创建複杂系统的任务。面向对象( OO)技术已经发展为管理许多不同种类的系统中内在複杂性的手段。对象模型已被证明是非常有力和统一的概念。
对第 2 版的改动
在本书第 2 版出版以后,我们看到了一些重要的技术进步,其中一些突出的进步如下。
与网际网路的高频宽、无线连线已经非常普遍;
纳米技术已经出现,并开始提供有价值的产品;
机器人在火星表面漫步;
计算机生成的特效使得在电影中能够完全逼真地再现任何想像中的世界;
出现了个人气垫船;
手机已无处不在,使用非常方便;
获得了人类基因图谱;
面向对象技术已经在工业软体开发中成为主流技术。
在世界各地都能见到面向对象技术被使用。但是,我们仍然遇到许多人,他们还没有採用面向对象的开发方式。对于这两类人,本书的新版本都很有价值。
对于面向对象分析与设计( OOAD)的新手,本书提供了下列信息。
面向对象的概念支持和演进式的观点;
如何在系统开发生命周期中套用 OOAD 的例子;
对系统和软体开发中使用的标準表示法统一建模语言(UML 2.0)的介绍。
对于有经验的 OOAD 实践者,本书从不同的角度提供了价值。
即使对于有经验的实践者, UML 2.0 也是新的。这是可以看到的表示法方面的重要区别。
根据前一版本所收到的反馈,更加关注建模。
通过本书的概念部分的学习,可以了解在面向对象的世界中,“为什幺事情总是像它们现在的样子”。许多人可能从没研究过面向对象( OO)概念本身的发展,即使有所了解,在初次学习 OO 方法时,也许未能理解其重要性。
本书这一版和以前的版本相比有四项主要区别,如下所示。
1. UML 2.0 已经正式得到了通过,第 5 章将介绍 UML 2.0。为了加强读者对这种表示法的理解,特别区分了它的基本元素和高级元素。
2.这一版在应用程式的章节中引入了一些新的领域和背景。例如,应用程式的领域範围很广,包括从高级系统架构到基于 Web 的系统的设计细节等各种不同层次的抽象。
3.在前一版出版时,作为 OO 编程的概念来说, C++相对还是比较新的。
读者告诉我们,这种强调不再是主要的考虑。现在有大量的 OO 编程和技术书籍及培训,还有许多为 OO 开发而设计的程式语言。因此,大部分关于编码的讨论被删除了。
4.最后,回响读者的要求,这一版更关注 OOAD 建模方面。应用程式章
节将展示如何利用 UML,其中每一章强调了整个开发生命周期中的一个阶段。
本书的目标
本书在面向对象系统构建方面提供了实用指导。它的具体目标如下。
提供对对象模型的基础概念及其发展变化的正确理解;
帮助读者掌握面向对象分析和设计的表示法和过程;
介绍在不同的问题域中面向对象分析和设计的实际套用。
本书介绍的概念都基于牢固的理论基础,但本书首先是一本注重实效的书,面向架构师和软体开发者等软体工程实践者的实际需要。
读者对象
本书既是为计算机专业人员也是为学生编写的。
对于实际系统和软体的开发者,本书将展示如何高效地利用面向对象技术来解决实际问题。
对于系统分析师或架构师,本书将利用面向对象的分析与设计,提供一条从需求到实现的途径。 我们帮助分析人员或架构师提高识别能力,以区分不好的面向对象的结构与好的面向对象的结构,并在现实情况反常时权衡可选的设计方案。也许最重要的就是,我们提供了一些让複杂系统变得有条理的新方法。
对于项目经理,本书可以帮助他们更好地理解开发团队的资源分配、软体品质、测量指标以及管理与複杂软体系统相关的风险。
对于学生,本书提供了一些必要的指导,使得学生能够开始掌握複杂系统开发的科学与艺术中的一些重要技巧。
本书不仅适合专业研讨班和个人学习使用, 也适合作为高等院校本科生和研究生课程的教材。因为它主要阐述了软体开发的方法,所以非常适合软体工程和高级编程等课程, 也可以作为涉及具体面向对象程式语言的课程的补充阅读材料。
本书的组织结构
本书分成 3 篇:概念、方法和套用,其中穿插了大量的补充材料。
概念
第 1 篇研究软体的内在複杂性及其表现方式。 本书将对象模型作为一种手段来帮助我们管理这种複杂性,详细地研究了对象模型的基本元素——抽象、封装、模组化、层次结构,讨论了“什幺是类?”以及“什幺是对象?”等基本问题。由于确定有意义的类和对象是面向对象开发中的关键任务,因此我们花了相当多的时间来研究分类的本质。具体来说,我们研究了生物学、语言学和心理学等其他学科中的分类方法, 然后将这些经验套用到发现软体系统中类和对象的问题上。
方法
第 2 篇基于对象模型提出了複杂系统开发的一种方法。 针对面向对象的分
析与设计,首先提出了一套图形表示法(即 UML),然后是一个通用的过程框架。还研究了面向对象开发的实践,具体来说,就是它在软体开发生命周期中的位置以及它对于项目管理意味着什幺。
应用程式
第 3 篇提供了一组( 5 个)不简单的例子,涉及不同问题域:系统架构、控制系统、密码分析、数据获取和 Web 开发。之所以选择这些问题域,是因为它们是软体工程师实践过程中遇到的複杂问题的代表。 展示某些原则如何套用于简单的问题是很容易的, 但是因为我们关注的是为现实世界构建有用的系统,所以我们对如何将对象模型套用于複杂应用程式更加感兴趣。软体系统的开发不同于按菜谱做菜,因此我们强调应用程式的增量式开发,这种开发以一些正确的原则和良好的模型作为指导。
补充材料
本书中穿插了大量的补充材料。多数章节中都有补充材料,这些材料对重要的主题提供了相关的信息。本书包括了一个关于面向对象程式语言的附录,其中总结了一些常见语言的特徵,还提供了常用术语的辞彙表,以及一个扩展的分类参考书目,列出了关于对象模型的参考资料。
工具说明
读者总是会问创建本书中的图使用了什幺工具。 我们主要使用两个很好的工具来画图: IBM Rational Software Architect 和 Sparx Systems Enterprise Architect。为什幺不只用一个?市场的实际情况是,没有哪一种工具可以做所有的事情。实践 OOAD 的时间越长,最后就会发现有些特别的情况是所有工具都不支持的。(在这种情况下,可能需要寻求基本的绘图工具来展示你的想法。)但是,不要让这些很少的情况阻止你使用健壮的 OOAD 工具,如我们提到的这两种工具。
本书的阅读方法
对于本书可以一页一页地读,也可以不按现有的组织形式阅读。如果想对对象模型中的基本概念或面向对象开发的动机有较深的理解, 那幺就应该从第1 章开始依次读下去。如果只对面向对象开发分析与设计中的表示法和过程感兴趣,就从第 5 章和第 6 章开始阅读。第 7 章对使用这种方法管理项目的管理者来说特别有用。如果对针对特定问题域的面向对象技术的应用程式更感兴趣,则可以在第 8~12 章中任选一章或者全部阅读。