zoukankan      html  css  js  c++  java
  • 【StarUML】状态图

       状态图以可视化地方式将对象的各个生命周期展现出来,表现为一个个的状态,状态之间的流转以及流转触发方式、触发条件等。

      image

      例如此,有三个状态,每个圆角矩形代表着一个状态,状态之间通过箭头表示状态流转,箭头上的文字说明表示流转的触发时间和条件。

      1、基本元素

          a、状态(state)

              一个对象,在其生命周期里会执行很多的命令,将这些命令进行归类,就成了一个个的状态,当触发了某些事件,一个状态会流转到下一个状态。

              image
              这就代表着一个状态。

        

        b、初态(initial)和终态(final)

            初态:状态机的起点,它能流转到别的状态,别的状态不能流转到它。

            终态:状态机的重点,代表着对象的声明周期已经结束,只能由别的状态流转到它,它不能流转到任何其他状态。

            image

       c、流转(Transitions)

           流转即状态之间的变化,在StarUML里用箭头表示,触发状态的流转一定是出现了某个事情,所以流转箭头上一定包含触发事件,除此之外还会包含其他一些元素

           (1) 事件标识  它可以是一个信号、条件变化、时间表达式(调用事件(Call)、变化事件(Change)、时间事件(Time)和信号事件(Singal));

           (2) 警戒条件  当事件发生之后,并不是所有的情况,都会发生状态流转的,还需要满足警戒条件,才能流转

           (3) 结果 状态流转之后发生的事情(状态流转除了导致当前输出的状态变化,还会发生一些其他的结果,这里就是用于补充的)

            image

            一条流转线上,可以增加多个,前提是 警戒条件和结果是一致的,如果不一致需要重新画

           image

           添加多个事件的方法

           image

           添加结果的方法

           image

           添加警戒条件是在属性里添加的

           image

      

        d、动作(State Action)

            动作分为进、出两个动作,这是状态机一个非常强大的地方,对象在进入某个状态的时候,在进动作里初始化一些变量,构建该状态中命令集合的运行环境,而在出动作里,可以打扫战场,清理一些变量,与进动作相呼应

            image

           添加进出动作的方法:双击状态名

           image


        e、自身转移(Self-Transitions)

            状态机中状态的转化中,还包含有自身状态转移

            image

            after 2 seconds 是事件,pull 是结果,其实pull 也可以放在waiting状态中的进动作中,不过表意可能就没有放在结果中那么好。

            image 

      

         f、进入节点(Entry Point)、退出节点(Exit Point)

           有的时候,对象没有经过初始化,直接进入到某个状态,叫做进入节点;

           与此相对应的是退出节点,一般用于针对异常情况退出。

          image


    2、高级元素

        a、组合状态(Composed State)

           组合状态就是指状态嵌套,一个状态嵌套在另一个状态里,模块化设计中经常会用到这个。  

        image


        b、历史状态

          历史状态实际上不是一种状态,而是一个逻辑,它的作用对象是组合状态,当组合状态中突然因为某个突发事件跳出了组合状态,进入到外面的状态,当再次进入到组合状态的时候,不是从组合状态的第一个状态走起,而是从上次断掉的状态继续往下走

         image

         如果在组合状态”做饭”中的子状态”做饭”执行的时候,突然累了,跳转到”休息”状态,当休息好了之后,从”休息”状态跳回“做饭”状态的时候,不需要重新开始,即不需要从“准备做饭”开始,而是从“做饭开始”。


        c、并发区域(Concurrent Regions)

            并发区域是针对于组合状态的,对于状态机来说,在一个时刻,对象只允许处于一种状态,如果实际情况下出现两种状态同时运行,那么一般的做法是将两个状态合并成一个组合状态,大状态内部违背状态机的唯一状态的原则,以保证整个系统的遵守原则。并发区域由分叉引出,但不一定要由汇合结束。

           image


    3、案例

        image

        image

      

       本文学习对象:https://blog.csdn.net/heshengfen123/article/details/9361959

  • 相关阅读:
    创建可按比例调整的布局的 Windows 窗体
    Visual C# 2010 实现资源管理器
    Visual C# 2010 实现菜单项和状态栏
    使用异步事件在后台进行计算并报告进度
    A Byte of Python(简明Python教程) for Python 3.0 下载
    面向对象思想
    封装变化(二)
    好玩,看你的博客价值几何?
    基于消息与.Net Remoting的分布式处理架构
    设计之道
  • 原文地址:https://www.cnblogs.com/jimmyai/p/star_uml_state_machine.html
Copyright © 2011-2022 走看看