2.2 统一建模语言
可视化建模技术在软件开发中正日益扮演着越来越重要的角色。为了便于交流,选择一种合适的建模语言就显得至关重要。统一建模语言就是一种最佳的选择。
统一建模语言是由对象管理组织(Object Management Group, OMG)制定的一个通用的、可视化的建模语言标准,可以用来可视化、描述、构造和文档化软件密集型系统的各种工件。它是由信息系统和面向对象领域的3位著名的方法学家Grady Booch、James Rumbaugh和Ivar Jacobson(three Amigos,三友)提出的。这种建模语言已经得到了工业界的广泛支持和应用,并已被ISO确立为国际标准。在选择UML建模时,需要注意以下几个方面的问题。
(1)UML不是一种程序设计语言,而是一种可视化的建模语言。它比C++、Java这样的程序设计语言抽象层次更高,可以适用于任何面向对象的程序设计语言。
(2)UML不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种模型表示的标准。
(3)UML不是过程,也不是方法,但允许任何一种过程和方法使用它。
2.2.1 选择UML
在面向对象的软件开发中,选择UML已经成了必然的趋势。面向对象专家Martin Flower曾经这样说过:“如果正在使用其他的旧技术,我强烈建议您马上转用UML,因为它明显地将成为符号系统的统一标准。如果正在考虑开始使用设计符号来工作,UML是一个好的选择,因为它已经统治业界了。”在很多情况下,开发人员都应该选择UML作为建模语言。
(1)OO方法是项目决定采用的方法论,是整个项目或产品成功的关键。
(2)开发人员感觉用源码说明不了真正的问题,希望利用可视化建模语言简化文档,提高交流效率,准确抓住问题本质。
(3)系统的规模和设计都比较复杂,需要用图形抽象地表达复杂的概念,增强设计的灵活性、可读性和可理解性,以便暴露深层次的设计问题、降低开发风险。
(4)组织希望记录已成功项目、产品的公共设计方案,在开发新项目时可以参考、复用过去的设计,以节省投入,提高开发效率和整体成功率。
(5)有必要采用一套通用的图形语言和符号体系描述组织的业务流程和软件需求,促进业务人员与软件开发人员之间一致且高效的交流。
当然,UML并不是万能的。在以下情况下,选择UML并不适合。
(1)传统的做法已完全适用,对面向对象技术的要求也不高,项目非常成功,无任何改进的必要。
(2)开发的系统比较简单,直接用源码配上少量的文字就能解决问题,软件开发文档也无须添加图形进行辅助说明。
(3)开发的系统本身不属于OO方法、UML适用的范围。
2.2.2 UML统一历程
UML的诞生经历了一个漫长的历程。从20世纪80年代初期开始,众多的方法学家都在尝试用不同的方法进行面向对象的分析与设计。当时,许多方法开始在一些项目中发挥作用,如Booch、OMT、Shlaer/Mellor、Odell/Martin、RDD、Objectory等方法。到了20世纪90年代中期出现了比较完善的面向对象方法,知名的有Booch 94、OMT 2、OOSE、Fusion等方法,那时面向对象方法已经成为软件分析和设计方法的主流。
当时Booch方法和OMT方法都已经独自、成功地发展成为主要的面向对象方法,随着OMT方法的创始人Jim Rumbaugh加入Grady Booch所在的Rational公司,他们在1994年10月共同合作,将这两种方法统一起来,到1995年形成“统一方法”(Unified Method, UM)版本0.8。随后,OOSE方法的创始人Ivar Jacobson也加入Rational公司,并引入他的用例思想,于是该公司于1996年发布了UML 0.9版本。1997年1月,UML 1.0版本被提交给OMG作为软件建模语言标准化的候选标准。在之后的半年多时间里,一些重要的软件开发商和系统集成商相继成为“UML联盟”成员,如Microsoft、IBM、HP等公司积极地使用UML并提出反馈意见。1997年9月,UML 1.1被提交给OMG,并于1997年11月正式被OMG采纳作为业界标准。之后,UML在OMG的管理下不断发展,相继推出了1.2、1.3、1.4、1.5、2.0、2.1.1、2.1.2、2.2、2.3、2.4、2.4.1、2.5等多个版本,并最终成为经ISO认证的国际标准,其中UML 1.4.2对应于ISO/IEC 19501—2005国际标准,而UML 2.4.1及后续版本对应于ISO/IEC 19505-1—2012(基础结构)和ISO/IEC 19505-2—2012(上层结构)。图2-1展示了UML的产生和发展历程。
图2-1 UML的产生和发展历程
目前,UML主要存在UML 1.x和UML 2两个大的版本系列。UML 1.x主要是指UML 1.0~UML 1.5的这几个版本,版本之间有一些差别,但总体差别不大。而UML 2则是指从2005年正式发布的UML 2之后的各个版本。相比UML 1.x, UML 2的变化很大,首先是结构的调整,从UML 2开始,UML标准被划分为两个相对独立的部分:基础结构和上层结构;其次内容上也有很大的变化,包括底层概念的统一、各种图形的改进和增加等。目前,UML 2已经成为发展趋势,本书采用最新的UML 2.5作为建模语言。
作为一种统一建模语言,UML的统一并不仅仅是三大面向对象方法的统一,还合并了许多面向对象方法中被普遍接受的概念,对每一种概念,UML都给出了清晰的定义、表示法和有关术语。此外,UML还尝试统一几种不同领域等,具体包括以下内容。
(1)开发生命周期:UML对于开发的要求具有无缝性,即在软件开发生命周期的各个阶段都可以采用UML。开发过程的不同阶段可以采用相同的一套概念和表示法,在同一个模型中它们可以混合使用。在开发的不同阶段,不必转换概念和表示法。这种无缝性对迭代的增量式软件开发至关重要。
(2)应用领域:UML适用于各种应用领域的建模,包括大型复杂分布式系统、实时嵌入式系统、集中式数据或计算系统等。当然,也许用某种专用语言来描述一些专门领域更有用,但在大部分应用领域中,UML不比其他的专用语言逊色,甚至更好。
(3)实现语言和平台:UML可应用于各种不同的编程实现语言和开发平台系统。无论是采用Java、C++、C#等程序设计语言和开发工具,还是使用Windows、Linux等不同的操作系统,均可以采用UML进行建模。
(4)开发过程:UML是一种建模型语言,不是对开发过程的细节进行描述的工具。就像通用程序设计语言可以用于许多风格的程序设计一样,UML适用于大部分现有的或新出现的开发过程,尤其适用于类似敏捷过程、统一过程等迭代增量式开发过程。
(5)自身的内部概念:在构建UML元模型的过程中,特别注意揭示和表达各种概念之间的内在联系,并试图用多种适用于已知和未知情况的办法去把握建模中的概念。这个过程会增强用户对概念及其适用性的理解。这不是统一各种标准的初衷,却是统一各种标准所得到的最重要的结果之一。