Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1481993
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: Delphi

2012-11-16 15:38:00

传世经典书丛

UML精粹:标准对象建模语言简明指南(第3版)

(美)福勒(Fowler,M.)著

潘加宇译

ISBN 978-7-121-17049-2

20126月出版

定价:59.00

16

228

在紧迫的时间压力下,程序员很难通过紧跟技术创新的脚步来享受软件工程领域的最新成果。正因如此,殿堂级大师Martin Fowler这本旨在帮助专业人士提升效率的图书一问世,立即给软件工程社区带来巨大震撼。其前两版经年畅销,因行文精炼自然、见解透彻而广受称赞。被誉为以软件设计为生者必备资料的第3版,更是带来有效面向对象设计的最佳思想及愈发便利的教学体例,引进交互概述图、时间图、组合结构等新图型,对类图、顺序图、状态图、活动图等也有较多更新。

本书适合作为计算机、电子、通信等专业本科及研究生课程教材,对软件开发人员及专业研究者也极具参考价值。

译者序

新的旧书

这是一本旧书

本书英文第3版最早出版于20039月。您可能会想,为什么不引进第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的研究工作集中于分析设计工作流,特别是设计工作流,对业务建模和需求方面可能研究得不多。书中涉及业务建模和需求的观点,我认为应该注意辨别。

UMLChinaMartin Fowler第一次联系发生在20018月,当时我邀请他在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版前言

从远古时代起,最有才华的架构师和最有天赋的设计人员就都知道吝啬定律。吝啬定律不管表述得像悖论(少就是多),还是佛家心法(禅心即初心),它的智慧是永恒的:把每一件事情减少到实质,这样就可以使其功能更好地发挥出来。从金字塔到悉尼歌剧院,从冯诺依曼架构到UNIXSmalltalk,最好的架构师和设计人员都努力遵从宇宙的这条永恒原则。

认识到奥卡姆剃刀的价值后,当我在做架构和阅读时,我会寻找遵从吝啬定律的项目和书。因此,我为你正在阅读的这本书喝彩。

你一开始可能会发现我刚才的评价令人吃惊。我经常被人与内容多而密的定义统一建模语言(UML)的规则联系起来。这些规则允许工具厂商实现UML,允许方法学家应用UML7年以来,我已经作为主席主持大型国际标准化团队制定UML 1.1UML 2.0规则,以及若干版本之间小的修订。在这个时期,UML在表现力和准确性上已经成熟;但作为标准化过程的一个结果,也添加了不必要的复杂性。遗憾的是,标准化过程更倾向于妥协,以符合委员会设计的结果,而不是倾向于优雅的吝啬。

作为一名UML专家,我已经熟知规则中隐密的细枝末节,还能从MartinUML 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.01.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.31.4的变化   188

A.6  UML 1.41.5的变化   189

A.7  UML 1.xUML 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

 

阅读(1445) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~