<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Textual, executable, translatable UML?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Gergely D´evai</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>G´abor Ferenc Kov´acs</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>A´d´am Ancsin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Eo ̈tvo ̈s Lora ́nd University, Faculty of Informatics</institution>
          ,
          <addr-line>Budapest</addr-line>
          ,
          <country country="HU">Hungary</country>
        </aff>
      </contrib-group>
      <fpage>3</fpage>
      <lpage>12</lpage>
      <abstract>
        <p>This paper advocates the application of language embedding for executable UML modeling. In particular, txtUML is presented, a Java API and library to build UML models using Java syntax, then run and debug them by reusing the Java runtime environment and existing debuggers. Models can be visualized using the Papyrus editor of the Eclipse Modeling Framework and compiled to implementation languages. The paper motivates this solution, gives an overview of the language API, visualization and model compilation. Finally, implementation details involving Java threads, reflection and AspectJ are presented.</p>
      </abstract>
      <kwd-group>
        <kwd>executable modeling</kwd>
        <kwd>language embedding</kwd>
        <kwd>UML</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Executable modeling aims at models that are completely independent of the
execution platform and implementation language, and can be executed on
modellevel. This way models can be tested and debugged in early stages of the
development process, long before every piece is in place for building and executing
the software on the real target platform.</p>
      <p>
        Executable and platform-independent UML modeling changes the landscape
