UML2面向对象分析与设计(第2版)
上QQ阅读APP看书,第一时间看更新

2.5 应用UML 2建模

视频讲解

在系统地介绍UML 2概念模型后,本节将结合具体的应用实例,详细介绍各类UML模型图中核心的建模元素及基本建模方法。正如前文所述,UML 2提供了两类(结构图和行为图)14种图形用于系统建模。

◆ 类图:描述类、接口、协作及它们之间的关系。

◆ 对象图:描述对象及对象之间的关系。

◆ 包图:描述包及包之间的相互依赖关系。

◆ 组合结构图:描述系统某一部分(组合结构)的内部结构。

◆ 构件图:描述构件及其相互依赖关系。

◆ 部署图:展示构件在各节点上的部署。

◆ 外廓图:展示构造型、元类等扩展机制的结构。

◆ 顺序图:展示对象之间消息的交互,强调消息执行顺序的交互图。

◆ 通信图:展示对象之间消息的交互,强调对象协作的交互图。

◆ 时间图:展示对象之间消息的交互,强调真实时间信息的交互图。

◆ 交互概览图:展示交互图之间的执行顺序。

◆ 活动图:描述事物执行的控制流或数据流。

◆ 状态机图:描述对象所经历的状态转移。

◆ 用例图:描述一组用例、参与者及它们之间的相互关系。

需要说明的是,早期的UML 1.x只提供了9种图形。包图、组合结构图、外廓图、交互概览图、时间图这5种是在UML 2中新增的(外廓图是在UML 2.3之后才有的);而通信图则是由UML 1.x的协作图改名而来,其他的一些图形也做了适当的调整和扩充。

当然,为了能够有效地画出这些图形,还需要采用相应的CASE工具。目前,市面上有很多种CASE工具用于UML建模。其中比较有名的如IBM公司的Rational系列产品(包括Rational Rose 2003、Rational Software Architect、Rational Rhapsody等)、Sparx Systems公司的Enterprise Architect、Change Vision公司的Astah UML、MKLab公司的StarUML、SAP Technologies公司的PowerDesigner、Microsoft公司的Visio等,此外还有数以百计的各类共享/开源工具。作为UML的创始人,IBM Rational的产品对UML的支持比较全面,本书中部分案例采用早期Rational Rose 2003作为建模工具;然而由于Rational Rose 2003版本较老,而新版的Rational Software Architect又过于庞大、功能过于复杂,不适合教学用途,因此本书中的另一部分案例采用Enterprise Architect 12.0绘制,该工具对UML标准支持非常全面,基本上能满足本书大部分建模需求。读者可以根据自己的情况,选择一种合适的建模工具。

为了能够系统地讲解各类UML图的应用,本节以一个图书馆管理系统为例,对13种UML图(外廓图在第2.4.2小节中已经介绍)的应用进行详细介绍。该图书馆管理系统的原始需求如下所示。

◆ 该系统是一个基于Web的计算机应用系统。

◆ 读者可以查询图书信息及借阅信息。

◆ 读者可以通过系统预约所需的图书。

◆ 图书馆工作人员利用该系统完成读者的借书、还书业务。

◆ 图书馆工作人员可以对图书信息、读者信息等进行维护。

◆ 对于到期的图书,系统会自动向读者发送催还信息。

◆ 管理员会定期进行系统维护。

2.5.1 用例图

对于该图书馆管理系统,首先需要描述其功能。将在UML中采用用例模型(包括用例图和它的规格说明)来进行描述。

用例图(Use Case Diagram)是被称为参与者的外部用户所能观察到的系统功能的模型图,其主要功能如下所示。

◆ 列出系统中的用例和参与者。

◆ 显示哪个参与者参与了哪个用例的执行工作。

用例图中的核心概念包括以下几个。

◆ 用例(Use Case):系统中的一个功能单元,可以被描述为参与者与系统之间的一次交互作用。

◆ 参与者(Actor):通过系统边界与系统进行有意义交互的外部实体。

◆ 泛化:参与者与参与者之间的关系。

◆ 关联:用例与参与者之间的关系。

◆ 扩展、包含、泛化:用例之间的关系。

用例图的推荐使用场合:包括业务建模、需求获取和定义等场合。

表2-2列出了用例图中的主要建模元素(用例图的详细使用将在第4章中介绍)。需要说明的是,由于注解和注解链接在所有的UML图中均可使用,因此本章后面各类图形的建模元素讲解中将不再包含这两个元素。

表2-2 用例图中的主要建模元素

在图书馆管理系统中,读者、工作人员、管理员等作为参与者,可以利用该系统完成借书、还书、预约图书、查询图书、维护图书/读者信息、维护系统等功能单元操作,这些功能单元便构成了一个个的用例。此外,系统定期检测到期图书并发送催还消息,也可以构成一个用例,该用例由系统时间自动启动。该系统的用例图如图2-15所示。

