
2.3.1 视图
UML是用模型来描述系统的结构或静态特征以及行为或动态特征的,它从不同的视角为系统的架构建模形成系统的不同视图(View)。视图是表达系统某一方面特征的UML建模构件的子集。在每一类视图中使用一种或两种特定的图以可视化的方式来表示视图中的各种概念。
按照逻辑观点对应用领域中的概念建模,视图模型被划分成三个视图域,分别为结构分类、动态行为和模型管理。
- 结构分类:描述了系统中的结构成员及其相互关系。类元(Classifier)包括类、用例、构件和节点。类元为研究系统动态行为奠定了基础。类元视图包括静态视图、用例视图、实现视图以及部署视图。
- 动态行为:描述了系统随时间变化的行为。行为利用从静态视图中抽取的瞬间值的变化来描述。动态行为视图包括状态机视图、活动视图和交互视图。
- 模型管理:说明了模型的分层组织结构。包是模型的基本组织单元。特殊的包还包括模型和子系统。模型管理视图跨越了其他视图并根据系统开发和配置组织这些视图。
UML还包括多种具有扩展能力的组件,这些组件包括约束、构造型和标记值,它们适用于所有的视图元素。
现在总结一下,在UML中主要包括的视图为静态视图、用例视图、交互视图、实现视图、状态机视图、活动视图、部署视图和模型管理视图。物理视图对应于利用自身的实现结构建模,例如系统的构件组织和建立在运行节点上的配置。由于实现视图和部署视图都是反映了系统中的类映射成物理构件和节点的机制,可以将其归纳为物理视图。下面分别对静态视图、用例视图、交互视图、状态机视图、活动视图、物理视图和模型管理视图等视图进行简要的介绍。
1.静态视图
静态视图是对应用领域中的各种概念以及与系统实现相关的各种内部概念进行的建模。静态视图主要是由类与类之间的关系构成,这些关系包括:关联、泛化和依赖关系,依赖关系具体可以再分为使用和实现关系。可以从以下三个方面来了解静态视图在UML中的作用。
首先,静态视图是UML的基础。模型中静态视图的元素代表的是现实系统应用中有意义的概念,这些系统应用中的各种概念包括真实世界中的概念、抽象的概念、实现方面的概念和计算机领域的概念。比如说,一个图书管理系统由下列各种概念构成:图书馆、图书、图书管理员、借阅者、图书借阅信息等。静态视图描绘的是客观世界的基本认知元素,是建立一个系统中所需概念的集合。
其次,静态视图构造了这些概念对象的基本结构。静态视图不仅包括所有的对象数据结构,同时也包括对数据的操作。根据面向对象的观点,数据和对数据的操作是紧密相关的,将数据和对数据的操作可量化为类。比如,图书对象可以携带数据:出版社、出版日期、图书编号、图书的价格,还包含对图书基本信息的操作,比如以一定倍数计算丢失图书的索赔价格等。
最后,静态视图也是建立其他动态视图的基础。静态视图用离散的模型元素描述具体的数据操作,尽管不包括对具体动态行为细节的描述,但是这些元素是类所拥有并使用的元素,使用和数据同样的描述方式,只是在标识上进行区分。静态视图要建立的基础就是说清楚在进行交互作用的是什么以及怎样进行的,如果无法说清楚这些,那么也就无从构建静态视图。
静态视图的基本元素是类元和类元之间的关系。类元是描述事物的基本建模元素,静态视图中的类元包括类、接口和数据类型等。为了方便理解和可重用性,大的单元必须由较小的单元组成。通常使用包来描述拥有和管理模型内容的组织单元。任何元素都可被包所拥有。可以通过拥有完整的系统视图的包来了解整个系统的构成。对象是从构造的系统的包中分离出来的离散单元,是对类的实例化,所谓实例化是指将对象设置为一个可识别的状态,该状态拥有自己独立的实体,其行为能被触发。类元之间的关系有关联关系、泛化关系和依赖关系,依赖关系具体可以再分为使用和实现关系。
静态视图的可视化表达的图主要包括类图。有关类图的详细内容,我们将在后面进行介绍。
2.用例视图
用例视图描述了系统的参与者与系统进行交互的功能,是参与者所能观察和使用到的系统功能的模型图。一个用例是系统的一个功能单元,是系统参与者与系统之间进行的一次交互作用。当用例视图在系统的参与者面前出现时,用例视图捕获了系统、子系统和用户执行的操作。它将系统描述为系统的参与者对系统有用功能的需求,这种需求的交互功能被称为用例。用例模型的用途是标识出系统中的用例和参与者之间的联系,并确定什么样的参与者执行了哪个用例。用例使用系统与一个或多个参与者之间的一系列消息来描述系统所进行的交互作用。系统参与者可以是人,也可以是外部系统或外部子系统等。
图2-2是一个网上招聘系统的用例视图。这是一个精简的例子,但却包含了系统是什么、用户是什么、各种用户在这个系统中做什么事情等内容。

