java 状态机_独家秘诀:用YAKINDU StatechartTools进行Java开发的图形状态机

全文共2602字,预计学习时长8分钟

7a5e65b4ab455c80fd53967a8cadb205.png

你有没有过看着自己的代码,意识到它实际上是一个正尝试使用的状态机?

通常你会开始使用switch-case语句或采用状态模式。这种方法对于较大的状态机来说难以快速读取和维护。

YAKINDU Statechart Tools附带了一个图形编辑器,可以为状态图建模并自动生成相应的Java代码。人们还可以在图形模型中直接使用Java代码。本文将展示YAKINDU Statechart Tools,并演示操作步骤。

YAKINDUStatechart Tools中的深度Java集成可供人们直接访问状态图中的Java APIs,因此有助于在Java开发过程中促进状态机建模的集成!深度Java集成包含以下功能:

· 可在状态图中导入Java的类(classes)、接口(interfaces) 和枚举 (enums) ,并将它们用于状态图变量。

· 可直接从状态图访问变量、方法等所有公共 (public) 和静态 (static) 的成员,这样可以避免许多样板代码的出现。

· 状态图中使用的Java操作方法可在模拟期间调用。这避免了模拟过程中对返回值进行繁琐的模拟操作。

以下视频包含一千多字,录制这个简短的视频是希望读者能对本文描述的功能有一个印象。请享受观看的乐趣,如果看完后仍存好奇,请阅读下文。

对状态图变量使用Java类型

在YAKINDU中,状态图有一个域(domain)。为了使用本文中提到的功能,须采用Java域。可以在状态图的属性中选择Java域,也可以在创建新的状态图时选择。

90bfcdefe6e9770ea313cdf06a5a6694.png

Java域状态图需使用面向Java的类型系统。可以在变量声明中使用本机Java 类型(如int)或其包装器类型(如Java.lang.Integer)。

8be115fda2409acc475a1c7310462f7b.png

此外,还可以使用import语句导入Java类、接口或枚举。内容助手[Ctrl]+[Space] 列出了项目类路径上的所有类。可以从JRE中导入类,也可以从自己的运行环境中导入。

b024347a29aac0f7b797b8b15a106eaf.png

在状态图中使用Javatypes还意味着可以使用泛型,就像是在Java代码中使用它们一样。

32334ff6456039b87a3e9b53cf4249ef.png

面向Java的类型系统能够推断泛型信息,并在类型不匹配时识别错误。这样便可在生成代码前避免编译错误。

62b4003285c4707a90886364b4b383de.png

实例化与Java中的实例略有不同。构造函数被转换为名为 new()的静态工厂方法,而不是将关键词new导入状态图语言。

访问公共成员

一旦有了Java type的变量,就可以访问方法、变量等公共成员。同样,内容助手提供了所有可访问成员的概述,其中包含所有公共实例和静态类成员。

54d25955c4176365721b2210be4e44ec.png

在模拟中调用Java APIs

YAKINDUStatechart Tools提供了一个内置模拟工具,用于在生成代码前验证系统行为。可以通过Run-> Run As -> Statechart Simulation 的步骤在上下文菜单中启动模拟。

至于Java域状态图,该模拟直接调用了引用的Java方法。可在模拟视图中查看效果,还可以在该视图中手动更改可访问变量的值,以查看系统反应。还可以在状态图和转换处上设置断点,就像调试Java代码一样。

6303dca56efc22f386214c7cffb2ee85.png

代码生成及客户代码集成

作者已经调整了YAKINDUStatechart Tools标准版附带的Java代码生成器,以便为Java域状态图生成正确的Java代码。要在Java应用程序中使用生成的状态机代码,需执行以下基本步骤:

private void setup() {

// 1. Initialize the state machine

IPlayerStatemachine statemachine = new PlayerStatemachine();

statemachine.init();

// 2. Raise in-events on button clicks

playBtn.setOnAction((e) -> {

statemachine.getSCInterface().raisePlayPressed();

});

stopBtn.setOnAction((e) -> {

statemachine.getSCInterface().raiseStopPressed();

});

// 3. React on out-events

statemachine.getSCInterface().getListeners().

add(new SCInterfaceListener() {

@Override

public void onPlayBtnEnabledRaised(boolean value) {

playBtn.setDisable(!value);

}

@Override

public void onStopBtnEnabledRaised(boolean value) {

stopBtn.setDisable(!value);

}

});

// 4. Run the state machine

statemachine.enter();

}

行动起来

准备好在Java 项目中使用状态机了吗?以下几点介绍了如何启用状态机:

1. 下载YAKINDU Statechart Tools专业版。

2. 解压已下载的文件并打开应用程序。

3.首先会看到的是欢迎页面。单击Examples并选择Music Player(Java)。

4. 如果按钮右上角出现Install Dependencies 的字样,单击它并按照说明操作。可能需要重启一次应用程序。

5. 点击按钮voilá完成操作,操作界面中会出现音乐播放器示例,就可以使用了。

最后一条是关于许可证的说明。下载YAKINDU Statechart Tools后,可以在没有任何功能限制的情况下使用该应用程序一个月。一个月后,需要购买许可证。但如果不将其用于工作,可以申请学术或非商业许可证。

cdada124503910a80cd30a1bc3942cfa.png

大家尽情享受吧!

b809a516aa59abb3312e7111dc20a111.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值