Prev | Next |
Create Objects in a Simulation
In a Simulation model, you can create Classes and either create instances of them (Global Objects) to represent objects that exist in the process, or define Actions to generate one or more Objects at any point during the process.
You have three options for creating Objects in a Simulation model:
- Manually create the Object
- Dynamically create an Object through a CreateObject Action element
- Use the JavaScript function sim.CreateObject ("name") as the 'Effect' of an Action element, to again create an Object dynamically
Having created an Object dynamically you can also instantiate any inner objects of that Object, such as an Activity on a Class, and act on the properties of that inner object.
Manually Create an Object
Simply create an Object element on a diagram in the model, either by:
- Dragging an Object element from the 'Object' pages of the Diagram Toolbox and setting its classifier, or
- Dragging a classifier element from the Browser window and pasting it into the diagram as an instance
In the Simulation model you can then set up the Object properties themselves (such as setting run-states to re-set the initial value of an attribute) or the behaviors of Actions to act on the Object (such as passing it along a process flow) and observe what happens to the Object in a Simulation.
Create an Object through a CreateObject Action
If your process generates objects in runtime, you can Simulate this using a CreateObject Action.
Step |
Action |
See also |
---|---|---|
1 |
On your Activity diagram, drag an 'Action' icon from the Diagram Toolbox, and select the 'Other | CreateObject' context menu option to define it as a CreateObject Action element. |
Action |
2 |
Set the classifier of the CreateObject Action to the Class of which the Object will be an instance. This is set in the Properties window > CreateObjectAction > Classifier, using the [...] button. |
Action Pin |
3 |
Create an Action Pin on the CreateObject Action, of kind output. |
Action Pin |
4 |
Create or select the next Action in the processing sequence, and add an Action Pin of kind input. Connect the two Actions with a Control Flow connector, and the two Action Pins with an Object Flow connector. |
Control Flow Object Flow |
5 |
Perform a Simulation on the diagram. When the CreateObject Action is executed, it creates an Object having the properties of the classifier, and stores it in its Output Pin. The Object itself is passed through the Object Flow connection to the Input Pin of Action 2, where its properties can be listed in the Locals window for the Simulation. |
Create Object Using JavaScript
You can also create Simulation objects dynamically using a JavaScript command in the 'Effect' field of the Action element. The command is:
sim.newObject = sim.CreateObject("ClassName");
or
sim.newObject = new SimObject("ClassName"); (natural JavaScript)
That is: 'Simulate the creation of an Object based on Class <name>'. The classifying Class would exist in the same Package as the Action.
As for the CreateObject Action element, the Object is created during the Simulation and can be passed down to and processed by 'downstream' elements. In this example, the created Object is identified as sim.object1 and in Action 2 it is accessed and one of its attributes given a different value (also by JavaScript as an Effect of the Action).
Instantiate Inner Objects
As described earlier, you can create an Object using either JavaScript or a CreateObject Action. Similarly, you can instantiate inner objects using JavaScript or a CallBehavior Action.
In this example, using JavaScript, the Simulation first creates a test object based on Class1. Class 1 has an Activity element and diagram, with an Activity Parameter 1 set to the integer 5 and an Activity Parameter 2 set to the string 'test'. The value of Activity Parameter 1 is captured as a buffer value 'buf'.