UML软件建模任务驱动教程(第2版)
上QQ阅读APP看书,第一时间看更新

知识疏理

在开发一个系统之前,不可能全面理解系统每个环节的需求,随着系统复杂性的增加,先进的建模技术越来越重要。开发系统时,开发人员如何与用户沟通,以了解系统的真实需求?开发人员之间如何沟通,以确保各个部分能够无缝地协作?解决这些问题就需要为系统建立模型。

1. 建立软件模型的重要性

建立软件模型,软件开发人员可以将重点放在建立映射商业数据和功能需求模型的对象上,然后客户、项目经理、系统分析员、技术支持专家、软件工程师、系统部署人员、软件质量保证工程师及整个团队就可以运用这些软件模型完成各种任务。客户和项目经理根据软件模型中的用例图获取系统的高级视图以及确定项目范围,项目经理根据用例图和文档可以将复杂的项目分解成多个便于管理的小项目,系统分析员和客户根据用例文档了解系统具有的功能,技术支持专家使用用例文档编写出用户手册和培训方案,系统分析员和软件工程师应用顺序图和通信图可以了解系统的逻辑流程、系统中的对象以及这些对象之间流通的信息,软件质量保证工程师根据用例文档、顺序图和通信图可以获取软件测试所需的信息,开发人员利用类图和状态机图可以获取系统组成部分的细节以及它们之间的关系,部署人员根据构件图和部署图可以知道所生成的执行文件、DLL文件和其他构件以及这些构件的部署位置,而整个开发团队根据软件模型可以确保编码过程遵循规定的开发标准。

建立软件模型具有以下功能。

(1)可以简化系统的设计和维护,使之更容易理解。

(2)便于开发人员展现系统。

(3)允许开发人员指定系统的结构或行为。

(4)提供指导开发人员构造系统的模板。

(5)记录开发人员的决策。

软件开发人员建立软件模型,可以借助于一套标准化的图形图标,站在更高的抽象层次上分析复杂的软件问题。软件开发人员利用软件模型,创建软件系统的不同图形视图,然后逐步添加模型细节,并最终将模型完善成实际的软件实现。

建模不是复杂系统的专利,小型软件开发也可以从建模中受益。但是,越庞大复杂的项目,建模的重要性越大。开发人员之所以在复杂的项目中建立模型,是因为没有模型的帮助,他们不可能完全地理解项目。

通过建模,人们可以每次将注意力集中在某个方面,使得问题变得容易。每个项目可以从建模中受益,甚至在自由软件领域,模型可以帮助开发小组更好地规划系统设计,更快地开发。所有受人关注的有用系统都有一个随着时间的推移越来越复杂的趋势。如果不建立模型,失败的可能性就和项目的复杂度成正比。

对比项目的复杂度会发现,越简单的项目,使用规范建模的可能性越小。实际上,即便是最小的项目,开发人员也要建立模型。

2. UML的功能

从普遍意义上说,UML是一种语言。语言的基本含义是一套按照特定规则和模式组成的符号系统,能被熟悉该符号系统的人或物使用。自然语言用于熟悉该语言的各人群之间的交流,编程语言用于编程人员与计算机之间进行交流。机械制图也是一种语言,它用于工程技术人员与工人之间的交流。UML作为一种建模语言,则用于系统开发人员之间、开发人员与用户之间的交流。UML主要有以下功能。

(1)为软件系统建立可视化模型

UML符号具有良好的语义,不会引起歧义。UML为系统提供了图形化的可视模型,使系统的结构变得直观、易于理解;用UML为软件系统建立的模型不但有利于交流,还有利于软件维护。

模型是什么?模型是对现实的简化和抽象。对于一个软件系统,模型就是开发人员为系统设计的一组视图。这组视图不仅简述了用户需要的功能,还描述了怎样实现这些功能。

(2)规约软件系统的产出

UML定义了在开发软件系统过程中需要做的所有重要的分析、设计和实现决策的规格说明,使建立的模型准确、无歧义并且完整。

(3)构造软件系统的产出