of software development tools even more than mainstream modeling: graphical
model editors instead of text editors, model compare and merge instead of line
based compare and merge, debuggers with graphical animations instead of
debuggers for textual programs, etc. Figure 1 depicts the many different use cases
such a toolset is responsible for. Models are usually persisted in a format that
is hard or impossible to edit directly, therefore any kind of access to the model
is dependent on different features of the modeling toolset. Are the available
tools ready to meet the requirements? Experience shows that they still need to
evolve a lot. Another aspect is that, while graphical notations help
understanding software more than textual representations, editing graphics is usually less
productive than editing text [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>Textual modeling languages solve many of these concerns. The many
highquality text editors with sophisticated editing and search-related features, as
well as the numerous compare and merge tools serve as a solid basis. However,
merely defining a textual notation for modeling does not solve all the issues. Text
editors need plugins to do syntax highlighting and autocompletion correctly for
the new language. Executable modeling makes even heavier-weight demands:
interpreter and debugger are also required.</p>
      <p>Language embedding is a technique to implement a language in terms of an
existing one. The implementation language is called the host language, while the
implemented one is referred to as the embedded language. One way to embed a
language is to create an API in the host language that offers the constructs of the
embedded language for the developers. A program of the embedded language is
therefore a host language program that heavily uses this API. The API can, on
one hand, implement the execution semantics of the embedded language (making
it executable in the runtime environment of the host language) and, on the other
hand, can build an internal representation of the embedded program (to be used
further for compilation, visualization, analysis etc.). The big advantage is that an
embedded language can piggyback on the development and runtime environment
of the host language.</p>
      <p>This paper proposes using language embedding for executable UML
modeling. As stated above, such an embedded language can be realized by an API
that provides the constructs of executable UML. It is natural to use an
objectoriented programming language as host language, because many of the UML
modeling concepts, such as classes, inheritance, attributes, operations, visibility,
instance creation etc. are already present in these languages. Other constructs,
like components, associations, state machines, events etc. are usually not
explicitly present, therefore these abstractions have to be provided by the API.
The implementation of this API has to capture the runtime semantics of these
constructs. A UML model can then be implemented by a program in the host
language naturally reusing the modeling constructs that are part of the host
language and using the API to build the rest of the model. Model execution,
in this setup, is not more than running the resulting program in the execution
environment of the host language. Figure 2 highlights how many elements of the
”modeling environment” are provided for free by this approach. Editing,
searching, basic refactoring can be performed in the usual development environment
(smart text editor or IDE) of the host language. The debugger of the host
language can be reused to observe model execution in detail. Visualization of the
model can be achieved via existing UML editors or viewers.</p>
      <p>
        Authors of this paper have created a prototype implementation of a modeling
language along these lines [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Its name, txtUML stands for textual, executable,
translatable UML. Our host language is Java. Papyrus, the primary UML editor
of the Eclipse Modeling Framework, is selected to provide model visualization.
      </p>
      <p>The paper is organized as follows. The next section reviews related work and
compares them to our approach. Section 3 presents the language API, while
sections 4, 5 and 6 talks about execution, visualization and model compilation. More
details on the implementation of these aspects are given in Section 7. The last
section summarizes the paper and highlights its most important contributions.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Related Work</title>
      <p>
        The UML standard does not define precise execution semantics, but the
Foundational Subset for Executable UML (fUML) [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] is an OMG standard doing that
for a subset of UML, including classes and actions, but excluding components
and state machines. There is another OMG standard in preparation to define
precise semantics of UML composite structures [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
      </p>
      <p>
        BridgePoint [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] is an executable modeling tool originally based on the
Shlaer-Mellor methodology [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. Its metamodel is a non-standard fork of UML,
including components, classes, state machines (with graphical-only editor) and
action language (textual with custom syntax). BridgePoint includes open-sourced
[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] editor, and commercial model executor with graphical debugging features and
model compiler. A similar, commercial solution is iUML, a tool based on the
xUML methodology [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. A UML simulator based on a generic model execution
engine [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] was developed by IBM Haifa Research Lab and integrated into
Rational Software Architect. Topcased [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] is an open-source joint industry-academia
project to create an open-source engineering toolkit. It is implemented over the
Eclipse platform and supports UML model execution with graphical feedback.
The project is currently under migration to PolarSys [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The Eclipse Modeling
Framework (EMF) [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ] is surely the most active open source modeling
community nowadays. Moka [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] is one of the EMF-based tools, and it provides model
execution with graphical animations for fUML actions. The Yakindu Statechart
Tools [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is an open source toolkit for editing and simulating statecharts and
compiling them to C, C++ and Java. It supports statecharts with semantics
slightly different from UML state machines and a limited textual action
language. All these tools come with graphical-only editors for most layers of their
modeling language and are subject to the concerns described in Section 1.
      </p>
      <p>
        Turning to textual UML modeling, Action Language for Foundational UML
(Alf ) [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] needs to be mentioned. This is an OMG standard that defines textual
syntax for fUML. Although there are prototype tools [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] to parse and run Alf
code, the support for this language is not mature enough yet. Furthermore,
fUML and Alf are based on a limited subset of UML, they miss concepts like
components and state machines that are essential for executable modeling. The
Umple project [
        <xref ref-type="bibr" rid="ref12 ref9">12, 9</xref>
        ] shows a very neat way to integrate textual modeling with
traditional coding. It provides custom syntax for associations, state machines
that can be mixed directly into Java, C++, Php or Ruby sources. The Umple
compiler preprocesses these files and translates the Umple code fragments to the
language they are mixed in. Umple relates to our work because both approaches
are textual and try to make modeling more lightweight. On the other hand,
their goals are different: Umple provides easy mix-in of model abstractions into
traditional programming projects, while txtUML aims at completely platform
and implementation language independent, executable modeling.
      </p>
      <p>
        Section 1 discussed the importance and difficulties of model management. The
Epsilon [
        <xref ref-type="bibr" rid="ref1 ref21">21, 1</xref>
        ] project provides a number of textual languages based on a common
expression language for different model management tasks like transformation,
comparison, merge etc. In particular, not human readable model storage format
is one aspect of the model management problem, which is addressed by the OMG
standard UML Human-Usable Textual Notation (HUTN) [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. In this paper, in
contrast, we explore the possibilities of reusing the management toolset of a
mainstream programming language.
      </p>
      <p>
        Regarding the visualization aspect of our project, MetaUML [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] (a LATEX
package to create UML diagrams) and TextUML [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] (providing custom textual
notation to build UML diagrams) are related projects. Furthermore, there are
UML tools (Topcased java2uml importer, ObjectAid, UML-lab, Class Visualizer,
MoDisco etc.) that can create UML diagrams (usually class diagrams) based on
Java code. The important difference compared to our approach is that these
tools start from arbitrary Java code and produce a small part of a model on a
best effort basis, while our library only accepts a subset of Java (the txtUML
embedded language) and turns the full model definition (including state machines,
actions etc.) to a model for visualization or compilation.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Language Overview</title>
      <p>Our implementation currently supports classes, state machines and action code.
To make clear distinction between plain Java classes and those that are part
of the UML model description, all model classes have to inherit (directly or
indirectly) from ModelClass, which is provided by our API1. Associations are
also represented by class definitions, inheriting from Association. Multiplicities
are described as Java annotations like @One, @Many etc. For example, a class
diagram talking about users using machines can be described this way:
class Machine extends ModelClass { /* ... */ }
class User extends ModelClass { /* ... */ }
class Usage extends Association {
@One Machine usedMachine;
@Many User userOfMachine;
}
Signals are defined by classes that inherit from Signal. Let us define a signal
that users can send to machines by pressing the power button:
class ButtonPress extends Signal {}
class Off extends State { /* ... */ }
class On extends State {
public void entry() { /* ... */ }
public void exit() { /* ... */ }
}
@From(Off.class) @To(On.class) @Trigger(ButtonPress.class)
class SwitchOn extends Transition {</p>
      <p>public void effect() { /* ... */ }
}
}
Operations of model classes, entry and exit actions of states and effects of
transitions contain action code. The doWork operation of the User model class, for
example, log a message to the console, selects the machine that it is associated
with, then presses its power button:
void doWork() {</p>
      <p>Action.log("User: starting to work...");
Machine myMachine = Action.selectOne(this, Usage.class, "usedMachine");
Action.send(myMachine, new ButtonPress());
Action language constructs include instance related operations (eg. creation,
deletion, access to operations and attributes), association related ones (link,
unlink, different traversals), signal sending, logging and basic operations of
elementary types like integers and strings.</p>
      <p>It is important to note that only a restricted subset of Java is allowed in model
definitions. For example, adding a Vector&lt;User&gt; attribute into the Machine
1 Inheritance between two model classes encodes UML generalization. Java does not
support multiple inheritance, which is currently a limitation of txtUML.
class instead of the explicit definition of the association is invalid: Selecting the
concrete collection type is an optimization issue and should not be part of the
abstract model. The techniques to be discussed in Section 7.2 can rule out the
violations of these rules, including constraints specified in the UML standard.</p>
      <p>Using an embedded language in Java makes model descriptions a bit more
verbose than tailor-made custom syntax. This is a moderate price for familiar
syntax and the possibility of model execution and debugging with existing tools.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Execution</title>
      <p>
        A model, defined using the API introduced above, can be compiled, run and
debugged as any Java application. Figure 3 shows a debugging session executing
the example used in Section 3. A breakpoint, set on the signal sending
instruction of the doWork method, is being hit. It is possible to inspect the threads
that belong to the active object instances, the attributes of these instances, in
particular the current state of the machine instance. When stepping over the
send instruction in the debugger, the developer can verify that the state changes
from off to on.
Discussing the execution semantics behind our implementation is far beyond
the scope of this paper. We summarize our approach as follows: We start from
the constructs in the xtUML modeling language [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], port them to standard
UML2 [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and gradually add more UML2 abstractions. In case of abstractions
that are covered by other standards, like fUML [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and PSCS [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], we adopt the
standard semantics. If the execution semantics of the considered abstractions are
not standardized (eg. state machines), we closely follow the informal semantics
given in the UML2 standard, examine different possibilities and select one based
on usability and implementation considerations.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Visualization</title>
      <p>
        Even if our proposal is a textual modeling language, we consider visualization
an extremely important aspect. Graphical representation of system architecture
and behavior makes it easier to understand large systems. The advantage of
our approach is that we have the possibility to reuse any UML editor or viewer
tool for model visualization by generating the persistency format of the selected
tool. We use the Ecore based implementation of UML2 as our internal model
representation that gives us Papyrus-compatible [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] model persistency for free.
Papyrus provides autolayout for diagrams.
      </p>
      <p>Note, however, that automatically laid out diagrams are far from perfect,
because the position of model elements and their relative distance in a hand-drawn
diagram also carries information. For example, the class representing the most
important concept is usually placed in the middle of a class diagram. Closely
related classes are drawn close to each other, while marginal or technical
associations can be long broken lines. Our plan is to extend the embedded language
with constructs to define the relative placement of model elements. For
example, one could specify that the User class has to be displayed next to the class
Machine, on its right hand side. This is definitely an important future work in
our project.</p>
      <p>Figure 4 shows the Papyrus editor showing our example model. The
treeview of the model in the Model Explorer on the left hand side is automatically
loaded when opening the model persisted by our API. The class diagram on the
right-hand side can be created by manually dragging the classes from the Model
Explorer onto the diagram.</p>
    </sec>
    <sec id="sec-6">
      <title>Translation</title>
      <p>The toolchain of executable modeling is completed by the model compiler that
turns a model into a program in a given implementation language (C++, Java,
etc.) optimized towards a selected platform and runtime libraries. Our
implementation includes a prototype model compiler generating C++. For example,
let us show a fragment of the generated code for the example used throughout
the paper:
struct Machine
{
std::vector&lt;User*&gt; userOfMachine;
enum state { state_Init, state_Off, state_On };
state current_state;
/* ... */
};</p>
      <p>The association between the machine and its users results in the member
called userOfMachine in the machine class. Since the multiplicity of this end of
the association is @Many, a vector of pointers to user objects is generated. Note,
that the compiler is free to choose a different collection type for optimization
reasons. In particular, this member can be omitted if the association is never used
to navigate from machines to users. The states of the machine are represented
by the enumeration type state and the current_state member is responsible
for storing the actual state in runtime.</p>
      <p>Section 5 revealed that we use the Ecore-based UML2 implementation as the
internal representation of the models. The model compiler’s task is to query the
model via the UML2 API and turn its elements C++ to code.</p>
    </sec>
    <sec id="sec-7">
      <title>7 Implementation</title>
      <sec id="sec-7-1">
        <title>7.1 Implementation of the execution semantics</title>
        <p>Execution semantics of the model are captured by the implementation of our
API, introduced in Section 3. The interesting bit of this implementation is the
asynchronous communication between object instances. Any modeled class has
to inherit from ModelClass. Its constructor creates a Java thread for all the
instances2. Each thread has a mailbox of type LinkedBlockingQueue&lt;Signal&gt;
that other instances can put signals in asynchronously. The threads run the
following loop:
while (true) {</p>
        <p>Signal signal = mailbox.take();
parent.processSignal(signal);
}
2 This is the reason to use inheritance to mark classes belonging to the model.</p>
        <p>That is, they are polling their mailboxes for incoming signals and propagate
those to their object instances (parent) for processing. The processSignal
method implements the runtime semantics of state machines. Note that the take
method blocks the thread if the mailbox is empty, therefore no busy-waiting is
involved. When the object instance is deleted, its thread is interrupted, leading
to an InterruptedException that stops the loop above.
7.2</p>
      </sec>
      <sec id="sec-7-2">
        <title>Building the internal representation of models</title>
        <p>Both visualization and model compilation requires a representation of models
that can be queried and transformed to graphics or text. In our case this
representation is the Ecore-based implementation of UML2.</p>
        <p>Using Java reflection, it is possible to get information about the static
structure of Java code. For example, in case of the Machine class, we iterate through
its attributes and member functions to find out the attributes and operations to
be added to the model representation via the UML2 API. Then, the enclosed
classes are examined, if they inherit from State or Transition in order to add
the state machine of this class to the model.</p>
        <p>Java reflection is unable to look into method bodies, but it is possible to call
methods via the reflection API. However, simply calling the methods found eg.
in states or transitions would not help in building model representation, since
the instructions inside these methods implement the runtime semantics of the
model. For this reason, we use AspectJ, an aspect-oriented extension to Java.
For example, the following AspectJ code fragment replaces all method calls on
instances of ModelClass with code that adds the corresponding call operation
element to the model:
Object around(ModelClass target): call(* *(..)) &amp;&amp; target(target) {
return Importer.call(target, thisJoinPoint.getSignature().getName(),
thisJoinPoint.getArgs());
}
8</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Summary</title>
      <p>In this paper we presented txtUML, which is an executable UML language
embedded in Java. Our main contributions are the following:
– A novel textual UML modeling method that makes model-level execution
and debugging possible by reusing the Java runtime environment and Java
debuggers.
– Application of Java reflection and AspectJ for creating model representation
that can be used for visualization and model compilation.</p>
      <p>– Prototype implementation of the framework.</p>
      <p>Using a mainstream programming language provides easy integration to existing
toolchains, while reusing its execution environment and debuggers reduces the
implementation effort needed to create a framework for executable UML.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>1. Epsilon project. http://www.eclipse.org/epsilon/</mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>2. Executable Translatable UML Open Source Editor. https://www.xtuml.org/</mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>3. MetaUML project. http://metauml.sourceforge.net/old/</mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>4. Moka. http://wiki.eclipse.org/Papyrus/UserGuide/ModelExecution</mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>5. Papyrus. http://wiki.eclipse.org/Papyrus</mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>6. TextUML project. https://github.com/abstratt/textuml</mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <article-title>7. The txtUML project</article-title>
          . http://txtuml.inf.elte.hu/
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>8. Topcased migrates to PolarSys. http://polarsys.org/ topcased-migrates-polarsys</mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>9. Umple project. http://cruise.eecs.uottawa.ca/umple/</mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>10. Yakindu Statechart Tools. http://statecharts.org/</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. Alf Open Source Implementation. http://modeldriven.org/alf/ (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Forward</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Badreddin</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lethbridge</surname>
          </string-name>
          , T.C.: Umple:
          <article-title>Towards combining model driven with prototype driven system development</article-title>
          .
          <source>In: Rapid System Prototyping (RSP)</source>
          ,
          <year>2010</year>
          21st IEEE International Symposium on. pp.
          <fpage>1</fpage>
          -
          <lpage>7</lpage>
          . IEEE (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. Gr¨onniger, H.,
          <string-name>
            <surname>Krahn</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rumpe</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schindler</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , Vo¨lkel, S.:
          <article-title>Textbased modeling</article-title>
          .
          <source>In: 4th International Workshop on Software Language Engineering</source>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Kirshin</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dotan</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hartman</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>A uml simulator based on a generic model execution engine</article-title>
          .
          <source>In: MoDELS Workshops</source>
          . vol.
          <volume>4364</volume>
          , pp.
          <fpage>324</fpage>
          -
          <lpage>326</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. MentorGaphics:
          <article-title>BridgePoint xtUML tool</article-title>
          . http://www.mentor.com/products/sm/ model_development/bridgepoint/
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. Object Management Group:
          <article-title>UML Human-Usable Textual Notation (HUTN), standard, version 1.0</article-title>
          . http://www.omg.org/spec/HUTN/ (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. Object Management Group:
          <article-title>Action Language for Foundational UML (ALF), standard, version 1.0.1</article-title>
          . http://www.omg.org/spec/ALF/ (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18. Object Management Group:
          <article-title>Semantics of a Foundational Subset for Executable UML Models (fUML), standard, version 1.1</article-title>
          . http://www.omg.org/spec/FUML/1. 1/ (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19. Object Management Group:
          <article-title>Unified Modeling Language (UML), standard in preparation, version 2.5 beta 2</article-title>
          . http://www.omg.org/spec/UML/2.5/Beta2/ (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20. Object Management Group:
          <article-title>Precise Semantics of UML Composite Structures (PSCS), standard in preparation, version 1.0 beta 1</article-title>
          . http://www.omg.org/spec/ PSCS/1.0/Beta1/ (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Paige</surname>
            ,
            <given-names>R.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kolovos</surname>
            ,
            <given-names>D.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rose</surname>
            ,
            <given-names>L.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Drivalos</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Polack</surname>
            ,
            <given-names>F.A.</given-names>
          </string-name>
          :
          <article-title>The design of a conceptual framework and technical infrastructure for model management language engineering</article-title>
          . In: Engineering of Complex Computer Systems,
          <year>2009</year>
          14th IEEE International Conference on. pp.
          <fpage>162</fpage>
          -
          <lpage>171</lpage>
          . IEEE (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Pontisso</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chemouil</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Topcased combining formal methods with model-driven engineering</article-title>
          .
          <source>In: Automated Software Engineering</source>
          ,
          <year>2006</year>
          . ASE'
          <volume>06</volume>
          . 21st IEEE/ACM International Conference on. pp.
          <fpage>359</fpage>
          -
          <lpage>360</lpage>
          . IEEE (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Raistrick</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Model driven architecture with executable UML</article-title>
          , vol.
          <volume>1</volume>
          . Cambridge University Press (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Shlaer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mellor</surname>
            ,
            <given-names>S.J.:</given-names>
          </string-name>
          <article-title>The Shlaer-Mellor method</article-title>
          .
          <source>Project Technology white paper (</source>
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Steinberg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Budinsky</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Merks</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Paternostro</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>EMF: Eclipse Modeling Framework</article-title>
          . Pearson
          <string-name>
            <surname>Education</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>