• 您的位置我爱Aspx >> VC.Net >> 第6章 状态机视图
  • 第6章 状态机视图

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

    3. 监护条件

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

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

    4. 完成转换

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

    5. 动作

    当转换被引起时,它对应的动作被执行。动作是原子性的,一般是一个简短的计算处理过程,通常是一个赋值操作或算术计算。另外还有一些动作,包括给另一个对象发送消息、调用一个操作、设置返回值、创建和销毁对象,没有被定义的控制动作用外部语言来进行详细说明。动作也可以是一个动作序列,即一系列简单的动作。动作或动作序列的执行不会被同时发生的其他动作影响或终止。按照UML中的概念,动作的执行时间非常短,与外界事件所经历的时间相比是可以忽略的,因此,在动作的执行过程中不能再插入其他事件。然而,实际上任何动作的执行都要耗费一定时间,新到来的事件必须被安置在一个队列中。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:使用ASP.NET加密口令
    下一篇:迎接CDMA时代吧
  • 相关文章