• 当前位置:首页>>UML语言>>UML基础教程>>uml 状态机视图状态和转换(1)
  • uml 状态机视图状态和转换(1)
  • · 状态

    状态描述了一个类对象生命期中的一个时间段。它可以用三种附加方式说明:在某些方面性质相似的一组对象值;一个对象等待一些事件发生时的一段时间;对象执行持续活动时的一段时间。虽然状态通常是匿名的并仅用处于该状态时对象进行的活动描述,但它也可以有名字。

    在状态机中,一组状态由转换相连接。虽然转换连接着两个状态(或多个状态,如果图中含有分支和结合控制),但转换只由转换出发的状态处理。当对象处于某种状态时,它对触发状态转换的触发器事件很敏感。

    状态用具有圆形拐角的矩形表示。如图 6-2 所示。


    图 6–2 状态

    · 转换

    从状态出发的转换定义了处于此状态的对象对外界发生的事件所做出的反应。通常,定义一个转换要有引起转换的触发器事件、监护条件、转换的动作和转换的目标状态。 表 6 – 2 列出了几种转换和由转换所引起的隐含动作。

    转换的种类

    描述

    语法

    入口动作

    进入某一状态时执行的动作

    entry/action

    出口动作

    离开某一状态时执行的动作

    exit/action

    外部转换

    引起状态转换或自身转换,同时执行一个具体的动作,包括引起入口动作和出口动作被执行的转换

    e(a:T)[exp]/action

    内部转换

    引起一个动作的执行但不引起状态的改变或不引起入口动作或出口动作的执行

    e(a:T)[exp]/action

    表 6–2 转换的种类及隐含动作

    · 外部转换

    外部转换是一种改变活动状态的转换,它是最普通的一种转换。它用从源状态到目标状态的箭头表示,其他属性以文字串附加在箭头旁(如 图 6 – 3 所示)。


    图 6–3 外部转换

    · 2. 触发器事件

    触发器事件是引起转换的事件。事件可以有参数,以供转换的动作使用。如果一个信号有后代,那么信号中的任一个后代都可以引起转换。例如,如果转换将 Mouse Button 作为触发器,那么 Mouse Button Down 可以触发这个转换(如 图 6 – 1 )。

    事件并不是持续发生的,它只在时间的一点上发生。当一个对象接收到一个事件时,如果它没有空闲时间来处理事件,就将事件保存起来。对象一次只处理一个事件,在对象处理事件时转换必须激发,事件过后是不会被记住的(某些特殊的延迟事件除外,在触发一个转换前或处延迟被解除前,这类事件被保存起来)。如果两个事件同时发生,它们被每次处理一个。没有触发任何转换的事件被简单地忽略或遗弃,这并不是一个错误,忽略不想要的事件要比详细指明所有事件容易得多。

    · 3. 监护条件

    转换可能具有一个监护条件,监护条件是一个布尔表达式。监护条件可以引用对象的属性值和触发事件的参数。当一个触发器事件被触发时,监护条件被赋值。如果布尔表达式的值为“真”,那么触发事件即,使转换有效。如果布尔表达式的值为“假”,则不会引起转换。监护条件只能在触发事件发生时被赋值一次。如果在转换发生后监护条件由原来的“假”变为“真”,则因为赋值太迟而不能触发转换。

    从一个状态引出的多个转换可以有同样的触发器事件,但是每个转换必须具有不同的监护条件。当其中一个监护条件满足时,触发器事件会引起相应的转换。通常,监护条件的设置要考虑到各种可能的情况以确保一个触发器事件的发生应该能够引起某些转换。如果有些情况没有考虑到,一个触发器事件没有引起任何转换,那么在状态机视图中要忽略这个事件。一个事件的发生只能同时引起一个转换(在一个控制线程中)。如果一个事件可能引起多个转换,那么其中只有一个转换有效。如果两个相互矛盾的转换同时有效,则无法确定到底发生了哪个转换。这两个转换随机地发生一个,或者由系统的实现细节决定究竟发生哪一个,但是对建模者来说,无法预料这种转换产生的后果。

    · 4. 完成转换

    没有标明触发器事件的转换是由状态中的活动的完成引起的(即完成转换)。完成转换也可以带一个监护条件,这个监护条件是在状态中的活动完成时被赋值的(而不是完成以后)。

     

    [1]

  • 上一篇:uml 静态视图概述
    下一篇:uml 状态机视图状态和转换(2)