图2-15 图书馆管理系统用例图

通过用例图,我们可以获得用户使用系统的情况,但是具体的使用过程又是怎样的呢?例如,读者到底是怎么预约图书的、工作人员又是如何为读者完成借书操作过程的,用例图中没有展示这些流程信息,这时候开发人员需要编写该用例图文本维度的规格说明——用例文档。用例模型中的每一个用例都需要开发人员为其编写相应的用例文档,有关用例文档的编写规则请参见第4章。

2.5.2 活动图

用例文档描述了用例的业务流程,有些用例的流程比较复杂(如存在分支、循环等复杂结构),只用文本描述这个流程并不直观,且不利于用户之间的沟通。此时,开发人员可以采用活动图来描述该用例内部的执行流程。

活动图(Activity Diagram)是一种动态行为图,将业务流程或其他计算的结构展示为内部一步步的控制流和数据流,主要用于描述某一方法、机制或用例的内部行为。活动图中的核心概念包括以下几个。

◆ 活动、组合活动:表示某个内部的控制逻辑。

◆ 对象、对象流:与活动相关的数据对象。

◆ 转移、分支:控制活动之间的先后顺序。

◆ 并发、同步:支持活动间的并发和同步。

◆ 分区:描述活动的不同参与者。

活动图的推荐使用场合:包括业务建模、需求、类设计等场合。

表2-3列出了活动图中的主要建模元素,活动图的使用细节将在第3章中介绍。

表2-3 活动图中的主要建模元素

图书馆管理系统用例模型中的用例,特别是复杂的用例,均可以用活动图来表示。图2-16展示了借书用例的活动图,开发人员可以把该活动图放在用例文档的“相关图”部分。

图2-16 借书用例活动图

2.5.3 类图、对象图、包图和组合结构图

描述完需求后,本小节对系统进行分析和设计。UML提供了4种静态结构图来描述系统。其中,类图(Class Diagram)是软件的蓝图,用于详细描述系统内各个对象的相关类,以及这些类之间的静态关系;对象图(Object Diagram)用于表示在某一时刻,类的对象的静态结构和行为;包图(Package Diagram)用于展现由模型本身分解而成的组织单元(包)及它们的依赖关系;组合结构图(Composite Structure Diagram)用于描述系统中某一部分(组合结构)的内部结构,包括该部分与系统其他部分的交互点。

静态结构图中的核心概念包括以下几个。

◆ 类图:类、接口、依赖、关联、泛化、实现。

◆ 对象图:对象、链接、多重性。

◆ 包图:包(框架、层、子系统)、依赖。

◆ 组合结构图:组合结构、部件、端口、角色绑定。

静态结构图的推荐使用场合:包括业务建模、分析、设计、实现等场合。

表2-4列出了类图、对象图和包图中的主要建模元素。类图的使用细节将在第5章和第9章中介绍;对象图的使用细节将在第5章中介绍;包图的使用将在第8章中介绍。

表2-4 类图、对象图和包图中的主要建模元素

表2-5列出了组合结构图中的主要建模元素。作为UML 2新增的模型图,目前组合结构图被应用得并不是很广泛。

表2-5 组合结构图中的主要建模元素

对于图书馆管理系统,通过类图可以反映该系统内部的静态结构特征(类和类之间的关系)。图2-17所示的类图就展示了图书类(Book)、借阅信息类(BorrowInfo)、读者类(Reader)之间的静态关系。其中,图书分为不同的类别(Catalog),如科技书(TechBook)、文学书(LitBook)、新书(NewBook),而读者分为学生(Student)和教职工(Faculty)。

图2-17 图书馆管理系统类图

对象图则用于展示某一时刻对象之间的关系。图2-18所示的对象图展示了一名教职工(thbin)的个人借阅信息(myInfo),他一共借了4本书:一本新书(book1)、两本科技书(book2、book3)和一本文学书(book4)。

图2-18 某教职工借阅信息对象图

包图展示了软件系统的分层结构。在图书馆管理系统中,如图2-19左半部分所示,系统高层分为3层,其中界面层负责用户交互;数据访问层负责访问底层信息;业务逻辑层负责协调界面层和数据访问层间的访问逻辑。此外,对于数据访问层内部,又可以采用分包的方式进行逻辑划分,如图2-19右半部分所示,分为借阅包、读者包、图书包。

图2-19 图书馆管理系统包图

作为一种新增图形,组合结构图主要反映的是系统某一部分内部结构的组成。为了完成系统所需的某些功能(如借书),需要几个类之间进行相互协作,而这几个类就构成了一个组合结构。为了完成借书的功能,这些类之间存在着一定的接口(组合结构图中称为端口)和连接,这些信息即可通过组合结构图来反映。图2-20展示了借书过程的组合结构图,为了完成借书的过程,在该图中需要设置借阅用户界面类(BorrowUI)、借阅控制类(BorrowCtrl)、借阅信息类(BorrowInfo)、读者类(Reader)和图书类(Book)。

