UML动态建模机制详解

gougouzhang 2010-06-17

UML动态建模机制你是否熟悉,这里和大家分享一下UML动态建模机制方面的知识,相信通过本节的介绍你对UML动态建模机制一定会有全面的认识。下面就是详细介绍。

UML动态建模机制软件工程

UML动态模型包括状态模型、顺序模型、协作模型和活动模型,通常以状态图、顺序图、协作图和活动图来表示。其中,顺序图和协作图通常合起来称为交互图。状态模型关注一个对象的生命周期内的状态及状态变迁,以及引起状态变迁的事件和对象在状态中的动作等。顺序模型和协作模型强调对象间的合作关系,通过对象间的消息传递以完成系统的用例。活动图用于描述多个对象在交互时采取的活动,它关注对象如何相互活动以完成一个事务。

一、消息

在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的。在UML的4个动态模型中均用到消息这个概念。通常,当一个对象调用另一个对象中的操作时,即完成了一次消息传递。当操作执行后,控制便返回到调用者。对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。在UML中,消息的图形表示是用带有箭头的线段将消息的发送者和接收者联系起来,箭头的类型表示消息的类型。

UML定义的消息类型有三种:
(1)简单消息(simplemessage)表示简单的控制流。用于描述控制如何在对象间进行传递,而不考虑通信的细节。
(2)同步消息(synchronousmessage)表示嵌套的控制流。操作的调用是一种典型的同步消息。调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后,调用者才可继续执行自己的操作。
(3)异步消息(asynchronousmessage)表示异步控制流。调用者发出消息后不用等待消当息的返回即可继续执行自己的操作。异步消息主要用于描述实时系统中的并发行为。
可以将一个简单消息和一个同步消息合并成一个消息,原同步消息的箭头和简单消息的箭头分别放在合并后的消息两端。这样的消息意味着操作调用一旦完成就立即返回。

二、顺序图

UML动态建模机制中顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。顺序图存在两个轴:水平轴表示不同的对象,垂直轴表示时间。在顺序图中,对象用一个带有垂直虚线的矩形框表示,在矩形框内标有对象名和类名。垂直虚线称为对象的生命线,代表在对象之间的交互作用中该对象的生命期。在生命线上的窄矩形条被称作激活(activation),表示该对象正在执行某个操作。激活矩形的长度表示计划的持续时间,既可以直接执行,也可以通过下级过程执行。矩形条的顶部表示动作的开始,底部表示动作的结束。两根对象的生命线之间的箭头表示消息。消息的箭头形状指明消息的类型是发送还是返回。消息按发生的时间顺序从上到下排列。每个消息旁标注消息名,也可加上参数并标注一些控制信息。返回自身生命线的消息箭头叫回授(selfcall),表示对象发送消息给自己。
控制信息由两种。第一种是条件控制信息,说明在什么情况下才会发送信息(例如,在[needsToReorder()=true]的条件下),消息仅当条件为真时才会被发送。第二种是重复控制信息,表示消息多次发送给多个作为接收者的对象。这种控制信息通常在当一个对象向某个对象集合中的每一个对象逐个地发送消息时使用(例如*prepare())。

交互图是一种非常简单扼要的可视化图解,这也正是交互图的优势。同时也可看到,顺序图比较适合交互规模较小的可视化图解,如果对象很多,交互又很频繁,则会使顺序图变得复杂起来,这是顺序图的一个弱点。在顺序图中可以使用返回(return)消息,表示从消息处理中返回,而不是一个新消息。为了画图清晰,经常将返回消息省略掉。一般的对象放在图的顶部,但还有一种特殊的消息new是创建一个对象消息,由于该消息而创建的对象放在图中中间位置合适的地方。在面向对象程序设计中,总体的控制流程往往是难以理解的。一个好的设计应当将很多小方法放入不同的类中,并且随时能巧妙地指出总体的行为顺序,这样可以十分有效地帮助你加速了解代码。对于首次接触面向对象程序设计的人来说尤其是如此,顺序图可以帮助你看清行为的次序。

三、协作图

