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

  • 相关阅读:
    单例模式
    Curator Zookeeper分布式锁
    LruCache算法原理及实现
    lombok 简化java代码注解
    Oracle客户端工具出现“Cannot access NLS data files or invalid environment specified”错误的解决办法
    解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。
    Redis 3.0 Cluster集群配置
    分布式锁的三种实现方式
    maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
    How to Use Convolutional Neural Networks for Time Series Classification
  • 原文地址:https://www.cnblogs.com/jimmyai/p/star_uml_state_machine.html
Copyright © 2011-2022 走看看