第3版前言
自古以来,最有才干的建筑师以及最杰出的设计师都确信“俭省定律”(law of parsimony)。不管它是陈述成一种悖论(“少即是多”),还是陈述成一种公案(“禅心即本心”),其智慧是永恒的。将任何事都简化到本质,使形式与功能相谐。从金字塔到悉尼歌剧院,从冯·诺依曼体系结构到UNIX及Smalltalk,最佳建筑师与设计师们都力求遵循这一普遍的永恒原则。
认识到利用奥卡姆剃刀(Occam’s Razor)剃须的意义,当我在设计与阅读时,总在寻找一些遵循俭省定律的项目和书籍。因此,我对你现在正在阅读的这本书赞赏有加。
你可能起先对我的上述评论感到惊异。我经常接触到定义统一建模语言UML的冗长而难懂的规范。这些规范使工具卖主得以实现UML并使方法学学者得以应用UML。七年来,我主持了一些大型国际标准化组,制定了UML 1.1与UML 2.0的规范以及其间若干次较小的修订。这段时期,UML在表现能力与精确程度上已臻成熟,但是,由于标准化过程,也增加了不必要的复杂性。遗憾的是,标准化过程乃是因其“按委员会设计”的折衷妥协而不是因其俭省典雅而闻名于世的。
熟悉规范的晦涩难解之细微末节的UML专家能从Martin对UML 2.0的精粹提炼中学到什么呢?可以学到很多。一开始,Martin就巧妙地将一种庞大复杂的语言简化成一个颇重实效的子集,后者在实践中已被证明效果不错。他摒弃了对该书的前一版增补篇幅的简易途径。由于这种语言的发展壮大,Martin一直坚持其寻求“UML最为有用的部分”的目标,并且所讲述的也正是这一部分。他所指的这一部分就是帮助你做80%工作的UML中神话般的20%部分。俘获并驯服这匹在逃的野兽乃是一项了不起的成就!
更令人钦佩的是,Martin是以一种精彩动人的对话文体来实现这一目标的。通过与我们共享他的意见及趣闻轶事,他使本书成为一本有趣的读物,并且使我们联想到构建与设计系统应是既有创见又富有成效的。如果我们追求俭省公案到尽善尽美的地步,就应发现,用UML对项目建模就犹如在小学或中学中发现指画班与绘画班那样令人愉快。UML应是我们创造性的一支照明杖,以及“精确指明系统蓝图以致第三方可以索价并构作系统”的一台激光器,后者乃是对任何一种真正蓝图语言的酸性检验。
因此,虽然这可能是一本小书,它却不是一本平凡的书。你可以从Martin的建模途径学到的东西几乎和你从他对UML 2.0的解释所学到的东西一样多。
在和Martin一道工作,以增进本次修订所阐明的UML 2.0的语言特征的选取与纠错上使我感到愉快。我们必须记住,所有有生命的语言(自然语言与人工语言)都必然发展或消亡。Martin的关于新特征的选择连同你的爱好以及其他实践者的爱好,乃是UML修订过程中的重要部分。它们使这种语言保持生气勃勃,并帮助它通过市场中的自然选择而发展。
在模型驱动开发成为主流以前还有很多挑战性的工作要做,但是我却因像这样一本清晰阐明UML建模基本原理并进行实际应用的书籍而感到鼓舞。我希望你和我一样能从中获益,并利用新的深刻了解来改进自己的软件建模实践。
Cris Kobryn
U2伙伴的UML 2.0提交组主席
Telelogic公司首席技术专家
第1版前言
在开始制订统一建模语言时,曾希望能产生一种表示设计的标准方式,它不仅能反映最佳工业实践,还能帮助打消软件系统建模过程的神秘。我们相信,使用标准建模语言定能鼓励更多开发人员在构作软件系统之前对系统建模。UML的迅速广泛采用表明软件开发界人士确已深知建模的好处。
UML的创建本身为一迭代与渐进过程,这和大型软件系统的建模颇为相似。最终结果成为一标种准,它建立在面向对象界很多个人和公司提出的想法和所做贡献的基础之上,并且也反映了这些想法与贡献。我们开始致力于UML,但很多别人帮助我们臻于成功。对他(她)们的贡献特致谢意。
创建并商定一种标准建模语言本身为一重要挑战。如何教育软件开发界,并以一种既易理解又按软件开发过程的方式来介绍UML亦为一重要挑战。在这本容易被人误解、且更新到反映UML最新变动的小书中,Martin Fowler遇到了更多的挑战。
Martin不仅以一种清晰而友善的文体介绍了UML的关键方面,而且还清楚阐明了UML在开发过程中所起的作用。阅读中,我们享受到了Martin从12年以上的设计与建模经验中所得到的大量宝贵的建模见识和智慧。
结果是一本引导成千上万开发人员进入UML、并促使他(她)们更热衷于以这种当前标准建模语言进一步开拓很多建模好处的书。
谨向任何一位有兴趣于首先览读UML、并对它在开发过程中所起的关键作用有一概貌了解的建模人员或开发人员推荐此书。
Grady Booch
Ivar Jacobson
James Rumbaugh
序
在我的人生中有很多方面都是幸运的。我的一次鸿运是于1997年在合适的地点以合适的知识撰写了本书的第1版。溯及那时,面向对象建模的混乱天地刚刚开始在统一建模语言(UML)的旗帜下统一起来。从那时起,UML已成为不只是对象的标准而已是软件图示建模的标准。我的幸运是,这本书成为一本最流行的UML书,销售量超过25万册。
好!这对我来说固然不错,但你是否应该购买这本书呢?
我要强调的是,这是一本篇幅简短的书。它不指望给出这些年来日益发展的UML每一方面的细节。我的意图是去发现UML中最为有用的部分,并且只对你讲述这一部分。虽然一本篇幅较大的书会使你了解更多的细节,但也会占用你更多的阅读时间。而时间是你对一本书的最大投资。为了保持这本书篇幅不大,我曾经花时间去选择最佳的部分,这样你就不必去自行选择了。(令人难过的是,“更小”并不总是意味着“更便宜”,产生一本高质量的技术书是有明确固定成本的。)
购买本书的理由之一是要开始学习UML。由于这是一本小书,它会使你很快抓住UML的基本要点。掌握了这些内容以后,就可以通过一些篇幅较大的书(如《用户指南》[Booch, UML user]或《基准手册》[Rumbaugh, UML Reference])来研究UML的更多细节。
本书亦可用作UML的最常用部分的方便参考书。虽然本书并未涵盖UML的所有部分,但比起很多别的UML读物,它却是一本颇为轻便、易于携带的书。
它也是一本作者有自己见地的书。我已经在对象领域工作了很长一段时间,因而,对什么工作起来得心应手、什么不然,有明确的想法。任何一本书都反映作者的意见,我也不打算隐瞒自己的看法。因此,如果你在找寻带有客观性的东西,你就要去尝试别的书。
虽然很多人曾经告诉我,本书是一本关于对象的良好导论,但这却非我的撰写本意。如果你要找寻一本面向对象设计的导论,我推荐Craig Larman的书[Larman]。
很多对UML感兴趣的人都利用工具。本书集中考虑UML的标准以及通常用法,并未涉及各种工具所支持的细节。虽然UML消解了“前UML”表示法的巴别(Babel)塔,但在绘制UML图时,仍然在工具示明什么和允许什么之间有一些令人烦恼的差异。
在本书中我没有过多谈到模型驱动体系结构(MDA)。虽然很多人把这两者(指UML和MDA——译注)看作一回事,但很多开发人员利用UML而对MDA却并无兴趣。如果你要多学一些MDA,我就应该开始先用这本书使你能了解到UML的梗概,然后再转去阅读一本更为专门的MDA的书。
虽然本书的要点是UML,我也增加了少许像CRC卡那样对面向对象设计有价值的别的技术材料。UML只是你用对象取得成就所需要的一部分,而我认为,向你介绍一些别的技术,还是重要的。
在这样一本简短的书中,不可能涉及到有关UML如何与源代码联系的问题,特别是,尚无一种标准方式去进行这样的对应。但是,我要指出一些实现UML片段的常用编码技术。我的代码例子是用Java与C#书写的,这是因为我发现这些语言通常是最被广泛了解的语言。不要假定我喜欢Java和C#,我用Smalltalk写的代码太多了!
为何对UML操心?
我们使用设计图示法已经有了一段时间。对我来说,其主要价值在于交流与理解。一个好的图往往能帮助你交流设计想法,特别是在你想要避免很多细节时。图也可以帮助你理解一个软件系统或一个业务过程。作为试图明白一些事情的开发组一方,图既能帮助你理解又能帮助你把这些理解在开发组内交流。虽然设计图示法不是(至少还不是)正文编程语言的接替,它们却是一个有益的助手。
很多人相信,在将来,图示技术在软件开发中将起统率作用,我却对此比较怀疑,但是,鉴别这些表示法能做什么,不能做什么,则肯定是有用的。
在这些图示法中,UML的重要性源于它在面向对象开发界的广泛使用与标准化。UML已经成为不只是面向对象界内部的主要图示法,而且在非面向对象界也是一种流行的技术。
本书的结构
第1章是对UML的一个简介:UML是什么,对不同的人它所具有的不同含义,以及它源于何处。
第2章谈软件过程。虽然软件过程完全独立于UML,我认为重要的是,了解过程以便看出像UML那样语言的来龙去脉。特别是,重要的是了解迭代开发的作用,对面向对象界的很多人来说,迭代开发是一种基本的过程途径。
我是围绕UML内的各种图型来组织本书的其余部分的。第3章和第4章讨论UML两个最有用的部分:类图(核心)与顺序图。即使本书很小,我相信,利用我在这几章中所讨论的技术,你可以从UML中得到最大的好处。UML是一头日益增长的大型野兽,但是你却不需要它的全部。
第5章谈论类图的一些比较次要但仍有用的部分的细节。第6章到第8章表述进一步显露系统结构(structure)的三种有用的图: 对象图、包图以及部署图。
第9章至第11章示明另外三种有用的行为(behavioral)技术: 用案、状态图(虽然正式称作状态机图,它们一般称为状态图)以及活动图。第12章至第17章非常简短,它们描述了一些不太重要的图,对这些图我只提供了一个快速的例子与解释。
本书前后插页综述图示法最常用的部分。我常听人说,它们是本书最重要的部分。可能你会发现,在你阅读本书某些其他部分时引用它们十分方便。
第3版的变动
如果你有本书的先前几版,也许你想要知道不同之处是什么,更重要的是,是否应该购买新版。
促使我撰写并出版第3版的主要动力是UML 2的出现。UML 2增加了很多新材料,包括一些新图型。即使是熟悉的图也有不少新的图示法,例如,顺序图中的交互架构。如果你想要知道发生了什么,而又不想费力去读完规范(我肯定不会建议你这样做!),本书应该给你一个好的概述。
我已趁此机会完全改写了本书的大部分内容,从正文到例子都使之进入最新状态。我吸收了很多那些过去几年来在讲授与使用UML中所学到的东西。因此,虽然这本超薄的UML书的精神未曾触动,但很多话语都是新的。
几年来我努力工作以使本书尽可能成为内容最新的书。由于UML经历了变动,我尽最大努力与之齐头并进。本书是以UML 2草案为基础的。该草案已于2003年6月被有关委员会接受。在那次投票和更正式的投票之间不太可能出现进一步的变动,因此,我感到,对于付印我的这一修订本来说,UML现在已经足够稳定。任何进一步更新的信息我将在我的网站(http://martinfowler.com)上公布。
致谢
多年来,很多人都居于本书成功的一方。我首先要感谢的是Carter Shanklin和Kendall Scott。Carter是AddisonWesley的编辑,是他建议我写这本书的。Kendall Scott帮助我整理先前两版,仔细检查了正文和图形。他们一起在不可想象的短期内完成了难以完成的第1版的出版工作,而且保持了人们对Addison-Wesley所期待的高质量。他们还在UML看来什么都未稳定的早期保持摆脱变动的困境。
Jim Odell是我事业早期很多方面的导师与指路人。他还深入参与到解决持有己见的方法学学者们在技术问题和个人问题上的分歧并达成共同标准。他对本书的贡献是深邃的,而且也是难以估量的。我敢说,他对UML也同样如此。
UML是一个标准的产物,但我对标准体却有点过敏。因此,为了了解正在进行什么,我需要有一个密探网,他们能使我了解到各种委会员的全部秘密策划的最新动态。如果没有包括Comrad Bock, Steve Cook, Cris Kobryn, Jim Odell, Guus Ramackers以及Jim Rumbaugh等这样一些密探,我可就完了。他们全都给了我有益的指点并回答我一些无聊的问题。
Grady Booch, Ivar Jacobson以及Jim Rumbaugh以“三友”(Three Amigos)而闻名。虽然几年来我曾经对他们开过一些玩笑,他们对本书却给了我很多支持与鼓励。永远不要忘记,我的刺激通常都源于珍视的赏识。
审阅人是一本书质量的关键。Carter告诉过我,审阅人永不嫌多。本书前几版的审阅人是Simmi Kochhar Bhargava, Grady Booch, Eric Evans, Tom Hadfield, Ivar Jacobson, Ronald E. Jeffries, Joshua Kerievsky, Helen Klein, Jim Odell, Jim Rumbaugh以及Vivek Salgar。
第3版也有一组优秀审阅人:
Conrad BockCraig Larman
Andy CarmichaelSteve Mellor
Alistair CockburnJim Odell
Steve CookAlan O'Callaghan
Luke HohmannGuus Ramackers
Pavel HrubyJim Rumbaugh
Jon KernTim Seltzer
Cris Kobryn
所有这些审阅人都花时间阅读书稿,其中每人至少发现一个令人尴尬的可笑错误。谨向他们全体致以诚挚的谢意。剩下来的任何错误完全是我的责任,发现错误后,将在网站martin fowler.com的图书部分勘误表页上公布。
设计并撰写UML规范的核心组是Don Baisley, Morgan Bj rkander, Conrad Bock, Steve Cook, Philippe Desfray, Nathan Dykman, Anders Ek, David Frankel, Eran Gery, ystein Haugen, Sridhar Iyengar, Cris Kobryn, Birger M ller Pedersen, James Odell, Gunuar vergaard, Karin Palmkvist, Guus Ramackers, Jim Rumbaugh, Bran Selic, Thomas Weigert以及Larry Williams。如果没有他们,我就没有什么值得大写特写的了。
Pavel Hruby开发了一种绝妙的Visio模板。我在UML图中用到很多该模板;你可以在http://phruby.com处找到相关信息。
很多人在网上与我联系,亲自提出建议和问题,并指出错误。我未能和他们所有的人取得联系,但我的感谢也是诚挚的。
我钟爱的技术书店是位于马萨诸塞州伯林顿的SoftPro,该店的店员让我在那里度过了很多小时,浏览书架以发现人们是如何实际使用UML的,而且当我在那里时还为我提供上等的咖啡。
对第3版,组稿编辑是Mike Hendrickson。Kim Arney Mulcahy负责项目进度、版式设计以及绘图。Addison-Wesley的John Fuller是生产编辑,而Evelyn Pyle与Rebecca Rider负责本书的文字编辑与校对。我对他们均致谢意。
在我坚持不懈写书时,Cindy一直和我在一起。那时她在花园中耕耘以取得收益。
我的父母使我有良好的教育开端,从此,其他一切都涌现而出。
Martin Fowler
Melrose, Massachusetts
http://martinfowler.com