图2-2 用例视图举例
用例视图使用用例图来进行表示。我们将在后面介绍用例图的细节内容。
3.交互视图
交互视图描述了执行系统功能的各个角色之间相互传递消息的顺序关系,是描绘系统中各种角色或功能交互的模型。交互视图显示了跨越多个对象的系统控制流程。通过不同对象间的相互作用来描述系统的行为,描述的方式有两种:一种是以独立的对象为中心进行描述的;另外一种方式是以相互作用的一组对象为中心来进行描述的。以独立的对象为中心进行描述的方式被称为状态机,它描述了对象内部的深层次行为。以相互作用的一组对象为中心进行描述的方式被称为交互视图,它适合于描述一组对象的整体行为。通常来讲,这一整体行为代表了做什么事情的一个用例。交互视图的一种形式表达了对象之间是如何协作完成一个功能,也就是所谓的协作图的形式。交互视图的另外一种表达形式反映了执行系统功能的各个角色之间相互传递消息的顺序关系,也就是所谓的序列图的形式,这种传递消息的顺序关系在时间上和空间上都能够有所体现。
总之,交互视图可运用两种图的形式来表示:序列图和协作图,它们各有自己的侧重点。序列图和协作图的细节内容将在后面进行介绍。
4.状态机视图
状态机视图是通过对象的各种状态建立模型来描述对象随时间变化的动态行为。状态机视图也是通过不同对象间的相互作用来描述系统的行为,所不同的是它是以独立的对象为中心进行描述的。在状态机视图中,每一个对象都拥有自己的状态,这些状态之间的变化是通过事件进行触发的。对象被看作是通过事件来触发并做出相应的动作来与外界的其他对象进行通信的独立实体。事件表达了对象可以被使用或操作,同时也反映了对象状态的变化。可以把任何会影响对象状态变化所发生的事情称为事件。状态机是由描述对象状态的一组属性和描述对象变化的动作所构成的。
状态是使用类的一组属性值来进行标识的,这组属性根据所发生的不同事件而进行不同的反应(或响应),从而标志对象的不同状态。处于相同状态的对象对同一事件具有相同的反应,处于不同状态下的对象会通过不同的动作对同一事件做出不同的反应。
状态机同时还包括用于描述类的行为事件。对一些对象而言,一个状态代表执行的一步。
状态机视图是一个对象对自身所有可能状态的模型图。一个状态机由该对象的各种状态以及连接这些状态的符号所组成。每个状态对一个对象在其生命周期中满足某种条件的一个时间段建模。当一个事件发生时,它会触发状态间的转换,导致对象从一种状态转化到另一种新的状态。与转换相关的活动执行时,转换也同时发生。有关状态机用状态图来表达状态图的细节内容,我们将在后面进行介绍。
5.活动视图
活动视图是一种特殊形式的状态机视图,是状态机的一个变体,用来描述执行算法的工作流程中涉及的活动。通常活动视图用于对计算流程和工作流程建模。活动视图中的状态表示计算过程中所处的各种状态,活动视图使用活动图来体现对象的活动状态和动作状态。活动图中包含描述对象活动或动作的状态以及对这些状态的控制。
活动图包含对象活动的状态。活动的状态表示命令执行过程中或工作流程中活动的运行。与等待某一个事件发生的一般等待状态不同,活动状态等待计算处理过程的完成。当活动完成时,执行流程才能进入活动图的下一个活动状态。当一个活动的前导活动完成时,活动图的完成转换被触发。活动状态通常没有明确表示出引起活动状态转换的事件,当出现闭包循环时,活动状态会异常终止。
活动图也包含对象的动作状态,它与活动状态有些类似,不同的是动作状态是一种原子活动操作(即不可分的活动操作),并且当它们处于活动状态时不允许发生转换。
活动图还包含对状态的控制,这种控制包括对并发的控制等。并发线程表示能被系统中的不同对象和人并发执行的活动。在活动图中通常包含聚合和分叉等操作。在聚合关系中每个对象有它们自己的线程,这些线程可以并发执行。并发活动可以同时执行也可以顺序执行。活动图能够表达顺序流程的控制,还能够表达并发流程的控制,单纯地从表达顺序流程这一点上说,活动图和传统的流程图很类似。
活动图不仅可以对事物进行建模,也可以对软件系统中的活动进行建模。活动图可以很好地帮助人们理解系统高层活动的执行过程,并且在描述这些执行过程中不需要去建立协作图所必须的消息传送细节,可以简单地使用连接活动和对象流状态的关系流表示活动所需的输入输出参数。
6.物理视图
前面所提到的物理视图包含有两种视图,分别是实现视图和部署视图。物理视图对应于自身实现结构的建模,例如系统的构件组织情况以及运行节点的配置等。物理视图提供了将系统中的类映射成物理构件和节点的机制。为了可重用性和可操作性的目的,系统实现方面的信息也很重要。
实现视图将系统中可重用的模块包装成为具有可替代性的物理单元,这些单元被称为构件。实现视图用构件及构件间的接口和依赖关系来表示设计元素(例如类)的具体实现。构件是系统高层的可重用的组成部件。
部署视图表示运行时的计算资源的物理布置。这些运行资源被称为节点。在运行时,节点包含构件和对象。构件和对象的分配可以是静态的,也可以在节点之间迁移。如果含有依赖关系的构件实例放置在不同的节点上,部署视图可以展示出执行过程中的瓶颈。
实现视图使用构件图来表示,部署视图使用部署图来表示。有关构件图和部署图的细节内容,我们将在后面进行介绍。
7.模型管理视图
模型管理视图是对模型自身组织进行的建模,是由自身的一系列模型元素(如类、状态机和用例)构成的包所组成的模型。模型是从某一视角以一定的精确程度对系统所进行的完整描述。模型是一种特殊的包。一个包(Package)还可以包含其他的包。整个系统的静态模型实际上可看成是系统最大的包,它直接或间接包含了模型中的所有元素内容。包是操作模型内容、存取控制和配置控制的基本单元。每一个模型元素包含或被包含于其他模型元素中。子系统是另一种特殊的包。它代表了系统的一个部分,它有清晰的接口,这个接口可作为一个单独的构件来实现。任何大的系统都必须分成几个小的单元,这使得人们可以一次只处理有限的信息,并且分别处理这些信息的工作组之间不会相互干扰。模型管理由包及包之间的依赖组成。模型管理信息通常在类图中表达。