`
sillycat
  • 浏览: 2552814 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java的StateMachine(一)说明文档

    博客分类:
  • JAVA
阅读更多
Java的StateMachine(一)说明文档

首页
http://smc.sourceforge.net/

图形化工具
http://www.graphviz.org/

I download the Smc version  6.0.1.

smc.pdf   Introduction of the State Machine Compiler

FSM(Finite State Machine) is everywhere.
A input source .sm(yacc-like syntax), a output source in your language like java or python.

1.conceptions
A Simple Transition
//State
Idle {
// Trans Next State Actions
Run Running {}
}

A Reflexive Transition
//State
Idle{
// Trans Next State Actions
Timeout Idle {}
}

A Internal Event
// State
Idle {
//Trans Next State Actions
Timeout nil {}
}

A Transition with Actions
// State
Idle{
//Trans
Run
//Actions
{
StopTimer("Idle");
DoWork();
}
}

Transition Guards
conditions that must be met in order for transitions to proceed
// State
Idle{
//Trans
Run
//Guard condition
[ctxt.isValid()]
//Next State
Running
//Actions
{
StopTimer("Idle");
DoWork();
}
Run Idle {RejectRequest();}
}

Transition Arguments
// State
Idle{
//Transition
Run(msg:const Message&)
//Guard condition
[msg.isValid()]
//Next State
Running
//Actions
{
StopTimer("Idle");
DoWork(msg);
}
Run(msg:const Message&)
//Next State Actions
Idle { RejectRequest(msg);}
}

Entry and Exit Actions
Actions performed every time we enter and exit a state,respectively
// State
Idle
Entry {StartTimer("Idle",1);  CheckQueue();}
Exit   {StopTimer("Idle");}
{
//Transitions
}

2.A case study: a Telephone
demo url:
http://smc.sourceforge.net/SmcDemo.htm

SMC_Tutorial.pdf book
An example of simple turnstile:

1.Description of the normal operation of a turnstile:
Turnstile initially locked
A coin or ticket is inserted(event)
triggers action: turnstile unlocks
A person passes through turnstile(event)
triggers action: turnstile locks again

most important concepts:States,Transitions and Actions

Transition table for turnstile

State Transition Next State Action
Locked coin Unlocked unlock
pass Locked alarm
Unlocked coin Unlocked thankyou
pass Locked lock

I use a sm file to show the workflow Turnstile.sm:
%class Turnstile
%package turnstile

%start MainMap::Locked

%map MainMap
%%
Locked
{
coin Unlocked { unlock(); }
pass nil      { alarm(); }
}
Unlocked
{
pass Locked { lock(); }
coin nil { thankyou(); }
}
%%

And I put a bat file on Windows to compile the sm file to java output, BuildSm.bat:
java -jar smc-6.0.1.jar -java -d turnstile Turnstile.sm
rem -jar smc-6.0.1.jar The SMC Compiler
rem -java Specify java language output
rem -d turnstile Optionally specify target directory
rem turnstile.sm Specify the .sm file to process

After we run the bat shell, we get a single file named TurnstileContext.java and we get many classes:
TurnstileContext$MainMap.class
TurnstileContext$MainMap_Default$MainMap_Locked.class
TurnstileContext$MainMap_Default$MainMap_Unlocked.class
TurnstileContext$MainMap_Default.class
TurnstileContext$TurnstileState.class
TurnstileContext.class

Write the AppClass  Turnstile.java:
package com.sillycat.sm.turnstile;

public class Turnstile implements TurnstileActions{

TurnstileContext _fsm;
TurnstileActions _actions;

public Turnstile(TurnstileActions actions){
_fsm = new TurnstileContext(this);
_actions = actions;
}

public void coin(){_fsm.coin();}
public void pass(){_fsm.pass();}
public void alarm(){_actions.alarm();}
public void lock() {_actions.lock();}

public void thankyou() {_actions.thankyou();}
public void unlock() {_actions.unlock();}
}

TurnstileActions.java:
package com.sillycat.sm.turnstile;

public interface TurnstileActions {
public void coin();
public void pass();
public void alarm();
public void lock();
public void thankyou();
public void unlock();
}

And we can build sm file into a .dot file and view the picturn of the workflow,GraphSm.bat:
java -jar smc-6.0.1.jar -graph -glevel 1 Turnstile.sm

we can get a Turnstile_sm.dot file after we run the command, and we can install graphviz-2.26.3.msi from URL
http://www.graphviz.org/

And we use Gvedit to open the file Turnstile_sm.dot and then we can see the picture.


分享到:
评论

相关推荐

    管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程.doc

    COLA StateMachine的另一个特点是支持用DSL(Domain Specific Language,领域特定语言)表达状态转移,其设计注重语义清晰性,让状态流转逻辑变得直观和易于理解。这样的设计不仅可以帮助开发者快速上手状态机,也...

    StateMachine

    标签再次确认了文档的主题,"StateMachine",意味着文档内容将深入探讨状态机这一主题,对于学习和理解状态机的理论和应用非常有帮助。通过阅读这份PDF文档,读者可以系统地学习状态机的概念,掌握其设计和实现技巧...

    Projet machine d'états_statemachine_

    标题中的“Projet machine d'états_statemachine_”暗示了我们正在讨论的是一个与状态机相关的项目。状态机,或称为状态图,是一种用于建模系统行为的工具,它描述了系统在不同时间可能存在的状态以及如何从一个...

    Akka Java文档

    有限状态机 (Finite State Machine, FSM) 是一种常用的设计模式,用于表示 Actor 的不同状态及其转换。 ##### 3.8 Persistence Persistence 是 Akka 的一个扩展功能,用于存储 Actor 的状态。这使得即使在 Actor ...

    Finite State Machine Generator-开源

    总的来说,开源的“Finite State Machine Generator”工具为C++和Java开发者提供了一个高效、轻量的解决方案,帮助他们轻松应对复杂的状态管理问题,提升了软件的可维护性和性能。同时,通过参与开源社区,开发者还...

    enterprise achitect pdf(Code generation from State Machine diagram Feature Guide)

    对于希望更深入了解代码生成过程的用户,可以查看安装目录下的 `StateMachine_Sample.eap` 文件,该文件包含了更详细的示例。 - **文件位置**:Enterprise Architect 的安装目录下。 - **示例内容**: - 包含更...

    java毕设 Java 毕业设计项目

    12. 使用 Spring StateMachine 实现一个状态机 13. SpringBoot 实现文件上传系统 14. springboot 实现短链接系统 15. springboot 实现数据库文档生成器 16. 基于 SpringBoot2+Freemarker 的代码生成器 17. 使用 ...

    State Machine Compiler-开源

    标题中的“State Machine Compiler-开源”表明我们正在讨论一个用于编译状态机的开源项目。状态机是一种数学模型,常用于计算机科学和软件工程中,它以一系列状态和触发状态转换的事件为基础,用于描述系统行为。...

    Java学习思路.pdf

    Java可以利用axis、cxf等框架创建SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)风格的Web服务。同时,.NET和CORBA(Common Object Request Broker Architecture)也是跨平台...

    (完整版)JAVA中常用英文单词简写释义.pdf

    * JVM (Java Virtual Machine):Java 虚拟机,是 Java 程序的运行环境。 * JNI (Java Native Interface):Java 本地接口,是一种允许 Java 程序调用本地代码的接口。 二、Java 企业级概念 * JNDI (Java Naming & ...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).pdf

    5. **JVM (Java Virtual Machine)**:JVM是JAVA程序的执行引擎,负责解析并执行字节码。 6. **JNI (Java Native Interface)**:JNI允许JAVA代码调用操作系统原生的函数,实现JAVA与其他语言的互操作性。 7. **AWT ...

    Mina2中文文档

    #### Chapter 14 - StateMachine(状态机) - **状态机设计**:介绍了如何利用状态机模式优化Mina应用程序的状态管理。 #### Chapter 15 - 代理 - **代理支持**:探讨了Mina对代理服务器的支持情况,包括配置和使用...

    Java新手入门的30个基本概念.doc

    28. **JavaDoc**:Java文档生成工具,自动生成API文档,方便代码阅读和维护。 29. **模块系统(Java Modules System)**:Java 9引入的新特性,用于管理和隔离项目中的依赖。 30. **Lambda表达式**:Java 8引入的...

    Akka说明文档

    - **Finite State Machine (FSM)**:有限状态机,用于实现状态驱动的Actor。 - **Akka Extensions**:扩展模块,提供了更多的高级功能。 - **ZeroMQ**:与ZeroMQ消息队列集成的模块。 - **Microkernel**:微内核架构...

    workflow之二

    4. 状态与状态机(State & State Machine):流程实例在运行过程中会经历不同的状态,形成一个状态机模型。状态机设计确保流程按照预定规则进行。 在实际使用OSWorkflow时,我们通常会经历以下步骤: 1. 配置与...

    精选_毕业设计_基于Java实现的词法分析程序_完整源码

    3. **状态机**:词法分析器通常通过有限状态自动机(Finite State Machine, FSM)的工作原理来工作,从输入字符流中识别出符合规则的序列。 4. **缓冲区管理**:为了高效处理输入,词法分析器会使用一个缓冲区来...

    macjava源码-javascript-state-machine-notes:javascript状态机源码阅读

    "macjava源码-javascript-state-machine-notes" 提到的项目可能是一个专门研究和实现JavaScript状态机的开源项目。这个项目可能包含了一个或多个实现状态机的JavaScript库,供开发者学习和使用。通过阅读源码,...

Global site tag (gtag.js) - Google Analytics