UML不是可视化的编程语言,但它的模型可以直接对应多种编程语言。例如,可以由UML的模型生成Java、C++、Visual Basic等语言的代码,甚至还可以生成关系数据库中的表。从UML模型生成编程语言代码的过程称为正向工程,从编程语言代码生成UML模型的过程称为逆向工程。

(4)为软件系统的产出建立文档

UML可以为系统的体系结构及其所有细节建立文档。

3. UML的组成

UML由视图(view)、图(diagram)、模型元素(model element)和通用机制(general mechanism)等几个部分组成。

(1)视图

视图是表达系统某一方面特征的UML建模元素的子集,视图并不是具体的图,它是由一个或多个图组成的对系统某个角度的抽象。在建立一个系统模型时,只有定义多个反映系统不同方面的视图,才能对系统做出完整、精确的描述。在机械制图中,为了表示一个零部件的外部形状或内部结构,需要通过主视图、俯视图和侧视图分别从零部件的前面、上面和侧面进行投影。UML的视图也是从系统的不同角度建立模型,并且所有的模型都是反映同一个系统。UML包括5种视图:用例视图、逻辑视图、并发视图、组件视图和部署视图。

(2)图

图是模型元素的图形表示,视图由图组成,UML 2.0以前常用的图有9种,把这几种基本图结合起来就可以描述系统的所有视图。这9种图分为两类,一类是静态图,包括用例图、类图、对象图、组件图和部署图;另一类是动态图,包括顺序图、通信图、状态机图和活动图。UML 2.0又新增加了几种图,主要有包图、定时图、组合结构图和交互概览图, UML 2.0的图共有13种。包图在UML 2.0之前已经存在,状态机图由状态图改名而来,通信图由协作图改名而来。

(3)模型元素

模型元素是构成图最基本的元素,它代表面向对象中的类、对象、接口、消息和关系等概念。UML中的模型元素包括事物和事物之间的联系,事物之间的关系能够把事物联系在一起,组成有意义的结构模型。常见的联系包括关联关系、依赖关系、泛化关系、实现关系和聚合关系。同一个模型元素可以在几个不同的UML图中使用,不过同一个模型元素在任何图中都保持相同的意义和符号。

(4)通用机制

通用机制用于为模型元素提供额外信息,如注释、模型元素的语义等。另外,UML还提供了扩展机制,UML中包含3种主要的扩展组件:构造型、标记值和约束,使UML能够适应一个特殊的方法/过程、组织或用户。

4. UML的图

每一种UML的视图都是由一个或多个图组成的,图就是系统架构在某个侧面的表示,所有的图一起组成了系统的完整视图。UML 2.0以前提供了9种图,用例图描述系统的功能,类图描述系统的静态结构,对象图描述系统在某个时刻的静态结构,组件图描述实现系统元素的组织,部署图描述环境元素的配置,顺序图按时间顺序描述系统元素的交互,通信图按照时间和空间顺序描述系统元素间的交互和它们之间的关系,状态机图描述系统元素的状态条件和响应,活动图描述系统元素的活动。UML的图的类型及功能描述详如表1-1所示。

表1-1 UML图的类型及功能描述

38583-00-024-1
38583-00-025-1

表1-1中UML的9种图可以按其功能和特征,划分为5种类型。

(1)用例图:从用户角度描述系统功能,并指出各功能的参与者。

(2)静态图:包括类图、对象类。其中类图描述系统中类的静态结构。类图不仅定义系统中的类,表示类之间联系(如关联、依赖和聚合等),也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期中都是有效的。对象图是类图的实例,使用与类图几乎相同的标识。它们的不同点在于对象图显示类的多个对象实例,而不是实际的类,一个对象图是类图的一个实例,对象图只能在系统某一个时间段内存在。

(3)行为图:包括状态机图和活动图,用于描述系统的动态模型和组成对象之间的交互关系。其中状态机图描述类的对象所有可能的状态以及事件发生时,状态的转移条件。通常,状态机图是对类图的补充。实际上并不需要为所有类绘制状态机图,只需要为那些有多个状态、其行为受外界环境的影响并且发生改变的类绘制状态机图。活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。

(4)交互图:包括顺序图和通信图,用于描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;通信图描述对象之间的协作关系,除了显示信息交换外,还显示对象以及它们之间的关系。

