前页 | 后页 |
激光唱机
CD Player应用程序的行为可能看起来很直观。但是,有许多规则与何时启用和禁用按钮,窗口的文本字段中显示的内容以及用户向应用程序提供事件时发生的情况有关。
假设我们的示例CD播放器具有以下功能:
- 按钮-加载随机CD,播放,暂停,停止,上一曲目,下一曲目和弹出
- 显示-轨道数,当前轨道,轨道长度和经过的时间
StateMachine CD播放器
使用两个属性定义了CDPlayer类: currentTrack和numberOfTracks 。
StateMachine用于描述CD播放器的状态:
- 在较高级别上,StateMachine具有两个状态: CD未 加载和CD已加载
- CD加载可以由三个简单状态组成: CD停止 , CD播放 , CD暂停
- 定义了用于事件加载,弹出,播放,暂停,停止,上一个和下一个事件的触发器的过渡
- 定义状态行为和过渡效果以更改CDPlayer中定义的属性的值;例如,“ Previous”事件将触发自我转换(如果当前状态为CD Playing或CD Paused ),并且将执行效果,这将减小currentTrack的值或环绕到最后一个轨道
检查生成的代码
Enterprise Architect将在用户指定的文件夹中生成这些文件:
- 后端代码:CDPlayer.js,ContextManager.js,EventProxy.js
- 客户端代码:ManagerWorker
- 前端代码:statemachineGUI.js,index.html
- 其他代码:SimulationManager.js
文件 |
描述 |
---|---|
/CDPlayer.js |
该文件定义了CDPlayer类及其属性和操作。它还使用状态行为和过渡效果定义类的StateMachines。 |
/ContextManager.js |
该文件是上下文的抽象管理器。该文件定义了与实际上下文无关的内容,这些内容是在ContextManager的泛化中定义的,例如SimulationManager和ManagerWorker 。 模拟(可执行状态机工件)可能涉及多个上下文;例如,在网球比赛模拟中,将有一个裁判员被键入为Class Umpire,并且有两名选手( playerA和playerB )被键入为Class Player。类裁判员和类播放器都将定义自己的StateMachine。 |
/EventProxy.js |
该文件定义了仿真中使用的事件和信号。 如果要使用参数引发事件,则将事件建模为信号事件,该事件指定信号类;然后,我们定义信号类别的属性。每个事件出现都有一个信号实例,其中包含为属性指定的运行时值。 |
/SimulationManager.js |
该文件用于Enterprise Architect仿真。 |
/html/ManagerWorker.js |
该文件用作前端和后端之间的中间层。
|
/html/statemachineGUI.js |
该文件通过定义stateMachineWorker来建立前端与ManagerWorker之间的通信。它:
|
/html/index.html |
这定义了HTML用户界面,例如按钮和引发事件或显示信息的输入。您可以在此文件中定义CSS和JavaScript。 |
自定义index.html和statemachineGUI.js
对生成的文件进行以下更改:
- 创建按钮和显示
- 创建CSS样式以格式化显示并启用/禁用按钮图像
- 创建一个ElapseTimeWorker.js以每秒刷新一次显示
- 创建一个TimeElapsed函数,当经过的时间达到轨道的长度时,将其设置为Next Track
- 创建JavaScript作为按钮“ onclick”事件处理程序
- 广播事件后,请请求cdPlayer.currentTrack的活动状态和运行时值
- 初始化时,请求激活状态
在statemachineGUI.js中找到onActiveStateResonse_cdPlayer函数
- 在CDPlayer_StateMachine_CDUnLoaded中,禁用所有按钮并启用btnLoad
- 在CDPlayer_StateMachine_CDLoaded_CDStopped中,禁用所有按钮并启用btnEject和btnPlay
- 在CDPlayer_StateMachine_CDLoaded_CDPlaying中,启用所有按钮并禁用btnLoad和btnPlay
- 在CDPlayer_StateMachine_CDLoaded_CDPaused中,启用所有按钮并禁用btnLoad
在statemachineGUI.js中找到函数onRuntimeValueResponse
- 在cdPlayer.currentTrack中 ,我们更新当前轨道和轨道长度的显示
完整的例子
通过单击以下链接,可以从Sparx Systems网站的“资源”页面访问该示例:
单击“加载随机CD”按钮,然后单击“启动模拟”按钮。