1.1 认识UML

UML是面向对象软件的标准化建模语言。UML由于不仅具有简单、统一的特点,而且还能表达软件设计中的动态和静态信息,因此已成为现在诸多领域内建模的首选标准。

1.1.1 UML的发展历程

UML起源于多种面向对象建模方法,而面向对象建模语言最早出现于20世纪70年代中期,到80年代末发展极为迅速。据统计,从1989年至1994年,面向对象建模语言的数量从不到10种增加到50多种。在众多的建模语言中,各类语言的创造者极力推崇自己的语言,并不断地发展完善它。但由于各种建模语言固有的差异和优缺点,使得使用者很难根据应用的特点选择合适的建模语言。

UML是Grady Booch(Booch)、James Rumbaugh (OMT)和Ivar Jacobson(OOSE)智慧的结晶。其中,OMT擅长分析,Booch擅长设计,而OOSE擅长业务建模。James Rumbaugh于1994年离开GE公司加入Booch所在的Rational公司,他们一起研究一种统一的方法。

1995年完成“统一方法(Unified Method)”0.8版。之后Ivar Jacobson加入,吸取了他的用例(Use Case)思想,于1996年完成“统一建模语言”0.9版。

1997年1月,UML版本1.0被提交给OMG(对象管理组织),作为软件建模语言标准化的候选。随后一些重要的软件开发商和系统集成商成为“UML伙伴(UML Partners)”,其中有Microsoft、IBM和HP。经过应用并吸收了开发商和其他诸多意见后,于1997年9月再次提交给OMG,11月7日正式被OMG采纳作为业界标准。

2001年,UML 1.4版本被核准推出。2005年,UML 2.0标准版发布。UML 2.0建立在UML 1.x基础之上,大多数的UML 1.x模型在UML 2.0中都可用,但UML 2.0在结构建模方面有了一系列重大的改进,包括结构类、精确的接口和端口、拓展性、交互片断和操作符,以及基于时间建模能力的增强。