图2-20 借书过程的组合结构图

2.5.4 顺序图

分析完静态结构后,本小节描述对象之间的动态交互行为,需要用到动态交互图,而顺序图就是一种最常用的动态交互图。顺序图(Sequence Diagram)用于显示对象间的交互活动,它关注对象之间消息传送的时间顺序。顺序图中的核心概念包括以下几个。

◆ 对象、生命线、执行发生、消息。

◆ 交互片段(Interaction Frame):UML 2中的新增概念,用于封装交互图中的片段,并可对片段施加一定的操作(如选择、循环、并行等),从而使UML支持复杂的交互建模。

顺序图的推荐使用场合:包括用例分析、用例设计等场合。

表2-6列出了顺序图中的主要建模元素,顺序图的使用细节将在第5章中介绍。

表2-6 顺序图中的主要建模元素

图2-21所示的顺序图描述的是为了完成借书的过程,系统中的对象是如何进行交互的。

图2-21 完成借书过程的顺序图

图2-21是UML 1.x版本的顺序图,可以看到,其中的第2步“录入图书信息”是一个循环的过程,第2.1.1步存在一个选择(如果失败了该怎么做),而这些信息无法直接在图中描述(只能通过注解或标记的方式表示)。为此,UML 2引入了交互片段的概念来解决这个问题,通过交互片段可以很方便地实施各种复杂的逻辑,如图2-22所示(loop操作表示循环、alt操作表示选择)。

图2-22 使用交互片段后的借书过程顺序图

2.5.5 交互概览图

当一个用例内部的交互行为非常复杂时,通过一个顺序图可能无法很好地表示出来,这时候可能会把该用例的行为拆分成几个顺序图。此时,这几个顺序图之间的关系就可以通过交互概览图来描述。交互概览图(Interaction Overview Diagram)是活动图和顺序图的混合体,它将直观地表达一组相关顺序图之间的流转逻辑。交互概览图中的核心概念包括以下几个。

◆ 交互片段。

◆ 起点、终点、决策、转移。

交互概览图的推荐使用场合:包括用例分析、用例设计等场合。

表2-7列出了交互概览图中的主要建模元素。

表2-7 交互概览图中的主要建模元素

作为UML 2新增的模型,交互概览图的使用场合并不多,而且目前许多支持UML 2建模的工具也不支持该图的建模。图2-23展示了某读者使用系统的一段流程,其中每个交互片段内部对应另外一个顺序图,通过ref算子来引用。

图2-23 某读者使用系统的一段流程图

2.5.6 通信图

在展示对象交互图时,顺序图侧重描述交互的先后顺序,而交互对象之间的关系并不能体现出来,通信图则是从另外一个视角来描述对象交互的交互图。

通信图(Communication Diagram),在UML 1.x中称为协作图(Collaboration Diagram),表示一组对象之间的关系及交互活动。通信图和顺序图是同构的(描述的能力相同,很多工具提供了自动相互转换功能),只是侧重点不同。通信图中的核心概念包括以下几个。

◆ 对象、协作角色。

◆ 协作、交互、消息。

通信图的推荐使用场合:包括用例分析、用例设计等场合。

表2-8列出了通信图中的主要建模元素,通信图的使用细节将在第6章中介绍。

表2-8 通信图中的主要建模元素

图2-24所示的通信图描述的是为了完成借书的过程,系统中的对象是如何进行交互的(该图与图2-21的顺序图所描述信息完全相同,可以体会一下它们的不同点)。

图2-24 完成借书过程的通信图

2.5.7 时间图

对于一些特定的系统(如实时系统),有时候真实的时间信息非常重要(如某个消息在发送出去后,在1s之内必须返回), UML 2引入了新的时间图来描述时间信息。

时间图(Timing Diagram)是一种交互图,用于展现消息跨越不同对象或角色时真实的时间信息,可描述单个或多个对象状态变化的时间点及维持特定状态的时间段。此外,顺序图作为表示交互的主要手段,也可以在其中增加时间约束来表明对象状态变化的时间点及维持特定状态的时间段。时间图中的核心概念包括以下几个。

◆ 时间约束、持续时间约束、生命线。

◆ 状态、条件、事件。

表2-9列出了时间图中的主要建模元素。作为一种新增的UML图形,目前大部分建模工具都不支持时间图的建模。

表2-9 时间图中的主要建模元素

作为一种全新的UML模型,目前时间图还没有得到广泛推广。此处以打电话的场景为例,说明时间图的使用方法。在打电话的过程中,电话机处于不同的状态(如空闲、拨号音、拨号、连接、通话等);当用户拿起电话后,电话提示拨号音,之后必须在一段时间内完成拨号动作(如30s),否则电话会自动挂起。为了表示这30s的时间顺序,可以通过在顺序图中添加约束来表示,如图2-25所示。

