zoukankan      html  css  js  c++  java
  • uml精粹——10.状态机图

    10.状态机图state machine diagram
      状态机图是常见的描写叙述一个系统行为的技术。

    在面向对象的方法中,为单个类绘制一个状态机图来展示单个对象的生命周期行为。


      见图10.1


      图中显示了管理我不同平常的安全系统的控制类的一个状态机图。它从控制对象被创建时的状态開始:等待状态wait state。

    图中暗示这个为初始伪状态initial pseudostate,尽管不是状态但又一个箭头指向初始状态。
      图中显示控制器可处于3个状态:wait、lock和open。该图还提供规则表示状态间的改变,以转移的形式transition:连接状态的线。
      转移表示从一个状态到还有一个状态。每一个转移有一个由三部分组成的标签:触发信号trigger-signature [守卫条件guard]/活动activity。

    这些部分都是可选的。

    触发信号常常是一单个事件event触发一个潜在的状态改变。guard假设


    有的话,是一个布尔条件,必须是true这个转移才会进行。活动activity是一些在转移过程中进行的行为(behavior executed during the transition)。能够是随意的行为描写叙述behavioral expression。
      假设没有触发信号。表示该转移马上进行。这常常会在活动状态activity state里见到。


      在一个状态中出现一个事件时,你仅仅能进行一个转移。假设你对同一事件进行多个转移,守卫条件必须相互排斥mutually exclusive。假设一个事件出现但没有转移有效,则事件被忽略。


      终于状态表示状态机完毕,暗示删除控制对象。

    记住状态机仅仅能显示对象直接观察或激活的东西。


    【内部活动】internal activities
      状态能够回应事件但不转移can react to events without transitions,使用内部活动internal activity:将事件、守卫、活动放到状态盒子内部去。

      见图10.2


      一个内部互动类似于一个自我转移self-transition:一个循环回到同样状态的转移。
      上图也显示了两个特殊活动:entry或exit。

    entry活动是在你进入一个状态的时候运行;exit活动是在离开的时候运行。

    而内部活动不处罚entry或exit活动。这是内部活动和自我转移的差别。
      
    【活动状态】
      我之前描写叙述的状态中,对象是安静的quiet并等待下个事件来做一些事情。然而。你也可让对象在某些状态里做一些不间断的ongoing工作。

      见图10.3


      图中的搜素状态就是这样一个活动状态:连续的活动是用do/标记的,后面是do-activity。搜索一旦完毕。不论什么没有一个活动的转移都会运行。

    假设cancel时间出如今活动中,则do-activity会被中止。
      do活动和一般活动都表示进行一些行为。

    关键的不同是一般的活动马上出现且不会被一般的事件打断。而do活动会花费有限的事件且可被打断。
      uml1中用action动作表示一般的活动。而用活动actitity仅仅表示do活动。


    【超状态superstate】
      你常常会发现一些状态共享同样的转移和内部活动。你能够把它们弄成子状态,并将共享的行为移到一个超状态。例如以下图,假设你不用子状态的话,你将为这3个状态都绘制一个cancel转移。

      见图10.4.


      
    【并发状态concurrent state】
      状态可被分成多个互补的状态图来同一时候进行。


      见图10.5


      图中还显示了历史伪状态history pseudostate。

    这表示当clock开启后,radio/CD回到clock关掉时的状态。

    而历史伪状态的箭头表示没有历史的时候第一次处于哪个状态。


    【实现状态图】
      可用3种方式实现:嵌套的switch、状态模式、状态表。
      状态模式中创建了一个状态类的层级来处理状态的行为。图中的每一个状态都有一个状态子类。控制器有相应每一个事件的方法。

      见图10.7


      状态表方法将状态图的信息作为数据。
      见图10.1


    【何时用】
      状态机擅长表示一个对象在几个用例中的行为。不擅长描写叙述引入多个对象协作的行为。比方交互图(4章)擅长描写叙述一个用例里几个对象的行为,而活动图(11章)擅长显示多个对象或用例的多个活动的时序。

  • 相关阅读:
    socket通信简介
    存储过程多次遍历
    js动态表格笔记
    Java excel导出笔记
    Eclipse快捷键
    oracle表,视图,存储过程,函数,序列.....查询
    Java基础笔记
    Active MQ学习笔记
    linux svn
    html中submit和button的区别
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7214409.html
Copyright © 2011-2022 走看看