EMont to BCOOPL Translation

All EMont elements are translated to BCOOPL objects. This means that not only activities, but also goals and conditions are objects that run concurrently. All these translated objects form one hierarchy of nested and related objects that can sent message to each other. Because of BCOOPL’s one-at-a-time semantics, at most one object is active at any one time. Precisely because of this property, the reasoning of how conditions are affected by activities and vice versa is easy to comprehend and to implement.

The basic reasoning is as follows. Each activity produces an outcome implicitly, which, by the way, can be made explicit via the outcome element. The activity’s implicit outcome acts as a kind of latch in which the outcome of a computation is stored. After an activity has calculated a new outcome, the value is sent to objects representing goals and conditions. The updated conditions trigger the activation of possibly a multitude of other activities. Because only one activity is active at any one time, the outcomes in other activities and their effect on conditions is remembered. A newly established condition together with possibly other, remembered conditions provide the input for an activity that calculates a new outcome. And so on, indefinitely, until the simulation halts when no conditions are updated anymore. A fictitious example of this circular process of triggering and being triggered is shown below. The dotted arrows and “Other activities” denote an arbitrary configuration of EMont elements.

Figure: example of calculating new outcomes until no conditions are updated anymore.

<accesscontrol>Access:We got to move</accesscontrol>