UML版本变更得比较慢,主要因为建模语言的抽象级别高,所以相对而言,实现语言(如C#、Java等)版本变更更加频繁。2010年5月发布了UML 2.3。2012年1月,UML 2.4的所有技术环节已经完成,目前只需等待进入OMG的投票流程,然后将发布为最新的UML规约。同时,UML也被ISO吸纳为标准ISO/IEC 19501和ISO/IEC 19505。UML的发展历程如下图所示。

1.1.2 UML统一的作用

UML的中文含义为统一建模语言。“统一”在UML中具有特殊的作用和含义,主要体现在如下6个方面。

1.方法和表示法方面

在以往出现的方法和表示法方面,UML合并了许多面向对象方法中被普遍接受的概念,对每种概念,UML都给出了清晰的定义、表示法和有关术语。使用UML可以对已有的各种方法建立的模型进行描述,并比原来的方法描述得更好。

2.软件周期方面

在软件开发的生命期方面,UML对开发的要求具有无缝性。开发过程中的不同阶段可以采用相同的一整套概念和表示法,在同一个模型中,它们可以混合使用,而不必转换概念和表示法。这种无缝性对迭代的增量式软件开发至关重要。

3.应用领域方面

在应用领域方面,UML适用于各种领域的建模,包括大型的、复杂的、实时的、分布的、集中式数据或计算的、嵌入式的系统等。

4.编程语言和开发平台方面

在实现的编程语言和开发平台方面,UML可应用于运行各种不同的编程实现语言和开发平台的系统。

5.开发过程方面

在开发过程方面,UML是一种建模语言,不是对开发过程的细节进行描述的工具。就像通用程序设计语言可以进行许多风格的程序设计一样。

6.内部概念方面

在内部概念方面,在构建UML元模型的过程中,应特别注意揭示和表达各种概念之间的内在联系。试图用多种适用于已知和未知情况的办法把握建模中的概念,这个过程会增强对概念及其适用性的理解。这不是统一各种标准的初衷,但却是统一各种标准最重要的结果之一。

1.1.3 UML体系结构

UML从4个抽象层次上对建模语言的概念、模型元素和结构等进行了全面的定义,并规定了相应的表示方法和图形符号,它们分别如下。

□ 元元模型层(Metameta Model) 位于结构的最上层,组成UML的最基本元素“事物(Thing)”,代表要定义的所有事物。

□ 元模型层(Meta Model) 组成UML的基本元素,包括面向对象和面向组件的概念。这一层的每个概念都是元元模型层中“事物”的实例。

□ 模型层(Model) 组成UML的模型,这一层中的概念都是元模型层中概念的实例化。该层的模型通常叫作类模型(Class Model)或类型模型(Type Model)。

□ 用户模型层(User Model) 该层的每个实例都是模型层和元模型层概念的实例。该层中的模型通常叫作对象模型(Object Model)或实例模型(Instance Model)。

上述4层体系结构定义了UML的所有内容。具体来说,UML的核心由视图(Views)、图(Diagrams)、模型元素和通用机制组成。

□ 视图 视图是表达系统某一个方面特征的UML建模元素的子集,它并不是具体的图,而是由一个或多个图组成对系统某个角度的抽象。建造完整个系统时,通过定义多个反映系统不同方面的视图,才能做出完整、精确的描述。

□  图由各种图片组成,用于描述一个视图内容。图并不仅仅是一幅图片,而是在某一个抽象层上对建模系统的抽象表示。UML中共定义了9种基本图,结合这些图可以描述系统所有的视图。

□ 模型元素 UML中的模型元素包括事物和事物之间的联系。事物描述了面向对象概念,如类、对象、消息和关系等。事物之间的联系能够把事物联系在一起,组成有意义的结构模型。常见的联系包括关联关系、依赖关系、泛化关系、实现关系和聚合关系等。

□ 通用机制 通用机制用于为模型元素提供额外信息,如注释、模型元素的语义等,同时它还提供扩展机制,允许用户对UML进行扩展,以便适应特殊的方法、组织或用户。

1.1.4 UML建模流程

了解了UML的体系结构之后,还需要了解一下UML建模的流程,为使用UML建模奠定基础。

进行面向对象软件开发建模时,需要按5个步骤进行,每步都需要与UML进行紧密结合,这5步分别是:需求分析、分析、设计、构造和测试。

1.需求分析

UML的用例图可以表示用户的需求。通过用例建模,可以对外部的角色以及它们所需要的系统功能建模。角色和用例是用它们之间的关系通信建模的。每个用例指定了用户的需求:用户要求系统做什么。

2.分析

分析阶段主要考虑所要解决的问题,可以用UML的逻辑视图和动态视图来描述。在该阶段只为问题域类建模,不定义软件系统解决方案的细节,如用户接口的类、数据库等。

3.设计

在设计阶段,把分析阶段的成果扩展成技术解决方案。加入新的类来提供技术基础结构、用户接口、数据库等。设计阶段结果是构造阶段的详细规格说明。

4.构造

在该阶段中,把设计阶段的类转移成某种面向对象程序设计语言的代码。在对UML表示的分析和设计模型进行转换时,最好不要直接把模型转换成代码。因为在早期阶段,模型是理解系统并对系统进行结构化的手段。

5.测试

系统测试通常分为单元测试、集成测试、系统测试和接受测试几个不同的级别。单元测试是对一个类或一组类进行测试,通常由程序员进行;集成测试通常测试集成组件和类,看它们之间是否能恰当地协作;系统测试验证系统是否具有用户所要求的所有功能;接受测试验证系统是否满足所有需求,通常由用户完成。不同的测试小组可以使用不同的UML图作为工作基础:单元测试使用类图和类的规格说明;典型的集成测试使用组件图和协作图;系统测试则使用用例图来确定系统行为是否符合图中的定义。