前页 | 后页 |
激光唱机
CD 播放器应用程序的行为可能看起来很直观;但是,有许多规则与按钮何时启用和禁用、窗口的文本字段中显示的内容以及向应用程序提供事件时发生的情况有关。
假设我们的示例 CD 播放器具有以下特征:
- 按钮 - 加载随机 CD、播放、暂停、停止、上一曲目、下一曲目和弹出
- 显示 - 曲目数、当前曲目、曲目长度和已播放时间
CD播放器状态机
A类CDPlayer定义了两个属性: currentTrack和numberOfTracks 。
状态机用于描述 CD 播放器A状态:
- 在更高的层次上,状态机有两种状态: CD UnLoaded和CD Loaded
- CD Loaded可以由三个简单状态组成: CD Stopped 、 CD Playing 、 CD Paused
- 转换定义为事件 Load、Eject、Play、Pause、Stop、Previous 和 Next 的触发器
- 定义状态behaviors和效果状态定义的属性值;例如,'Previous' 事件将触发自转换(如果当前状态是CD Playing或CD Paused )并执行影响,这将减少currentTrack的值或换行到最后一个轨道
检查生成的代码
Enterprise Architect将在您指定的文件夹中生成这些文件:
- 后端代码:CDPlayer.js、ContextManager.js、EventProxy.js
- 客户端代码:ManagerWorker
- 前端代码:statemachineGUI.js、index.html
- 其它代码:SimulationManager.js
文件 |
描述 |
---|---|
/CDPlayer.js |
该文件定义了类CDPlayer 及其属性和操作。它还用状态行为和过渡效果定义了类的状态机。 |
/ContextManager.js |
该文件是上下文的抽象管理器。该文件定义了与实际上下文无关的内容,这些内容是在ContextManager的泛化中定义的,例如SimulationManager和ManagerWorker 。 模拟(可执行状态机)可以涉及多个工件;例如,在网球比赛模拟中,将有一个裁判输入类Umpire,两个玩家——playerA和playerB——输入类。类和ClassPlayer类定义自己的状态机。 |
/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' 事件处理程序
- 广播事件后,请求状态的活动状态和运行时值
- 初始化时,请求活动状态
在 statemachineGUI.js 中找到函数onActiveStateResponse_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 按钮,然后单击开始仿真按钮。