第1章 UML概况 -- 请多提意见
第1章 UML概况
知道吗?超过七成的软件项目是以某种形式的失败而告终的 。
作为一个程序员、架构师、项目经理或者业务分析员,无论你处在什么业务行业中,你都是在软件行业中。软件系统是业务系统的一部分,不论这个业务系统是大如跨国公司,还是小如录像带店。如果你建造的软件不能准确满足用户需求的话,会造成用户生产能力的损失,代价不可谓不昂贵。
但是你知道吗,即便你建造的软件能够满足用户需求的话,你所付出的分析、设计、开发、维护的费用也有可能过于昂贵,甚至有可能比必需费用高出两三倍。
出现这样的问题,往往不是因为设计人员不够聪明,而是因为他们没有掌握软件设计的锐利武器:UML和基于UML的软件分析和设计。
以史为鉴可以知天下。本章就以图1.1为主线,面向对象思想和UML的发展历史,这样可以更为透彻地看清楚眼前的问题。
图1.1、UML历史发展断代图。
第1节 UML的历史
面向对象的春秋时期
面向对象语言的研究开始于二十世纪六十年代,以一种叫做Simula的语言为代表。
人们通常使用模拟系统在计算机中模拟真实世界中的行为,譬如交通路口在车辆不断到达、信号灯不断变化的情况下的状况、化学反应中化学物质在温度和压力不断变化的情况下的状态,以及生产车间的装配线在人员调配、流水线速度变化情况下的状况等等。
一般而言,化学反应中温度和压力是可以连续变化的,因此化学反应中的事件是连续的。而在在交通路口的模拟中,车辆的到达,信号灯的变化都是有一定时间间隔的,这个系统的状态变化是离散的,而不是连续的。Simula 1就是这样一种用来描述离散事件(Discrete event)系统的语言。
在1967年,奥斯陆大学(University of Oslo)和挪威计算中心(Norwegian Computing Centre)的Kristen Nygaard和Ole-Johan Dahl在Simula 1的基础之上开发成功一种全功能(General Purpose)语言,称为Simula 67。这就是人类历史上第一个具备面向对象功能的编程语言,它具备了类和继承的概念。1967年就是面向对象语言的出生年。这种语言至今仍在研究和使用中。
在七十年代,犹他大学(University of Utah)的Alan Kay,以及后来的Xerox公司PARC研究中心的Adele Goldberg和Daniel Ingalls等人一同开发了Smalltalk语言,这是第一个完整的面向对象的编程语言。
Smalltalk语言在八十年代得到了完善,形成了Smalltalk 80版本,这一版本导致了Smalltalk语言的广泛流传和应用。
Smalltalk语言的成功导致了一大批面向对象语言的出现,包括Objective C, C++, Eiffel和CLOS(Common Lisp Object System),以及Object Pascal及Delphi等。在1996年正式发表的Java语言把面向对象的编程思想推向了普通程序员。最近,Microsoft发表了Visual Basic.NET和C#等.NET语言。C#结合了Java和C++的长处,将成为Windows编程的主体语言。
在Simula和C#之间存在着许许多多的面向对象语言,是Java语言和互联网的普及使得面向对象语言茁壮成长起来,形成一部面向对象的春秋。
分析方法的战国时代
在Smalltalk出现后不久,关于面向对象的分析和设计的著作开始出现。其中有很多是与特定的编程语言密切相关的,譬如Smalltalk, Object C和C++等,但是也有一些著作是相当一般化,更具有普遍意义的。这些著作包括Shlaer和Mellor在1988年的著作,Coad和Yourdon在1990年和1991年的著作,Booch在1991年的著作,Rumbaugh等人在1991年的著作,以及Jacobson等人在1992年的著作,等等。
不同的作者采用了不同的符号表示类和对象,以及它们之间的关联。在有些时候,同样或者相似的符号在不同作者的著作里表示不同的概念,譬如三角形加上连线在Rumbaugh图标中表示继承,而在Coad和Yourdon图标中则表示聚合(aggregate),造成相当程度的混淆。
在九十年代初期一共出现了五十种不同的建模语言,这些不同的面向对象的图标和相关的方法论形成了一个群雄争霸的战国时代,这个时期常常叫做方法论的战争(Method Wars)时期。
这个时期中,逐渐出现以Rumbaugh,Booch和Jacobson为代表的三家学派,理论最为完善,实力最为雄厚,形成三足鼎立的形势。
UML一统六合
大乱导致大治。九十年代中期,混乱的情况出现逆转。方法论战争中的主要三方Rumbaugh,Booch和Jacobson逐渐吸取彼此的长处,弥补自己的不足,他们的理论越来越相似。终于,统一的条件成熟了。
1994年,Rumbaugh和Booch开始在Rational Software Corporation一同工作,将他们两个学派的理论统一起来。在1995年他们发表了Unified Method的0.8版。在1995年Jacobson加入到Rational公司中,这样三位作者终于坐到一起来了。
这时他们做了一个重要的决定,就把各种方法论中的语言部分与方法论部分加以区分,语言部分就称作统一建模语言(Unified Modeling Language或UML),方法论部分称为统一软件开发过程(Unfiied Software Development Process)后来改称为Rational Unified Process(RUP)。UML不再和方法论、软件过程理论直接挂钩,它可以用来描述RUP,也可以用来描述其它不同的过程理论,成为一个超然的纯语言构造。
图1.2、UML是从多种建模理论中脱颖而出的。
OMG(Object Management Group)是一个建立工业标准的组织,它在1996年建议发展出一套标准的对象建模语言,Rational Software Corporation公司与IBM,HP,Oracle以及Microsoft等主要的软件公司组成UML Partner组织,共同承担了为OMG制定UML标准的工作。
1997年十一月,UML的1.1版出炉了,OMG并从此接过了制定以后各个版本的责任。OMG指定MCI Systemhouse公司的Cris Kobryn负责UML标准的所有修改工作。1998年六月发布UML 1.2版,1999年六月发布1.3版,2001年发布1.4版,2002年发布1.4.1版,2003年3月发布1.5版。其中1.1版本和1.3版本是UML 1.0的最为重要的修订版。
UML 2.0已成定局
在经过了长达三年的需求采集和讨论之后,OMG终于将要发表UML 2.0版本的最终规范了。负责规范制定的任务小组计划在2004年3月投票决定是否采纳现有提案。尽管还有其他提案,但是采纳其他提案的可能性很小。UML 2.0已成定局。
本书就是建立在这个提案的基础之上的,虽然正式的UML 2.0标准还有待表决结果,但是预计不会有戏剧性的变化。这就是本书成书的背景。
关于UML 2.0与UML 1.x的区别,本书后面还会集中讲述。
第2节 UML是什么
不同的工程设计人员之间、设计人员与生产人员之间进行沟通必须有一种精确的标准工程设计语言。机械设计蓝图就是机械工程设计的标准语言。在一个生产作坊里面,人们沟通可以使用手语,打着半哑谜。在一个现代化的工程里面,人们要相互沟通和协调合作,就必须使用标准的工业化设计语言。
图1.3、使用工业标准设计语言,还是打哑谜?
如同电子工程师有电路设计图,机械工程师有机械设计图,建筑工程师有建筑设计图一样,软件工程师有UML图标语言,UML是当今软件设计的标准语言。
在国内,UML的使用正在逐渐得到重视,但是仍然没有成为设计人员交流的语言。在很多开发项目里,人们在系统设计过程中使用的仍然是“手语”和“半哑谜”一样的沟通方式,UML仅仅被当做点缀。