zoukankan      html  css  js  c++  java
  • 160308-学习State Pattern Actor

    状态机知识

    • 状态A所做的事情
    • 状态B所做的事情
    • AB转换的条件
    • BA转换的条件
    • 结束的条件
    • 在各个转换的过程中所执行的转换动作

    示例程序在此处

    D:Program Files (x86)National InstrumentsLabVIEW 2014ProjectTemplatesSourceActor Framework

    学习文档

    • Process State.lvclass inherits from State Actor.lvclass
      • context actor ,是组成所有状态的操作者的共同的祖先
      • 继承自该类的状态有:Idle.lvclass, Running.lvclass
    • Context actor 特点
      • 所有状态共享的属性
      • 重写Substitute Actor.vi,将属性从一个状态(操作者)转移到另一个状态(操作者)
      • 重写Actor Core.vi
      • 改变状态的方法(method
      • 父操作者能调用的方法,这个方法可以改变状态(?)
      • 调用这些方法的消息类
    • Change State.vi(是 State Actor 的成员)
      • 改变状态的方法(method)会调用Change State.vi
    • Process States.lvlib(状态类,继承自 context actor Process State.lvclass
      • 重写Entry.viExit.vi,这两个函数可以进出状态
      • 随着状态的改变,一些行为会发生变化,重写这些方法
      • 新建这个状态特有的一些行为
      • 调用这些行为的消息类
    • Context actor's state transition methods(定义转换动作)
      • 包括进入转换动作和退出转换动作
      • 创建方法重写 Substitute Actor.vi
      • 创建消息类
    • 当操作者在某一状态,接收到不合适的消息数据类型时会产生错误
      • 可以选择自动丢弃这一数据,且不抛出异常
      • 更改 Do.vi Method
    • 如果你想要更复杂的行为,可以把这个行为函数放置在父类中,这样子类就可以不同地重写这一函数
    • 运行过程
    • 启动系统:将一个初始状态传给Launch Actor.vi
    • 系统的调用者(Caller)发送公共状态转换消息给一个State,间接调用状态转换函数(方法);或者一个State自己直接调用转换函数
    • State Pattern UI.lvclass
      • 这是用户接口,这个操作者启动一个State Pattern Actor, Process States, as a nested actor

    思考

    • 操作者们需要哪些状态?状态图怎么画?
    • 在一个状态中可不可以实现触发执行动作(已证明可以)和周期执行动作?
    • 怎样实现?

    测试

    • 对父类的Go to Idle.vi和子类的 Go to Idle.vi进行断点测试,发现这两个函数并无关系,谁先执行谁后执行,取决于发消息的对象到底发送给了谁。
      • 你会发现父类和子类都有相应函数,但是消息类只有一个(?)
    • 认为可以在响应函数中加入循环,使用通知器等线程同步方法对循环进行控制
    • 每一个拥有状态机模型的对象都可以有这样一个类结构,包括:State UI 类,Process父类,若干个State
      • UI类包括界面和核心函数
      • Process父类包括核心函数(此核心函数没有循环,请注意其程序框图),和状态切换函数,此函数用于切换状态
      • State类,包括近出入状态的函数和状态停留执行函数(当前项目中这个函数为触发型),此函数应该可以改造为周期执行,不过周期执行函数也可以看做为周期触发,即在上一层(调用)函数中设置周期触发逻辑。

    看教科书

    • 在软件模型设计的过程中,画出状态图,就可以依照状态图设计出操作者框架的状态模型。

    边设计边编程

    • 根据当前项目的要求,画出状态图,根据状态图进行设计

  • 相关阅读:
    一套测试题
    静态成员与友元
    grids2742
    [转]CentOS添加第三方yum源
    Linux软件包管理
    类的基本概念
    2012百度实习生笔试题(c++方向)
    anyview 数据结构习题集 第1章答案
    Linux常用命令
    anyview 数据结构习题集 第2章答案
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11241986.html
Copyright © 2011-2022 走看看