UML动态建模机制中交互图的第二种形式是协作图。协作图也是用来描述对象与对象之间的消息连接关系的,但是它更侧重于说明哪些对象之间有消息传递,而不像顺序图那样侧于在某种特定的情形下对象之间传递消息的时序性。在协作图中,对象同样是用一个对象图符号来表示,箭头表示消息发送的方向,而消息的执行顺序则由消息的编号来标明。
与顺序图中从上而下的生命线相比,通过编号来看消息执行的时间顺序显然要困难得多。但是,协作图中对象间灵活的空间布局使我们可以更方便地展示另外一些有用信息,不同的软件工程师可能偏好不同形式的交互图。例如,有些人喜欢使用顺序图,因为顺序图突出使用执行的时序,能更方便地看出事情发生的次序;有些人更喜欢协作图,因为协作图的布局方法能更清楚的表示出对象之间静态的连接关系。那么如何选择呢?一个最基本的原则是用哪种图更简明清楚,则选用哪种图。

四、状态图

UML动态建模机制中状态图(StateDiagram)用来描述一个特定对象的所有可能状态及其引起状态转移的事件。大多数面向对象技术都用状态图表示单个对象在其生命周期中的行为。一个状态图包括一系列的状态以及状态之间的转移。所有对象都具有状态,状态是对象执行了一系列活动的结果。当某些事情发生后,对象的状态将发生变化,称改变对象状态的事情为“事件”,状态图用来显示对象对事件的反应以及对象状态的改变。状态图中定义的状态有初态、终态、中间状态和复合状态。其中,初态是状态图的起始点,而终态则是状态图的终点。一个状态图只能有一个初态,而终态则可以有多个。初态用一个黑圆点表示,终态用黑圆点外加一个圆表示(很像一只牛眼)。状态图中的状态用一个圆角四边形表示。状态之间为状态转换,用一条带箭头的线表示。引起状态转换的事件可以用状态转换线旁边的标签表示。当事件发生时,状态转换开始。

一个状态一般包含三个部分,第一部分为状态的名称;第二部分为可选的状态变量的变量名和变量值,这部分是可选的;第三部分为可选的活动表,列出有关事件和活动。在活动表中,常常使用下面三种标准事件即entry(进入)、exit(退出)和do(做)。entry事件用来指定一个状态的活动,exit事件用来指定退出一个状态的活动,do事件用来指定在该状态下的活动。
活动部分的语法如下:
事件参数表“/”活动表达式
事件可以是任何事件,包括上述3种标准事件。活动表达式用来指定应该进行何种活动。有时还需要为事件指定一些参数。
状态图中状态之间带箭头的连线被称为转移。状态的变迁通常是由事件触发的,此时应在转移上标出触发转移的事件表达式。如果转移上未标明事件,则表示在源状态的内部活动执行完毕后自动触发转移。

转移的语法表示如下:
事件说明[守卫条件]/动作表达式
其中,事件说明的语法为:事件名{参数}
守卫条件是状态转移的一个布尔表达式。如果将守卫条件和事件说明放在一起使用,则当且仅当事件发生且布尔表达式成立时状态才发生转移。如果状态转移只有守卫条件这一个条件,则只要守卫条件为真,状态就发生转移。动作表达式是一个过程表达式,当状态转移开始时执行。转移中使用的术语是“动作”,而在状态中使用的术语是“活动”。尽管它们都是一种过程,都是由对象中的方法实现,但是处理它们的方式有所不同。动作与转移关联,能被极快处理且不会被中断。活动和状态关联,持续时间长且可以被一些事件中断。
转移中的事件表示输入,当状态中的活动完成后,并且当相应的输入事件发生时,转移才会发生。有的转移上没有标明引发转移的条件的事件,则表示状态中的活动一旦完成,转移不需要等待任何输入,便立即发生转移。
“空闲”状态,把状态变量timer的值置为0,然后递增timer的值,直到“上行”或“下行”事件发生或守卫条件“timer=超时值”为真,触发状态转换。
状态图适合于描述跨越多个用例的单个对象的行为,而不适合于描述多个对象之间的状态图确实有用,但不要对系统中的每个类都画出它的状态图。从理论上讲,如果能刻画每个类的状态图,就可以准确描述每个类的动态行为。但是这样要花费大量精力,而且也没有必要。事实上,我们关心的是某些关键类的行为,为此为这些类建立状态图可以
帮助我们理解所研究的问题,在这种情况下才有必要绘制状态图。

五、活动图

相关推荐