(5)实现图,包括组件图和部署图。其中组件图描述组件的结构及各组件之间的依赖关系。一个组件可能是一个资源代码组件、一个二进制组件或一个可执行组件。它包含逻辑类或实现类的有关信息。组件图有助于分析和理解组件之间的相互影响程度。部署图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可以显示连接的类型及组件之间的依赖性。在节点内部,放置可执行组件和对象,以显示节点与可执行软件单元的对应关系。

从应用角度来看,采用面向对象技术设计系统的步骤如下。

(1)描述用户需求,建立用例图。

(2)根据需求建立系统的静态模型,以构造系统的结构,建立类图(包含包)、对象图、组件图和部署图等静态模型。

(3)描述系统的行为,建立状态机图、活动图、顺序图和通信图,表示系统执行时的顺序状态或者交互关系。

UML 2.0新增了几种模型图:时序图、包图、组合结构图和交互概况图,使模型图的数量达到13种,并且进一步加强了某些图的表达能力,同时也增加了其复杂性。

UML 2.0中的状态机图由UML1.4中的状态图改名而来,通信图由协作图改名而来,包图虽然是新的模型图,但在UML1.4中已经存在,只是在UML 2.0中正式作为一种模型图。

UML 2.0新增的模型图说明如下。

包图可以作为类图和其他几种模型图的组织机制,使之更便于阅读,系统规模比较大时使用包图。组合结构图是UML 2.0新增加的一种模型视图,用来表示类、组件、协作等模型元素的内部结构。交互概览图是活动图的一个变种。顺序图着重于消息的次序,通信图显示参与者之间的链接,而时序图主要考虑交互的时间。

本书采用UML 2.0中图的名称,重点介绍用例图、类图、对象图、状态机图、顺序图、通信图、活动图、组件图和部署图的功能与绘制方法。

5. UML的视图

UML用来描述模型,用模型来描述系统的结构或静态特征,以及行为或动态特征。

随着系统复杂性的增加,建模成了必不可少的工作。在理想情况下,系统由单一的图形来描述,该图形明确地定义了整个系统,并且易于人们相互交流和理解。然而,单一的图形不可能包含系统所需的所有信息,更不可能描述系统的整体结构。一般来说,系统通常是从多个不同的方面来描述。

(1)系统的实例。实例从系统外部参与者的角度描述系统的功能。

(2)系统的逻辑结构。逻辑结构描述系统内容的表示结构和动态行为,即从内部描述如何设计实现系统功能。

(3)系统的并发特性。描述系统的并发性,解决并发系统中存在的各种通信和同步问题。

(4)系统的构成。描述系统由哪些构件组成。

(5)系统的部署。描述系统的软件和硬件设备之间的配置关系。

在UML中,模型通过视图来描述系统的不同侧面,通过图描述将要建立系统的模块,视图并不是图。每个视图描述系统某一方面的特征,这样一个完整的系统模型就由许多视图从不同的角度来共同描述,系统才可能被精确定义。UML中的视图分为5种:用例视图、逻辑视图、并发视图、组件视图和部署视图。用例视图从用户的角度描述系统应具有的功能;逻辑视图展现系统的静态或结构组成及特征;并发视图体现系统的动态或行为特征;组件视图体现系统实现的结构和行为特征;部分视图体现系统实现环境的结构和行为特征。UML视图的类型及功能描述如表1-2所示。

表1-2 UML视图的类型及功能描述

38583-00-027-1

6. UML的应用

UML的目标是以面向对象的方式来描述任何类型的系统。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如企业机构、业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。UML常应用在以下领域。

(1)信息系统

信息系统是向用户提供信息的存储、检索和提交,处理存储在数据库中的大量数据。

(2)嵌入式系统

嵌入式系统以软件的形式嵌入硬件设备中,从而控制硬件设备的运行,通常为手机、家电或汽车等设备上的系统。

(3)分布式系统

分面式系统是分布在一组机器上运行的系统,使数据很容易从一个机器传送到另一个机器上。

(4)商业系统

商业系统是描述目标、资源、规则和商业中的实际工作。