作为ProcessOn特邀撰稿人,我计划推出UML系列内容,在未来一段时间里会连续在ProcessOn知识社区进行更新,分享给正在学习面向对象知识以及UML的人。关于UML的内容也会从基础开始,把UML的内容完整地呈现在每位读者面前。
今天给大家分享整个系列内容的第1讲:UML简介。
UML(Unified Modeling Language)是一个通用的可视化建模语言标准,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。
提到语言,很多小伙伴开始产生恐惧了,你脑子中可能会飘过SQL、Java、C#、PHP这些神兽,它们可能把不少人折腾的够呛。
各种程序设计语言
但UML不是一门程序设计语言,而是一种可视化的建模语言。之所以称它为语言,因为UML提供了用于交流的词汇及规则,用户在这些词汇与规则框架下可以对同一软件进行无障碍的交流,使各种用户对于同一事物产生相同的认识。
这要从上个世纪60年代末开始,随着计算机技术的不断普及,人们对软件的需求量与日俱增,软件的规模也在不断扩大,软件的复杂度也在日益增加。由于缺乏科学的理论指导,造成软件的开发进度难以保障,软件开发成本在不断爬升,不断变化的用户需求对无法保证质量的软件也是雪上加霜,又没有相关的文档资料作为参考,使软件维护变得异常困难。人们形象的称之为软件危机。
怎么办?那必须把软件开发工作当作工程来干。因此,软件工程的概念也应运而生。软件工程旨在研究软件生产的客观规律,建立软件生产的有关概念、原则、方法、技术和工具,以指导软件生产活动。当然取得了令人满意的效果。
随着人们对软件工程研究的不断深入,面向对象的程序设计进入人们的视野。20世纪80年代到90年代初,诞生了很多面向对象的分析与设计方法,也出现了一大堆介绍面向对象方法的书籍。这有点像百家争鸣的感觉。每一位书籍作者都领导者一批实践者,这些方法有很多相似之处,但又有细微的差别。
这给同一领域的实践者也带来困惑,在谈论同一事物时,他们可能拿出不同的面向对象表示方法,这严重阻碍了他们对同一事物的理解和交流。
这个时候,有人提议,我们统一一下,使用相同的标准吧。众人似乎没听到他的呼声,无人理睬。有一个组织叫OMG(Object Management Group)也尝试着对面向对象进行标准化,但只收到所有方法学家的一封公开抗议信。
Martin Fowler在谈到这个情形时,在其著作《UML精粹:标准对象建模语言简明指南的作者》讲了一则笑话:
A:方法学家和恐怖分子之间有什么区别呢?
B:恐怖分子可以谈判。
面向对象表示方法差距巨大
在1995 OOPSLA(Object-Oriented Programming Systems,Languages and Applications)年度会议上,Grady Booch和Jim Rumbaugh首次公开描述了他们合并后的方法,即统一方法文档0.8(Unitied Method)。
经过一系列的各方较量,1997年1月,各方组织一起提交了方法标准的建议书,Rational和其他组织一起协作,发布了UML文档1.0版本,这也是第一次被叫作统一建模语言。
又经过各方掰手腕的过程,OMG采纳1.1版作为官方的OMG标准。又经过一系列修改,UML1.4和UML1.5已经比较成熟,如Rational Rose 2003就是基于这样的标准而开发出来的。
很多人们在谈论UML时,会把创造者的功劳主要归于Grady Booch、Ivar Jacobson和Jim Rumbaugh,把他们称为“三友”(Three Amigos)。
Grady Booch | Ivar Jacobson | Jim Rumbaugh |
UML创造者三友
当然也有人表示了反对,认为他们在前期做出了一定的贡献,但在后期OMG委员会的人员做了很多贡献,而三人中Jim Rumbaugh在后期是唯一做出贡献的人。
方法和表示法方面
在以往出现的方法和表示法方面,UML合并了许多面向对象方法中被普遍接受的概念,对每种概念,UML都给出了清晰的定义、表示法和有关术语。使用UML可以对已有的各种方法建立的模型进行描述,并比原来的方法描述得更好。
软件周期方面
在软件开发的生命期方面,UML对开发的要求具有无缝性。开发过程中的不同阶段可以采用相同的一整套概念和表示法,在同一个模型中,它们可以混合使用,而不必转换概念和表示法。这种无缝性对迭代的增量式软件开发至关重要。
在应用领域方面
在应用领域方面,UML适用于各种领域的建模,包括大型的、复杂的、实时的、分布的、集中式数据或计算的、嵌入式的系统等。
编程语言和开发平台方面
在实现的编程语言和开发平台方面,UML可应用于运行各种不同的编程实现语言和开发平台的系统。
开发过程方面
在开发过程方面,UML是一种建模语言,不是对开发过程的细节进行描述的工具。就像通用程序设计语言可以进行许多风格的程序设计一样。
内部概念方面
在内部概念方面,UML特别注意揭示和表达各种概念之间的内在联系。试图用多种适用于已知和未知情况的办法把握建模中的概念,这个过程会增强对概念及其适用性的理解。这不是统一各种标准的初衷,但却是统一各种标准最重要的结果之一。
UML的组成可以使用下图来说明:
UML基本构造块和图形分类
目前,UML的最新版本已发展到了UML2.5版,也从原有的9种类型的图增加到了13种。有人认为UML本身的复杂性可能超过了软件建模本身。
当然,UML中提供的图形建模方法也并非一定是最优的,有很多原有的建模技术在某些方面的简单明了要比UML方法好很多。关于UML的其它内容将在今后一点点介绍给大家,敬请期待。