全部博文(465)
分类: Delphi
2012-11-16 15:38:00
UML精粹:标准对象建模语言简明指南(第3版)
(美)福勒(Fowler,M.)著
潘加宇译
ISBN 978-7-121-17049-2
2012年6月出版
定价:59.00元
16开
228页
内 容 简 介
在紧迫的时间压力下,程序员很难通过紧跟技术创新的脚步来享受软件工程领域的最新成果。正因如此,殿堂级大师Martin Fowler这本旨在帮助专业人士提升效率的图书一问世,立即给软件工程社区带来巨大震撼。其前两版经年畅销,因行文精炼自然、见解透彻而广受称赞。被誉为以软件设计为生者必备资料的第3版,更是带来有效面向对象设计的最佳思想及愈发便利的教学体例,引进交互概述图、时间图、组合结构等新图型,对类图、顺序图、状态图、活动图等也有较多更新。
本书适合作为计算机、电子、通信等专业本科及研究生课程教材,对软件开发人员及专业研究者也极具参考价值。
译者序
新的“旧书”
这是一本“旧书”!
本书英文第3版最早出版于2003年9月。您可能会想,为什么不引进第4版?因为还没有第4版。也不要埋怨作者,这本书出到第3版已经算不错了,Martin Fowler写的其他书连第2版都没有呢,就连他最早、也最具原创性的《分析模式》也不例外。
虽然名义上还是第3版,但是作者在他的网站上放置了一个勘误页面,进行持续修正。每次重印时,都会把这些修正反映到新的印本中。本次翻译就基于最新的印本。
自UML 2.0以来,UML版本变更的步子迈得并不大。这是正常的,建模语言的抽象级别更高,所以相对C#、Java等实现语言UML的版本变化没有那么频繁。UML目前的版本是2.4,主要的改进是规约更加严密。
本书的价值在于书名所说,“精粹”。本书不只介绍UML的图形和规范,更深入浅出地讲解背后隐藏的软件开发思想。更难得的是,作者把这些知识浓缩到如此简练的篇幅,通俗易懂地说出来。本书出版后就成为Amazon上最畅销的UML书籍,打败了UML“三友”所写的更为“官方”的《UML参考手册》和《UML用户指南》。本书也是Martin Fowler所写的书里面被翻译成最多种文字的。
关于本书的赞誉,网上网下都非常多,这里不重复罗列,我要说一下本书的不足。MartinFowler更多地从编码的角度来看待UML。例如,他认为UML有三种用法:草稿、蓝图和编程语言。这会给开发人员带来误解,认为模型只不过是源代码的另一种比较概要或比较形象的表现形式。其实,不同工作流产生的工件之间的区别不是形式而是内容,也就是思考的范围。如果所用的工具不能做到UML模型就是代码,那么设计工作流就不需要UML模型,代码就是设计,只把UML用在业务建模、需求和分析工作流上。Martin Fowler的研究工作集中于分析设计工作流,特别是设计工作流,对业务建模和需求方面可能研究得不多。书中涉及业务建模和需求的观点,我认为应该注意辨别。
UMLChina和Martin Fowler第一次联系发生在2001年8月,当时我邀请他在UMLChina上做网络交流,这次交流的链接为 fowler.htm。后面几年,UMLChina为传播Martin Fowler的思想也做了许多工作。如果用一句话来归纳,我想说:“Martin Fowler是一个独特的人,本书也是一本独特的书。”
潘加宇
对《UML精粹》一书的赞誉
“《UML精粹》一直是介绍UML表示法的最好书籍。Martin敏捷和实用的方法击中了要害,我竭诚地向你推荐它!”
——Craig Larman
Applying UML and Patterns一书的作者
“Fowler破解了UML的复杂性,让用户能快速开始。”
——Jim Rumbaugh
UML的作者和发明人
“Martin Fowler的《UML精粹》是开始学习UML的绝佳方式。事实上,对于大多数用户而言,《UML精粹》包含你成功应用UML需要的所有东西。正如Martin指出的,使用UML有许多方式,但最常见的是作为一种被广泛认同的草拟设计的表示法。本书对UML的本质做了绝佳的提炼工作,极力推荐。”
——Steve Cook
软件架构师
微软公司
“简短的UML书比长的UML书好。本书依然是最好的简短的UML书籍。事实上,它是许多主题中最好的简短书籍。”
——Alistair Cockburn
Humans and Technology公司的创始人和总裁
“本书极其有用,可读,并且它最大的优点是在主题如此广泛时仍然简洁得让人欣喜。如果你只购买一本关于UML的书,应该就是这本。”
——Andy Carmichael
BetterSoftwareFaster公司
“如果你在使用UML,本书不容错过。”
——John Crupi
Sun Microsystems杰出工程师
Core J2EETM Patterns一书的作者之一
“任何做UML建模、学习UML、阅读UML和建造UML工具的人,应该有本书的最新版本(我有所有版本)。书中有许多好的、有用的信息,但又不太多,都是刚好够用的干货。它是我的书架上必备的参考书!”
——Jon Kern
建模人员
“本书是学习UML基础很棒的起点。”
——Scott W. Ambler
Agile Modeling一书的作者
“十分在理的关于UML用法的描述,又足够幽默,能抓住读者的注意力。‘游泳隐喻不给力了’,确实!”
——Stephen J. Mellor
Executable UML一书的作者之一
“对于那些要使用UML但对阅读厚重的UML参考书和研究论文不感兴趣的人来说,这是一本绝佳的书。Martin Fowler挑选了使用UML来设计草稿所需的所有关键技能,让读者从复杂和很少使用的UML特性中解放出来。读者会发现并不缺少进一步阅读的建议。作者基于自己的经验给读者提供了建议。这是一本简洁而可读的书,覆盖UML及相关面向对象概念的基本要素。”
——Pavel Hruby
微软商业方案部
“就像所有好的软件开发人员一样,每一次升级Fowler都会改善他的产品。当要在班上教授UML时,如果被要求推荐学习资料,这是唯一一本我考虑推荐的书。”
——Charles Ashbacher
Charles Ashbacher Technologies公司总裁,首席执行官
“更多的书应该像《UML精粹》一样——简洁和可读。Martin Fowler选择你需要的UML部分,以易读的风格呈现出来。然而,作者关于如何使用这项技能来沟通和设计文档的洞察力和经验比只是描述建模语言更有价值。”
——Rob Purser
Purser Consulting有限责任公司
第3版前言
从远古时代起,最有才华的架构师和最有天赋的设计人员就都知道吝啬定律。吝啬定律不管表述得像悖论(少就是多),还是佛家心法(禅心即初心),它的智慧是永恒的:把每一件事情减少到实质,这样就可以使其功能更好地发挥出来。从金字塔到悉尼歌剧院,从冯•诺依曼架构到UNIX和Smalltalk,最好的架构师和设计人员都努力遵从宇宙的这条永恒原则。
认识到奥卡姆剃刀的价值后,当我在做架构和阅读时,我会寻找遵从吝啬定律的项目和书。因此,我为你正在阅读的这本书喝彩。
你一开始可能会发现我刚才的评价令人吃惊。我经常被人与内容多而密的定义统一建模语言(UML)的规则联系起来。这些规则允许工具厂商实现UML,允许方法学家应用UML。7年以来,我已经作为主席主持大型国际标准化团队制定UML 1.1和UML 2.0规则,以及若干版本之间小的修订。在这个时期,UML在表现力和准确性上已经成熟;但作为标准化过程的一个结果,也添加了不必要的复杂性。遗憾的是,标准化过程更倾向于妥协,以符合委员会设计的结果,而不是倾向于优雅的吝啬。
作为一名UML专家,我已经熟知规则中隐密的细枝末节,还能从Martin对UML 2.0的精炼中学到东西吗?和你一样,可以学到很多。一开始,Martin熟练地把一门复杂的大型语言削减为一个实用的子集,这个子集经他的实践证明是高效的。他拒绝走更容易的路线:在他的书的上一个版本上加上附页。因为语言发展了,Martin要忠于他的目标:寻求“最有用的UML组成部分”,而且就告诉你这部分。他给出的这部分就是UML中那神秘的20%(能帮助你完成80%的工作)。捕获和驯服UML这头善于躲避的野兽,是了不起的成就!
更让人印象深刻的是,Martin以极其吸引人的口语化风格达成了这个目标。通过和我们分享他的观点和轶事,使得这本书读起来很有趣,并提醒我们架构和设计系统应该是创造性和生产性的。如果我们追寻吝啬心法的完整意图,我们应该会发现UML建模项目就像我们在初中时上指画班一样令人愉快。UML应该是我们吸收创造性闪电的一根避雷针,同时也是精确详述系统蓝图的一束激光,这样,第三方可以投标和建造那些系统,这是判断一门语言是否是真正的蓝图语言的酸性测试。
因此,虽然这是一本很薄的书,但绝不平凡。你既可以学到Martin的建模方法,也可以学到他对UML 2.0的解释。
我很享受和Martin一起工作,挑出这个修订版本要解释的UML 2.0语言的特性并修正以前的错误。我们需要记住,所有现存的语言,包括自然语言和人造语言,必须不断进化,要不就消亡了。Martin对新特性的选择,以及你和其他从业者的偏好,是UML修订过程中的关键部分。你们让这门语言保持生命力,帮助它通过市场的自然选择进化。
在模型驱动开发变成主流之前,还有很多具有挑战性的工作,但我受到了本书及类似书籍的鼓舞,这些书清晰地解释了UML建模的基本概念和实战应用。我希望你能像我一样从这本书中学到很多东西,并使用你获得的新见解改善自己的软件建模实践。
Cris Kobryn
UML 2.0提案团队U2 Partners 主席
Telelogic首席技术专家
第1版前言
当我们开始精心制作统一建模语言时,我们希望可以生产出表达设计的标准方法,不仅反映行业最佳实践,而且有助于揭开软件系统建模过程的神秘面纱。我们相信,标准建模语言的存在会鼓励更多的开发人员在建造他们的软件系统之前建模。UML快速而广泛地被采纳,说明建模的好处确实在开发人员社区中广为人知。
UML的创建本身就是一个迭代和增量的过程,和大型软件系统的建模非常相似。标准的最终结果反映了来自对象社区的许多个人和公司的诸多思想和贡献。我们发启了创建UML的工作,但因得到了许多人的帮助才迈向成功,我们感谢他们的贡献。
创建和认同一门标准建模语言本身就是重要的挑战。如何教育开发社区在软件开发过程的上下文中以可以接受的方式展示UML,也是重要的挑战。不要被本书的简短所迷惑,Martin Fowler克服了种种挑战,更新了本书,以反映UML最近的变化。
本书的风格清晰而友好,Martin不仅介绍了UML的关键方面,而且清晰地展示了开发过程中UML扮演的角色。Martin 12年多的设计和建模经验,是我们提取建模洞察力和智慧的富矿。
本书已经向成千上万的开发人员介绍了UML,激发了他们进一步探索用现在这种标准建模语言建模的诸多好处。
我们向所有建模人员和开发人员推荐本书,不管您是第一次对UML感兴趣,还是希望了解UML在开发过程中扮演的关键角色。
Grady Booch
Ivar Jacobson
James Rumbaugh
目 录
插图目录 xxii
第3版前言 xxvi
第1版前言 xxix
序 xxxi
为什么要花时间学UML xxxiii
本书结构 xxxiii
第3版的变化 xxxiv
致谢 xxxv
第1章 简介 1
1.1 UML是什么 1
1.2 使用UML的方式 2
1.3 UML诞生史 9
1.4 表示法和元模型 11
1.5 UML图 13
1.6 什么是合法的UML 16
1.7 UML的含义 18
1.8 仅有UML是不够的 18
1.9 何处开始UML 20
1.10 更多资料 20
第2章 开发过程 23
2.1 迭代和瀑布过程 24
2.2 预测性和自适应计划 28
2.3 敏捷过程 30
2.4 Rational统一过程 31
2.5 为项目裁剪过程 32
2.6 为过程裁剪UML 36
2.6.1 需求分析 36
2.6.2 设计 37
2.6.3 文档 39
2.6.4 理解遗留代码 40
2.7 选择开发过程 40
2.8 更多资料 41
第3章 类图:基础 43
3.1 性质 44
3.1.1 属性 45
3.2.2 关联 46
3.2 多重性 47
3.3 性质的编程解释 48
3.4 双向关联 51
3.5 操作 54
3.6 泛化 56
3.7 注解符和注释 57
3.8 依赖 58
3.9 约束规则 61
3.10 何时使用类图 64
3.11 更多资料 65
第4章 序列图 67
4.1 创建和删除参与者 71
4.2 循环、条件等 72
4.3 同步和异步调用 76
4.4 何时使用序列图 77
第5章 类图:进阶概念 81
5.1 关键词 81
5.2 责任 83
5.3 静态操作和属性 83
5.4 聚合和组合 84
5.5 派生性质 85
5.6 接口和抽象类 86
5.7 只读和冻结 91
5.8 引用对象和值对象 91
5.9 限定关联 93
5.10 分类和泛化 94
5.11 多重和动态分类 95
5.12 关联类 97
5.13 模板(参数化)类 101
5.14 枚举 103
5.15 主动类 103
5.16 可见性 104
5.17 消息 105
第6章 对象图 107
6.1 何时使用对象图 108
第7章 包图 109
7.1 包和依赖 111
7.2 包的分解 114
7.3 实现包 115
7.4 何时使用包图 116
7.5 更多资料 117
第8章 部署图 119
8.1 何时使用部署图 121
第9章 用例 123
9.1 用例的内容 124
9.2 用例图 127
9.3 用例的级别 128
9.4 用例和特性(或故事) 129
9.5 何时使用用例 129
9.6 更多资料 130
第10章 状态机图 131
10.1 内部活动 133
10.2 活动状态 134
10.3 超状态 135
10.4 并发状态 136
10.5 实现状态图 137
10.6 何时使用状态图 140
10.7 更多资料 141
第11章 活动图 143
11.1 分解一个动作 146
11.2 分区 147
11.3 信号 149
11.4 令牌 150
11.5 流和边 151
11.6 针脚和变换 152
11.7 扩展区域 153
11.8 流结束 155
11.9 结合规格 156
11.10 其他更多内容 157
11.11 何时使用活动图 157
11.12 更多资料 158
第12章 通信图 159
12.1 何时使用通信图 161
第13章 组合结构 163
13.1 何时使用组合结构 165
第14章 组件图 167
14.1 何时使用组件图 169
第15章 协作 171
15.1 何时使用协作 173
第16章 交互概述图 175
16.1 何时使用交互概述图 175
第17章 时间图 177
17.1 何时使用时间图 179
附录A UML版本之间的变化 181
A.1 对UML的修订 181
A.2 《UML精粹》中的变化 182
A.3 从UML1.0到1.1的变化 184
A.3.1 类型和实现类 184
A.3.2 完整和不完整的鉴别器约束 185
A.3.3 组合 185
A.3.4 不可变和冻结 185
A.3.5 序列图上的返回 185
A.3.6 术语“角色”的使用 186
A.4 从UML 1.2(和1.1)到1.3(和1.5)的变化 186
A.4.1 用例 186
A.4.2 活动图 187
A.5 从UML 1.3到1.4的变化 188
A.6 从UML 1.4到1.5的变化 189
A.7 从UML 1.x到UML 2.0 189
A.7.1 类图:基础(第3章) 190
A.7.2 序列图(第4章) 190
A.7.3 类图:概念(第5章) 190
A.7.4 状态机图(第10章) 191
A.7.5 活动图(第11章) 191
参考文献 193
索引 199
插图目录
图1.1 UML元模型的小片段 13
图1.2 UML图形类型分类 15
图1.3 Wiki的一部分的非正式屏幕流图() 19
图3.1 一个简单的类图 44
图3.2 展示订单的性质为属性 46
图3.3 展示订单的性质为关联 46
图3.4 双向关联 51
图3.5 使用动词短语命名关联 52
图3.6 注解符用做一个或多个图形元素的注释 58
图3.7 依赖的例子 59
图4.1 一张中央控制的序列图 68
图4.2 分布控制的序列图 70
图4.3 创建和删除参与者 72
图4.4 交互框 73
图4.5 旧习惯表达控制逻辑 75
图4.6 CRC卡样例 78
图5.1 在类图中展示责任 83
图5.2 静态表示法 84
图5.3 聚合 84
图5.4 组合 85
图5.5 time period内的派生属性 86
图5.6 接口和抽象类的Java例子 88
图5.7 小球-球窝表示法 89
图5.8 老的带依赖的棒棒糖表示法 89
图5.9 使用棒棒糖表示法在序列图中展示多态 90
图5.10 限定关联 93
图5.11 多重分类 96
图5.12 关联类 98
图5.13 提升关联类为完整的类 98
图5.14 关联类的细微差别(角色不应该是关联类) 99
图5.15 用一个类表达瞬时关系 100
图5.16 为关联使用 «temporal» 关键词 100
图5.17 模板类 101
图5.18 绑定元素(版本1) 102
图5.19 绑定元素(版本2) 102
图5.20 枚举 103
图5.21 主动类 104
图5.22 带消息的类 105
图6.1 Party组合结构的类图 107
图6.2 展示Party实例的对象图 108
图7.1 在图上展示包的方式 110
图7.2 企业应用包图 112
图7.3 把图7.2分离成两个部分 114
图7.4 被其他包实现的包 115
图7.5 在客户包中定义一个需求接口 116
图8.1 部署图实例 120
图9.1 用例文本实例 125
图9.2 用例图 127
图10.1 一个简单的状态机图 132
图10.2 一个文本域的typing(输入中)状态的内部事件展示 134
图10.3 带活动的状态 135
图10.4 带有嵌套子状态的超状态 136
图10.5 并发正交状态 137
图10.6 处理图10.1状态转换的C#嵌套switch 138
图10.7 图10.1的状态模式实现 139
图11.1 一个简单的活动图 144
图11.2 一张次级的活动图 146
图11.3 修改图11.1的活动为调用图11.2的活动 147
图11.4 活动图上的分区 148
图11.5 活动图上的信号 149
图11.6 发送和接收信号 150
图11.7 展示边的4种方式 152
图11.8 流上的变换 153
图11.9 扩展区域 154
图11.10 扩展区域中的单个动作的速记 154
图11.11 活动中的流结束 155
图11.12 结合规格 156
图12.1 中央控制的通信图 160
图12.2 嵌套小数编号的通信图 160
图13.1 展示TV Viewer及其接口的两种方式 163
图13.2 组件的内部视图(来自Jim Rumbaugh的例子) 164
图13.3 带多个端口的组件 165
图14.1 组件的表示法 167
图14.2 组件图例子 168
图15.1 带角色类图的协作 172
图15.2 拍卖协作的序列图 172
图15.3 协作发生 173
图15.4 展示JUnit(junit.org)中模式使用的非标准方式 174
图16.1 交互概述图 176
图17.1 展示状态为线的时间图 178
图17.2 展示状态为区域的时间图 178