图2-25 添加时间约束的顺序图

涉及这种真实时间信息的交互,采用时间图可以更方便地描述。时间图有两种表示状态的方法,一种是通过直线的方式,另一种是通过区域的方式,分别如图2-26和图2-27所示。

图2-26 打电话过程的时间图(采用直线方式)

图2-27 打电话过程的时间图(采用区域方式)

2.5.8 状态机图

顺序图和通信图都是交互图的一种,它们侧重于描述对象之间的交互过程。然而,有时候对象本身也是很复杂的,它可能涉及不同的状态和行为,此时需要通过状态机图来表示。

状态机图(State Machine Diagram),就是UML 1.x中的状态图(Statechart Diagram),利用状态和事件描述对象本身的行为。它是一种非常重要的行为图,强调事件导致的对象状态的变化。状态机图中的主要概念包括以下几个。

◆ 状态、初态、终态。

◆ 事件、转移、动作。

◆ 并发状态机。

状态机图的推荐使用场合:包括类设计场合。

表2-10列出了状态机图中的主要建模元素,状态机图的使用细节将在第9章中介绍。

表2-10 状态机图中的主要建模元素

在图书馆管理系统中,图书涉及不同的状态:新采购的图书处于“待入库状态”,当工作人员完成新书入库的操作后(如登记图书信息等),该图书的状态就转为“待借状态”,图书借出后即转为“借出状态”,归还后又转为“待借状态”,如此循环。图2-28展示了整个状态演变过程,而这些状态同时会影响它的行为,如在“借出状态”的图书就不允许再借出了。

图2-28 借书对象的状态机图

UML中的动态图主要可以分为交互图和行为图两大类,它们都是非常有价值且容易混淆的,此处简单总结几种动态图的使用方法。它们的共同点有以下几个。

◆ 描述系统中单个或多个事物动态行为特性。

◆ 交互图(顺序图、通信图、交互概览图、时间图)侧重描述事物间的交互过程。

◆ 行为图(活动图、状态机图)侧重描述事物本身的行为特征。

它们的区别主要体现在每种图形的侧重点不同。

◆ 交互图(顺序图、通信图):适合描述单个用例中多个对象之间的协作行为。

◆ 交互概览图:用于描述复杂用例多个顺序图间的控制流程。

◆ 时间图:用于描述时间受控的单个或多个对象间状态交互。

◆ 状态机图:适合描述跨越多个用例的单个对象的行为如何影响该对象的状态。

◆ 活动图:适合描述多个对象跨越多个用例时的总貌。

对于那些常用的UML图形,在后续的章节中,将结合具体的应用场景做更详细的介绍。

2.5.9 构件图和部署图

最后介绍两种实现图,用于描述系统编码和部署时的软件结构。

构件图(Component Diagram)将封装类作为构件,描述在系统实现环境中的软件构件和它们之间的关系。构件图中的主要概念包括以下几个。

◆ 构件、工件、接口(所供接口、所需接口)。

◆ 装配连接、委托连接、依赖。

构件图的推荐使用场合包括系统设计、实现、部署等。

表2-11列出了构件图中的主要建模元素。

表2-11 构件图中的主要建模元素

在图书馆管理系统中,可以定义5个构件(界面、业务逻辑、借阅、读者、图书),这些构件代表实现时的概念(如源代码、目标文件等)。在这些构件中可实现那些设计时的类,其构件图如图2-29所示(由于采用Rose绘制,因此图中的构件采用UML 1.x语法,构件的图符有所不同)。

图2-29 图书馆管理系统构件图

在构件图中,所供接口和所需接口的概念是在UML 2中新引入的(UML 1.x只有接口的概念,特指所供接口),图2-30展示了UML 2中构件的扩展。

图2-30 UML 2中构件的扩展

部署图(Deployment Diagram)描述系统所需的硬件环境的物理结构,以及软件资源在硬件环境中的部署方案。部署图中的主要概念包括以下几个。

◆ 节点、工件、部署规范。

◆ 连接、依赖。

部署图的推荐使用场合:包括系统设计、实施、部署等场合。

表2-12列出了部署图中的主要建模元素,部署图的使用细节将在第8章中介绍。

表2-12 部署图中的主要建模元素

图2-31是图书馆管理系统的部署模型,从图中可以看到,该系统共有4类不同的节点。其中读者客户端面向普通读者提供查询、预约等功能;工作人员前置机面向工作人员用于实现具体的借书、还书业务;后台数据库用于运行系统数据库环境;管理员后台用于帮助管理员实现各种系统维护功能。

图2-31 图书馆管理系统部署图