具体描述
由Michael Blaha等编著的《UML面向对象建模与设计(第2版)》是“面
向对象建模与设计”领域的经典著作。全书由四个部分组成。第一部分以一
种高层的、独立于语言的方式描述面向对象的概念,以及UML表示法;第二
部分从问题陈述到分析、系统设计和类设计,一步一步地描述了软件开发的
面向对象方法学;第三部分用面向对象语言和关系数据库描述了面向对象设
计的实现;第四部分描述了成功的面向对象开发所需要的软件工程实践。本
书还配有丰富的习题,覆盖了一系列应用领域以及实现目标,而且在书的后
面给出了部分习题的答案。
《UML面向对象建模与设计(第2版)》可以作为高年级本科生或研究生软
件工程或面向对象技术课程的教材,也可以供相关技术人员参考。
作者简介
布莱哈,加拿大温哥华ModelsofI咨询公司以及美国芝加哥Setltie ritPoim公司的合伙人。他是lEEE计算机学会的活跃人物,研究兴趣包括面向对象技术、建模、系统架构、数据库设计、企业集成和逆向工程。
朗博,Rationa忪司(2003年并入IBM公司)工作。他是UML三位首创者之一,撰写的有关面向对象的书籍和文章在计算机业界影响深远。他已于2006年退休。
目录信息
1.1 什么是面向对象 1
1.2 什么是OO开发 3
1.2.1 对概念而非实现建模 3
1.2.2 OO方法论 3
1.2.3 三种模型 4
1.3 OO主题 5
1.3.1 抽象 5
1.3.2 封装 5
1.3.3 组合数据和行为 5
1.3.4 共享 6
1.3.5 强调对象的本质 6
1.3.6 协同 6
1.4 关于OO开发有效性的证据 7
1.5 OO建模历史 7
1.6 本书的组织结构 8
参考文献注释 8
参考文献 9
习题 9
第一部分 建模的概念
第2章 建模是一种设计技术 12
2.1 建模 12
2.2 抽象 12
2.3 三种模型 13
2.3.1 类模型 13
2.3.2 状态模型 13
2.3.3 交互模型 14
2.3.4 模型间的关系 14
2.4 小结 14
参考文献注释 14
习题 15
第3章 类建模 17
3.1 对象和类的概念 17
3.1.1 对象 17
3.1.2 类 17
3.1.3 类图 18
3.1.4 值和属性 19
3.1.5 操作和方法 20
3.1.6 类表示法小结 21
3.2 链接和关联的概念 21
3.2.1 链接和关联 21
3.2.2 多重性 23
3.2.3 关联端名 24
3.2.4 排序 26
3.2.5 包和序列 26
3.2.6 关联类 26
3.2.7 限定关联 28
3.3 泛化和继承 29
3.3.1 定义 29
3.3.2 泛化的用途 31
3.3.3 覆写特征 31
3.4 类模型的一个示例 32
3.5 类模型导航 34
3.5.1 遍历类模型的OCL构件 35
3.5.2 构建OCL表达式 35
3.5.3 OCL表达式的示例 36
3.6 实践技巧 37
3.7 小结 38
参考文献注释 39
参考文献 40
习题 40
第4章 高级类建模 47
4.1 高级对象和类的概念 47
4.1.1 枚举 47
4.1.2 多重性 48
4.1.3 作用域 48
4.1.4 可见性 49
4.2 关联端 49
4.3 n元关联 50
4.4 聚合 51
4.4.1 聚合与关联 52
4.4.2 聚合与组合 53
4.4.3 操作的传播 53
4.5 抽象类 54
4.6 多重继承 55
4.6.1 多重继承的种类 55
4.6.2 多重分类 56
4.6.3 应对方案 57
4.7 元数据 58
4.8 具体化 59
4.9 约束 59
4.9.1 对象上的约束 60
4.9.2 泛化集上的约束 60
4.9.3 链接上的约束 60
4.9.4 使用约束 61
4.10 派生数据 61
4.11 包 62
4.12 实践技巧 62
4.13 小结 63
参考文献注释 64
参考文献 64
习题 65
第5章 状态建模 69
5.1 事件 69
5.1.1 信号事件 69
5.1.2 变更事件 70
5.1.3 时间事件 70
5.2 状态 71
5.3 迁移和状态 72
5.4 状态图 73
5.4.1 状态图示例 73
5.4.2 单触发状态图 74
5.4.3 状态图的基本表示法小结 75
5.5 状态图行为 76
5.5.1 活动效应 76
5.5.2 do活动 76
5.5.3 进入和退出活动 77
5.5.4 完成迁移 78
5.5.5 发送信号 78
5.5.6 带有活动的状态图示例 78
5.6 实践技巧 79
5.7 小结 80
参考文献注释 80
参考文献 81
习题 81
第6章 高级状态建模 85
6.1 嵌套状态图 85
6.1.1 平面状态图的问题 85
6.1.2 扩展状态 85
6.2 嵌套状态 86
6.3 信号泛化 88
6.4 并发 89
6.4.1 聚合并发 89
6.4.2 对象内的并发 90
6.4.3 并发活动的同步 90
6.5 状态模型示例 91
6.6 类状态模型的关系 95
6.7 实践技巧 96
6.8 小结 97
参考文献注释 97
参考文献 98
习题 98
第7章 交互建模 102
7.1 用例模型 102
7.1.1 参与者 102
7.1.2 用例 103
7.1.3 用例图 104
7.1.4 用例模型的准则 105
7.2 顺序模型 106
7.2.1 场景 106
7.2.2 顺序图 106
7.2.3 顺序模型的准则 108
7.3 活动模型 109
7.3.1 活动 110
7.3.2 分支 110
7.3.3 初始和终止 111
7.3.4 并发活动 111
7.3.5 可执行活动图 111
7.3.6 活动模型的准则 111
7.4 小结 112
参考文献注释 112
参考文献 112
习题 113
第8章高级交互建模 115
8.1 用例关系 115
8.1.1 包含关系 115
8.1.2 扩展关系 115
8.1.3 泛化 116
8.1.4 用例关系的组合 117
8.1.5 用例关系的准则 118
8.2 过程式顺序模型 118
8.2.1 带有被动对象的顺序图 118
8.2.2 带有临时对象的顺序图 119
8.2.3 过程化顺序模型的准则 120
8.3 活动模型的特殊结构 120
8.3.1 发送和接收信号 120
8.3.2 泳道 121
8.3.3 对象流 122
8.4 小结 122
参考文献 123
习题 123
第9章 概念小结 126
9.1 类模型 126
9.2 状态模型 126
9.3 交互模型 126
9.4 模型之间的关系 127
9.4.1 泛化 127
9.4.2 聚合 128
第二部分 分析和设计
第10章 过程概述 130
10.1 开发阶段 130
10.1.1 系统构思 130
10.1.2 分析 131
10.1.3 系统设计 131
10.1.4 类设计 132
10.1.5 实现 132
10.1.6 测试 132
10.1.7 培训 132
10.1.8 部署 132
10.1.9 维护 132
10.2 开发生命周期 133
10.2.1 瀑布式开发 133
10.2.2 迭代开发 133
10.3 小结 133
参考文献注释 134
习题 134
第11章 系统构思 135
11.1 形成系统概念 135
11.2 阐释概念 135
11.3 准备问题陈述 137
11.4 小结 139
习题 139
第12章 领域分析 141
12.1 分析概述 141
12.2 领域类模型 142
12.2.1 寻找类 143
12.2.2 保留正确的类 144
12.2.3 准备数据词典 145
12.2.4 寻找关联 145
12.2.5 保留正确的关联 146
12.2.6 寻找属性 150
12.2.7 保留正确的属性 150
12.2.8 使用继承来细化 151
12.2.9 测试访问路径 153
12.2.10 迭代类模型 154
12.2.11 变换抽象的层次 155
12.2.12 把类分组打包 156
12.3 领域状态模型 157
12.3.1 确定具有状态的类 157
12.3.2 寻找状态 158
12.3.3 寻找事件 158
12.3.4 构建状态图 158
12.3.5 评价状态图 159
12.4 领域交互模型 159
12.5 将分析迭代 159
12.5.1 细化分析模型 160
12.5.2 重述需求 160
12.5.3 分析和设计 161
12.6 小结 161
参考文献注释 161
参考文献 162
习题 162
第13章 应用分析 169
13.1 应用程序交互模型 169
13.1.1 确定系统边界 169
13.1.2 寻找参与者 170
13.1.3 寻找用例 170
13.1.4 寻找初始和终止事件 171
13.1.5 准备普通场景 171
13.1.6 增加变化和异常场景 172
13.1.7 寻找外部事件 172
13.1.8 编制复杂用例的活动图 175
13.1.9 组织参与者和用例 175
13.1.10 检查领域类模型 175
13.2 应用类模型 176
13.2.1 确定用户界面 176
13.2.2 定义边界类 177
13.2.3 确定控制器 177
13.2.4 检查交互模型 178
13.3 应用状态模型 178
13.3.1 使用状态来确定应用类 179
13.3.2 寻找事件 179
13.3.3 构建状态图 179
13.3.4 检查其他状态图 181
13.3.5 检查类模型 182
13.3.6 检查交互模型 182
13.4 增加操作 183
13.4.1 来自类模型的操作 183
13.4.2 来自用例的操作 183
13.4.3 购物清单操作 183
13.4.4 简化操作 183
13.5 小 结 184
参考文献注释 185
参考文献 185
习题 185
第14章 系统设计 188
14.1 系统设计概述 188
14.2 估算性能 189
14.3 制订复用计划 189
14.3.1 库 189
14.3.2 框架 190
14.3.3 模式 190
14.4 将系统拆分成子系统 191
14.4.1 分层 192
14.4.2 分区 192
14.4.3 组合分层和分区 192
14.5 确定并发性 193
14.5.1 识别内部的并发性 193
14.5.2 定义并发任务 194
14.6分 配子系统 194
14.6.1 估算硬件资源需求 194
14.6.2 权衡硬件和软件 195
14.6.3 给处理器分配任务 195
14.6.4 确定物理连通性 196
14.7 管理数据存储 196
14.8 处理全局资源 197
14.9 选择软件控制策略 198
14.9.1 过程驱动型控制 198
14.9.2 事件驱动型控制 199
14.9.3 并发控制 199
14.9.4 内部控制 199
14.9.5 其他范型 199
14.10 处理边界条件 200
14.11 设定权衡优先级 200
14.12 常见的架构风格 201
14.12.1 批处理转换 201
14.12.2 连续型转换 202
14.12.3 交互式界面 203
14.12.4 动态仿真 203
14.12.5 实时系统 204
14.12.6 事务管理器 204
14.13 ATM系统的架构 204
14.14 小结 205
参考文献注释 206
参考文献 207
习题 207
第15章 类设计 212
15.1 类设计概述 212
15.2 填补空白区 213
15.3 实现用例 214
15.4 设计算法 215
15.4.1 选择算法 215
15.4.2 选择数据结构 216
15.4.3 定义内部类和操作 217
15.4.4 把操作分配给类 217
15.5 向下递归 219
15.5.1 功能分层 219
15.5.2 机制分层 219
15.6 重构 220
15.7 设计优化 220
15.7.1 为了高效访问而增加冗余的关联 221
15.7.2 为了效率而重新调整执行顺序 222
15.7.3 将派生值保存下来以避免重新计算 222
15.8 行为具体化 223
15.9 调整继承 224
15.9.1 重新调整类和操作 224
15.9.2 提取公共行为 224
15.9.3 使用委托来共享行为 225
15.10 组织类设计 227
15.10.1 信息隐藏 227
15.10.2 实体的内聚性 227
15.10.3 微调包 228
15.11 ATM示例 228
15.12 小结 229
参考文献注释 230
参考文献 230
习题 231
第16章 过程小结 235
16.1 系统构思 235
16.2 分析 236
16.2.1 领域分析 236
16.2.2 应用分析 236
16.3 设计 236
16.3.1 系统设计 236
16.3.2 类设计 236
第三部 分实现
第17章 实现建模 238
17.1 实现概述 238
17.2 微调类 238
17.3 微调泛化 240
17.4 实现关联 241
17.4.1 分析关联遍历 241
17.4.2 单向关联 242
17.4.3 双向关联 242
17.4.4 高级关联 243
17.4.5 ATM示例 243
17.5 测试 244
17.5.1 单元测试 244
17.5.2 系统测试 244
17.6 小结 245
参考文献注释 245
参考文献 245
习题 246
第18章 OO语言 247
18.1 简介 247
18.1.1 C++简介 247
18.1.2 Java简介 248
18.1.3 比较C++和Java 249
18.2 简化的ATM模型 250
18.3 实现结构 250
18.3.1 数据类型 251
18.3.2 类 253
18.3.3 访问控制 253
18.3.4 泛化 255
18.3.5 关联 258
18.4 实现功能 260
18.4.1 创建对象 261
18.4.2 对象的生存期 263
18.4.3 对象销毁 264
18.4.4 链接创建 265
18.4.5 链接销毁 267
18.4.6 派生属性 267
18.5 实践技巧 268
18.6 小结 269
参考文献注释 270
参考文献 270
习题 270
第19章 数据库 274
19.1 简介 274
19.1.1 数据库的概念 274
19.1.2 关系数据库的概念 275
19.1.3 范式 276
19.1.4 选择DBMS产品 276
19.2 简化的ATM模型 277
19.3 实现结构——基础 277
19.3.1 类 277
19.3.2 关联 278
19.3.3 泛化 280
19.3.4 标识 281
19.3.5 RDBMS实现的基本规则小结 282
19.4 实现结构——高级 283
19.4.1 外键 283
19.4.2 检查约束 284
19.4.3 索引 284
19.4.4 视图 284
19.4.5 小结RDBMS实现的高级规则 285
19.5 为ATM示例实现结构 285
19.6 实现功能 288
19.6.1 将程序设计语言耦合到数据库中 288
19.6.2 数据转换 290
19.6.3 封装与查询优化 290
19.6.4 使用SQL代码 291
19.7 面向对象数据库 291
19.8 实践技巧 292
19.9 小结 293
参考文献注释 293
参考文献 293
习题 294
第20章 程序设计风格 298
20.1 面向对象的风格 298
20.2 可复用性 298
20.2.1 可复用性的类别 298
20.2.2 可复用性的风格准则 299
20.2.3 使用继承 300
20.3 可扩展性 301
20.4 健壮性 302
20.5 大规模程序设计 303
20.6 小结 305
参考文献注释 306
参考文献 306
习题 306
第四部分 软件工程
第21章 迭代开发 310
21.1 迭代开发概述 310
21.2 迭代开发与瀑布式开发 310
21.3 迭代开发与快速原型法 311
21.4 迭代的适用范围 311
21.5 执行一次迭代 312
21.6 规划下一次迭代 313
21.7 建模和迭代开发 313
21.8 识别风险 314
21.9 小结 314
参考文献注释 315
参考文献 315
第22章 管理建模 316
22.1 管理建模概述 316
22.2 模型的类型 316
22.3 建模的缺陷 317
22.4 建模会话 318
22.4.1 密室建模 318
22.4.2 轮转建模 319
22.4.3 实况建模 319
22.5 组织人员 320
22.6 学习技术 321
22.7 教授技术 322
22.8 工具 322
22.8.1 建模工具 322
22.8.2 配置管理工具 323
22.8.3 代码生成器 323
22.8.4 模拟工具 323
22.8.5 库 324
22.9 估算建模工作量 324
22.10 小结 324
参考文献注释 325
参考文献 325
第23章 遗留系统 327
23.1 逆向工程 327
23.1.1 逆向工程与正向工程 327
23.1.2 逆向工程的输入 327
23.1.3 逆向工程的输出结果 328
23.2 构造类模型 328
23.2.1 实现复原 328
23.2.2 设计复原 329
23.2.3 分析复原 329
23.3 构造交互模型 329
23.4 构造状态模型 330
23.5 逆向工程的技巧 330
23.6 包装 330
23.7 维护 331
23.8小结 332
参考文献注释 332
参考文献 332
附录AUML图形化表示法 334
附录B术语表 335
部分习题答案 346
索引 368
· · · · · · (收起)
读后感
用户评价
**(第一段评价)** 这本书的结构安排堪称典范,从基础概念的梳理到高级设计模式的应用,层层递进,逻辑清晰得让人叹服。作者在讲解每一个建模元素时,都紧密结合实际项目中的应用场景,避免了纯理论的枯燥。我尤其欣赏它对UML图例的详尽解释,特别是那些在实际工作中容易被混淆的图表类型,比如活动图与状态图的区别,书中都有非常精辟的论述。读完前几章,我感觉自己对系统分析的全局观有了显著提升,不再是零散地理解各个技术点,而是形成了一个有机的知识体系。对于初学者来说,这本书提供了坚实的理论基石;而对于有经验的开发者,它则像一本“校准手册”,帮助我们修正过去可能存在的理解偏差。书中大量的案例分析,每一个都像是在模拟一个真实世界的软件开发过程,让读者可以边学边练,代入感极强。我花了很长时间才找到一本能把复杂概念讲得如此透彻的书籍,确实值得反复研读。
**(第二段评价)** 老实说,我抱着怀疑的态度打开这本书的,因为市面上很多“面向对象设计”的书籍要么过于晦涩难懂,要么就是流于表面,讲一堆空洞的原则。然而,这本书彻底颠覆了我的看法。它真正的价值在于其对“设计思维”的培养,而不仅仅是对UML语法的罗列。作者非常注重软件架构的演进过程,书中对于如何从需求分析逐步过渡到高层设计,再到细粒度的类设计,每一步的决策逻辑都阐述得清清楚楚。我特别喜欢其中关于重构和设计原则(如SOLID)的章节,它们不是孤立存在的,而是贯穿于整个建模流程之中,展示了如何通过迭代设计来不断优化软件结构。这本书的语言风格非常务实,没有过多花哨的辞藻,直击核心问题,让人感觉像是在与一位经验丰富、耐心细致的资深架构师面对面交流。它迫使你思考“为什么”要这样建模,而不是简单地记住“如何”画图。
**(第三段评价)** 这本书的排版和插图质量是我在同类技术书籍中见过的最好的之一。高质量的图示在理解UML时至关重要,而这里的每一个图例都清晰、准确,颜色搭配和线条粗细都恰到好处,极大地降低了视觉理解的难度。我过去常常因为看不懂那些复杂的类图或组件图而感到沮丧,但这本书的图文结合策略非常成功。此外,书中的术语解释准确且前后一致,这在快速发展的技术领域中尤为宝贵。它不仅仅是一本工具书,更像是一本方法论的指南。它教会了我如何用一种统一的语言与团队成员沟通复杂的系统结构,极大地提升了团队协作的效率。阅读过程中,我深切感受到作者在组织内容时所花费的心血,每一个章节的衔接都如同精心编排的乐章,流畅自然,没有生硬的转折。
**(第四段评价)** 对于那些需要应对大型、复杂系统建模任务的工程师来说,这本书简直是救命稻草。它没有沉溺于对小型练习题的建模,而是将笔墨集中于如何处理跨越多个子系统的复杂依赖关系和接口定义。书中关于设计模式在UML中的具体映射,讲解得非常到位,特别是对设计模式的适用场景和局限性的分析,体现了作者深厚的实战经验。我特别喜欢作者强调的“模型即文档”的理念,它提醒我们在快速迭代的开发周期中,必须保持模型的活力和准确性。这本书的深度和广度都令人印象深刻,它似乎囊括了从需求捕获到部署视图的全部建模范畴,为构建健壮、可维护的软件系统提供了全方位的指导方针。尽管内容厚重,但阅读体验却出乎意料地轻松,这归功于作者高超的叙事能力。
**(第五段评价)** 这本书的价值在于其对面向对象思想的深度挖掘,而UML本身只是表达这些思想的载体。作者非常巧妙地将理论指导思想融入到对每种UML图的使用说明中,让读者明白,建模不是为了画图而画图,而是为了更好地理解和控制系统的内在逻辑。我发现自己不再机械地套用模板,而是能根据具体问题的性质,灵活选择最合适的建模视图和表示法。书中的一些高级主题,比如如何使用包图来管理大规模架构的边界,简直是教科书级别的讲解。总而言之,这是一本能够提升软件工程师核心竞争力的书籍,它培养的是一种结构化的、前瞻性的思考方式。如果你想从一个“代码实现者”蜕变为一个“系统设计者”,那么这本书提供的视角和工具集是无可替代的。我已经把它推荐给了我团队里的每一位新成员。
很全面的入门书籍,用UML贯穿整个生产过程
差评给中文版,翻译太烂,读到怀疑自己不是中国人,英文一看就懂。
面向对象建模领域的权威著作,有了它,就不再需要其他。
面向对象建模领域的权威著作,有了它,就不再需要其他。
差评给中文版,翻译太烂,读到怀疑自己不是中国人,英文一看就懂。