预订演示
前页 后页

示例:延迟事件模式

Enterprise Architect支持延迟事件模式。

在一个状态下创建一个延迟事件:

  1. 为状态创建一个自我转换。
  2. 更改向“内部”过渡的“种类”。
  3. 简单地触发器要延迟的事件。
  4. 在“影响”字段中,输入“defer();”。
仿真:
  1. 选择“仿真>动态仿真仿真>模拟器>打开仿真窗口”。同时选择“仿真>动态仿真>事件”打开仿真事件窗口。
  2. 模拟器事件窗口帮助您触发事件;双击“等待触发器”列中的触发器。
  3. 仿真窗口以文本形式显示执行过程。您可以在 Simulator 命令行中键入“dump”以显示队列中延迟了多少事件;输出可能类似于:
    泳池]事件泳池:[NEW,NEW,NEW,NEW,NEW,]

延迟事件示例

此示例显示了使用延迟事件的模型,以及显示所有可用事件的仿真事件窗口。

我们首先设置上下文(包含状态机的类元素),在一个简单的上下文模拟它们并从外部引发事件;然后用上下文事件机制模拟一个客户端-服务器时间。

创建上下文和状态机

创建服务器上下文

Class diagram providing context definition in Sparx Systems Enterprise Architect

创建类图并:

  1. A类元素TransactionServer ,你添加一个状态机ServerStateMachine
  2. A类元素TestClient ,向其中添加状态机ClientStateMachine
  3. TestClientTransactionServer的关联,目标角色名为server。

ServerStateMachine建模

Simple example State Machine diagram in Sparx Systems Enterprise Architect

  1. 在状态机图中添加一个 Initial节点Initial ,并转换到一个状态idle
  2. 转移
    (以事件触发器为简单)到状态
  3. 转移
    (以事件为触发器)终点状态终点
  4. 转移
    (与事件 AUTHORIZED 一样触发器)到idle
  5. 转移
    (以事件触发器作为简单和defer();作为效果)到

ClientStateMachine建模

Example multi-state State Machine diagram in Sparx Systems Enterprise Architect

  1. 在状态机图添加一个 Initial节点Initial ,并转换到一个状态。
  2. 转移
    (以事件RUN_TEST 作为触发器)到 stateState1状态
  3. 转移
    (效果:%SEND_EVENT("NEW_REQUEST", CONTEXT_REF(server))%;) 到状态State2。
  4. 转移
    (效果: %SEND_EVENT(" NEW_REQUEST", CONTEXT_REF(server))%;) 到 stateState3状态
  5. 转移
    (效果: %BROADCAST_EVENT(" NEW_REQUEST")%;) 到 stateState4状态
  6. 转移
    (效果: %SEND_EVENT("AUTHORIZED", CONTEXT_REF(server))%;)到 stateState5状态
  7. 转移
    到终点状态终点

仿真在一个简单的上下文

创造仿真工件

Model Simulation with Executable StateMachine in Sparx Systems Enterprise Architect

  1. 工件and with the name仿真事件的可执行状态机将“语言”字段设置为JavaScript
  2. 放大 Ctrl+元素将它拖到事务服务器上,然后将其作为属性与名称服务器工件粘贴。

运行仿真

  1. '选择工件编译仿真生成运行指定一个目录为你的(注记:目录中的所有文件将在模拟开始之前)。
  2. 点击生成按钮。
  3. 选择“仿真>动态仿真>事件”选项打开仿真事件窗口。

模拟开始时, idle将是活动状态。

  1. 双击触发器仿真将其作为事件简单的窗口执行;退出空闲并激活忙碌
  2. 双击仿真窗口中的仿真,再次像事件一样触发器; busy保持激活状态,并且泳池的实例被附加到事件池中。
  3. 双击仿真事件窗口中的仿真,第三次执行触发器事件; busy保持激活状态,并且泳池的实例被附加到事件池中。
  4. 仿真窗口命令行中的类型转储;请注意,事件池有两个 NEW_REQUEST 实例。
  5. 双击触发器仿真中的AUTHORIZED,将其作为事件模拟窗口执行;这些行动发生:
    -busy退出, idle变为活动状态
    - 从池中检索 NEW_REQUEST 事件,退出空闲并且忙碌变为活动状态
  6. 仿真窗口命令行中的类型转储;现在事件泳池只有一个现在实例。

通过发送/广播事件进行交互模拟

创造仿真工件

Deferred event in business process simulation in Sparx Systems Enterprise Architect

  1. 使用名称创建事件仿真状态并可执行状态机到工件JavaScript “语言”字段集的名称放大元素。
  2. Ctrl+DTransactionServer元素工件属性上,并将其粘贴为名称服务器。
  3. Ctrl+工件将TestClient元素拖到属性上,并将其粘贴为名称client
  4. 创建从客户端到服务器的连接器。
  5. 单击连接器并按 Ctrl+L 以选择从TestClient元素到TransactionServer元素的关联。

运行互动仿真

  1. 以与简单上下文相同的方式启动模拟。

    模拟开始后,客户端保持在State0服务器保持在空闲状态

  2. 双击仿真事件窗口中的 RUN_TEST 即可触发。事件 NEW_REQUEST 将被触发 3 次(由 SEND_EVENT 和 BROADCAST_EVENT),而 AUTHORIZED 将由 SEND_EVENT 触发一次。


    仿真窗口命令行中的类型转储,事件池中只剩下一个泳池实例。结果与我们的手动触发测试相匹配。