在我的人生中有很多方面都是幸运的。我的一次鸿运是于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已经成为不只是面向对象界内部的主要图示法,而且在非面向对象界也是一种流行的技术。本书的结构
第l章是对UML的一个简介:UML是什么,对不同的人它所具有的不同含义,以及它源于何处。
第2章谈软件过程。虽然软件过程完全独立于UML,我认为重要的是,了解过程以便看出像UML那样语言的来龙去脉。特别是,重要的是了解迭代开发的作用,对面向对象界的很多人来说,迭代开发是一种基本的过程途径。
我是围绕UML内的各种图型来组织本书的其余部分的。第3章和第4章讨论UML两个最有用的部分:类图(核心)与顺序图。即使本书很小,我相信,利用我在这几章中所讨论的技术,你可以从UML中得到最大的好处。LIML是一头日益增长的大型野兽,但是你却不需要它的全部。
第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)上公布。