<!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>Extended Traits for Model-Driven Software Development</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Vahdat Abdelzad</string-name>
          <email>v.abdelzad@uottawa.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>School of Electrical Engineering and Computer Science University of Ottawa</institution>
          ,
          <addr-line>Ottawa</addr-line>
          ,
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-Software reuse is an important key in developing software systems in a short time with low cost and fewer errors. Traits were introduced to provide fine-grained reusable elements so as to avoid the issues of various forms of inheritance. In spite of being powerful, traits are not used much in software development, mostly because of neither being available in general purpose programming languages nor at the modeling level. In addition, traits suffer from not having control over their clients, which result in a lack of reusability and incorrect usage respectively. In this paper, we propose applying traits to model driven software development. Traits are extended with modeling elements such as associations, state machines, and constraints for a higher level of abstraction. In addition, template parameters are integrated with associations in order to increase genericity and level of abstraction. Traits will be extended with required interfaces to enable structural control over their clients. These features will be implemented in Umple which provides textual modeling of software systems. Index Terms- Traits, Modeling, UML, Software Development, Umple.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. THE PROBLEM STATEMENT</title>
      <p>
        It is accepted that software reuse is a key for developing
software systems with minimum cost and errors. Inheritance is
one of the popular techniques in this direction. However, there
are some issues regarding using various forms of inheritance
like multiple inheritance and mixins [
        <xref ref-type="bibr" rid="ref11 ref22 ref26 ref8">8,11,22,26</xref>
        ]. Traits were
introduced to resolve those by providing a fine-grained
mechanism that can be applied freely to any level of
inheritance hierarchy [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. A trait, in its original form, is a
group of pure methods that serves as a building block for
classes. However, most developers are not able to use traits in
their software development process. This happens because
traits are not available in mainstream programming languages
such as C++ and Java, or modeling languages like UML.
Therefore, there is a greater amount of duplication than they
otherwise might exist in software systems.
      </p>
      <p>Meanwhile, model-driven technologies have started to have
an important influence on the development community,
although slowly. In particular, state machines and associations,
are modeling abstractions that bring new opportunities for
reuse, and can be manipulated by inheritance for an even
greater degree of reusability. Various issues with inheritance
are exposed, however, when these new abstractions become
inheritable units; posing challenges, the solution of which are
some of my research triggers.</p>
      <p>
        Nathanael et al. [
        <xref ref-type="bibr" rid="ref23 ref24">23,24</xref>
        ] introduced the concept of traits in
dynamically-typed class-based languages. They are reusable
sets of pure methods that serve as elements from which classes
can be built. The simplest traits can merely define required and
provided methods. These kinds of traits are called stateless
traits because they do not directly specify attributes, and all
data access must be through methods known as ‘glue’ code or
accessors. The formal definition of traits and their basic
properties were defined in [
        <xref ref-type="bibr" rid="ref10 ref25">10,25</xref>
        ]. Stateful traits [
        <xref ref-type="bibr" rid="ref3 ref4">3,4</xref>
        ] were
introduced to avoid the issue of incompleteness in stateless
traits. Incompleteness causes classes to have a significant
amount of boilerplate glue code when they use traits. This issue
is resolved through allowing instance variables to be defined
directly in traits.
      </p>
      <p>
        Typed trait inheritance is explored in [
        <xref ref-type="bibr" rid="ref16 ref17">16,17</xref>
        ] in which an
extension called Featherweight-trait Java (FTJ) has been
developed for Featherweight Java (FJ) [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. The goal of that
project was to introduce typed trait-based inheritance to bring a
simple type system that typechecks traits when they are
imported in classes.
      </p>
      <p>
        Traits in Java was explored in [
        <xref ref-type="bibr" rid="ref19 ref21">19,21</xref>
        ] as well. In that
research, the idea was to explore how it is possible to resolve
barriers of reuse in Java through traits. IDE support based on
Eclipse for this implementation was developed in [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], in
which a programmer can move freely between views of the
system with or without its traits.
      </p>
      <p>
        Emerson et al. [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] suggested an implementation for Java
according to their study over java.io libraries. In their research,
traits are represented as stateless Java classes. Required
methods are defined as abstract methods. Classes representing
traits can be used with other classes so as to have composite
classes. As described by their implementation, a class can be
used both through inheritance and through composition.
Another attempt in this direction resulted in AspectJ [
        <xref ref-type="bibr" rid="ref15 ref28">15,28</xref>
        ]
being utilized to mimic traits [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. This mechanism could
implement most characteristics of traits, but it was not able to
provide a full coverage regarding conflict resolution.
      </p>
      <p>
        XTRAITx as a language for pure trait-based programming
was introduced in [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The research achieves complete
compatibility and interoperability with Java platform without
reducing flexibility of traits. Furthermore, it provides an
incremental adaptation of traits in existing Java projects based
upon Eclipse. In the implementation, classes get the role of
object generators and types while traits only play the role of
units of code reuse and are not types.
      </p>
      <p>
        Application of traits in software product line (SPL) has
been investigated in [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Traits are used along with records [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
to model the variability of the state part of products explicitly.
In their approach, class-based inheritance is ruled out and
classes are constituted only by composition of traits, interfaces,
and record.
      </p>
      <p>As can be seen, the main thrust of all the above work is
either to add traits to specific programming languages or to use
them in new domains. There has so far been no attempt to
increase genericity of traits or to make them work in a
modeldriven context. Our research aims to take steps in that direction
and resolve a variety of challenges that are uncovered along the
way.</p>
    </sec>
    <sec id="sec-2">
      <title>III. THE PROPOSED SOLUTION</title>
      <p>The extensions proposed by this research cover several
dimensions and work together to provide better overall
modeling and language flexibility, which can result in better
reusability. These are explained in the following sections.</p>
      <sec id="sec-2-1">
        <title>A. Required Interfaces</title>
        <p>Traits use the notion of ‘required methods’ to specify what
classes can use them. There is nothing to prevent them from
being used in situations in which classes have the same method
names with different purposes. Our initial work shows that
required methods plus required interfaces can put restrictions
on clients of traits and thus avoid traits being used incorrectly.
Required interfaces provides a solution ensuring traits will be
used correctly with minimum errors.</p>
      </sec>
      <sec id="sec-2-2">
        <title>B. Associations</title>
        <p>Associations are key elements in modeling and increase the
level of abstraction; generating code from associations can
considerably reduce the amount of implementation code that
needs writing. Having associations in traits poses a number of
challenges that we have addressed in this research. To ensure
modularity, specifying association ends must be done through
template parameters. Our objective is to enable traits to be used
freely to specify different kinds of relationship patterns.</p>
      </sec>
      <sec id="sec-2-3">
        <title>C. State Machines</title>
        <p>In order to increase readability of trait functionality
(especially at the modeling level) and to provide abstract
elements in traits, we are also working on enabling state
machines to be included in traits. This will provide a way of
reusing state machines at the modeling level. Although this
should create a powerful mechanism, we will need to find a
straightforward way to manage conflict in trait composition and
enable renaming states, removing transitions, and so on.</p>
      </sec>
      <sec id="sec-2-4">
        <title>D. Constraints</title>
        <p>Constraints provide a straightforward mechanism that is
being used increasingly in modeling and certain programming
languages. They can be applied to traits so as to put restrictions
on elements (such as provided methods, associations, and so
on). Constraints must follow special rules to enable trait
composition and so they can be used by classes with conflicting
constraints. This proposal requires a deep analysis (like that
needed for state machines.</p>
      </sec>
      <sec id="sec-2-5">
        <title>E. Code generation</title>
        <p>
          We are developing our work in the context of Umple [
          <xref ref-type="bibr" rid="ref1 ref2">1,2</xref>
          ],
which has comprehensive code generation from models, with
several targeted programming languages. Umple incorporates
both code and model; a given program can consist primarily of
traditional code, or primarily of abstract model elements. Our
traits mechanism will operate as a model transformation
operating on both traditional code and model elements, prior to
the invocation of code generation from the model elements. As
a result traits will become available in programming languages
like C++ and Java. In our transformation we focus on
programming languages which do not support traits at all. For
programming languages which support traits explicitly or
implicitly, it is better to have another transformation
mechanism which directly maps modeling elements (traits) to
specific structure/keywords in the languages. In this way, we
can achieve much better traceability between models and the
generated code. We should indicate that our transformation
mechanism can also be used for those languages if we are not
interested in getting benefits of those structures and keywords.
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV. PRELIMINARY WORK</title>
      <p>We have implemented the some parts of our work in
Umple, a textual modeling language that permits embedding of
programming concepts into models. It is following syntactic
conventions of C-family languages, and adding constructs to
such languages. The primary top-level entities are classes,
interfaces and traits (which resulted from this research). Each
such entity is declared using a keyword (‘class’, ‘interface’, or
‘trait’) followed by the name of the entity and then matching
braces surrounding a series of elements. The elements inside
the top-level constructs can include attributes (declared in a
manner similar to variables, but implying additional
semantics), methods (declared as in other C-family languages),
associations, constraints, isA directives (for generalization),
stereotypes, and state machines. Indeed, we have decided to go
with Umple because it has comprehensive code generation for
several programming languages, provides a textual syntax
which brings more expressiveness, supports state machines and
constraint along with the code generation for them, and finally
has been developed in our own team. Moreover, it should be
expressed that our proposed extensions are not just applicable
in Umple and they can be used in other modeling languages,
for example, UML through stereotypes. To achieve our goal,
we first implemented traditional features of traits and their
conflict resolution methods. This included required and
provided methods, renaming and removing provided methods,
and finally trait composition. We also added a new mechanism
which allowed changes to visibility of provided methods. Since
there is no support for traits in general-purpose programming
languages such as Java and C++, we developed a model
transformation, which implements traits with basic elements in
these languages. In fact, this transformation permits one to use
traits at the modeling level without worries about their
implementation within these languages.</p>
      <p>We implemented required interfaces, associations, and
template parameters with their constraints mechanism. The
implementation includes their definitions, conflict resolutions,
static type checking, and model transformations. Furthermore,
we introduced a preliminary version for state machines and
constraints in traits. We still need to further investigate
composition and conflict resolution mechanisms in the context
of traits, associations in traits, and their provided methods. This
will become more critical when they are mixed with template
parameters.</p>
    </sec>
    <sec id="sec-4">
      <title>V. EVALUATION The following two sections Planned and Progress describe our evaluation process.</title>
      <sec id="sec-4-1">
        <title>A. Planned</title>
        <p>We have planned two phases to evaluate our research. In
the first phase, we are applying our approach to several large
open source systems implemented in Java or Umple. The
objective are to determine how much improvement will be
achieved in terms of lines of code (LOC), how traits behave at
the modeling level, and whether or not we can have full
functional systems based on traits at the modeling level. This
will allow us to determine whether or not there is a reusability
issue in current software systems that can be solved by our
approach. It also helps us recognize real behavior of traits at the
modeling level and prove the application of our proposal.</p>
        <p>The second phase of evaluation is to develop a system from
scratch, with extensive use of traits. This will allow us to
determine the effectiveness of our work in model-driven
software development.</p>
        <p>Our main output of the evaluation phase is to prove the
usability of traits along with our extended features at the
modeling level and also to confirm that a system can be
completely developed based on traits at the modeling level
without worries about implementation challenges. Usefulness
of traits has already been proved and we expect to have the
same benefits and even more while we are working at the
modeling level. Some of criteria which are going to be
evaluated are number of reusable elements, granularity of
elements, modularity of the system, line of codes, number of
classes, traits, and their methods, and understandability of
design.</p>
      </sec>
      <sec id="sec-4-2">
        <title>B. Progress</title>
        <p>
          So far we have completed the majority of phase one. We
started searching for opportunities to add traits to systems the
Umple compiler and JHotDraw [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]. The latter had already
been converted to Umple. These systems have 39782 and
77647 Umple LOC respectively. An off-the-shelf tool named
CodePro Analytix [
          <xref ref-type="bibr" rid="ref29">29</xref>
          ] was used to detect duplicated code.
Afterwards, a manual process was utilized to consider
converting them to traits.
        </p>
        <p>In the first round of the process, we discovered methods
which have the same signature and body. Each method was
considered as a trait and then the required methods were
recognized. The benefit of doing in this way is to first uncover
fine-grained traits and then, when needed, to compose them
into composite traits. In order to guarantee to have correct
future clients for traits, the interfaces of each class were
explored. If they were crucial for the method, we considered
them as required interfaces.</p>
        <p>Next, we found methods which had a) the same number and
order of parameters but different types, and b) the same body.
We again applied the same process, which is assigning each
method to a trait and discovering the required methods and
required interfaces. Based on the differences in types, template
parameters were added to the traits. Afterwards, the names of
different types were substituted for template parameters. When
special restrictions were recognized needed for binding the
values of template parameters, they were applied to parameters.
The results showed having better reusable elements, reduction
in the risk of errors due to duplication, improvement of the
understandability of the system, and somehow code volume
reduction.</p>
        <p>Despite the fact we got an improvement, we have not yet
been able to extract state machines and other modeling
elements. Therefore, we are planning to apply our approach to
two more systems and then we will start developing two
systems from scratch.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>VI. POTENTIAL APPLICATIONS</title>
      <p>The features proposed open new opportunities for traits to
be used in different applications. The first is developing
libraries based on traits for the most-used functionality. For
instance, the functionality related to reading from and writing
to files are used in the majority of software systems. These
appear as simple methods with routine commands inside.
Typically, they are implemented in classes (often as static
methods) and used in other classes. There is an issue regarding
having those methods in classes which already have
superclasses. In this case, we have to import those classes and
write wrappers for their methods. This takes effort and creates
performance issues because of the overhead of wrappers. By
having those methods in traits, we are able to use them directly
in classes and even can change their visibilities and give them
different names if needed. Potential performance issues will be
resolved because the methods will be considered as native
methods of the classes. At the current state of our research, we
are investigating how we can find and extract such useful
reusable traits.</p>
      <p>
        The second opportunity is related to developing a
repository for design patterns. Extended traits with template
parameters, required interfaces, and associations bring a
mechanism by which we can apply patterns directly to
candidate classes. The structure of patterns is encapsulated in
traits in terms of associations. The dynamics of associations is
given by template parameters. The proper classes that can be
used as patterns are checked by required interfaces of traits. We
plan to conduct research like that conducted when investigating
implementing potential design patterns by aspect-oriented
programming [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>The third opportunity is associated with software product
lines. Traits are fine-grained elements that can also become
more coarse-grained though composition. They can be applied
to any level of inheritance hierarchy as well. Traits serve as a
mechanism for conflict resolution, which can be used for
configuration in software product lines (SPLs.) In other words,
we think of having configurable artifacts in terms of traits and
applying them freely in an SPL. When needed, we can remove
and rename functionality. This potential and new extended
features in the modeling level may provide a strong
configuration mechanisms for SPLs. We have made a small
move in this direction by allowing change the visibilities of
provided methods. This is not applicable for conflict resolution
but is useful for SPLs. We plan to move in this direction after
completing our work on full traits with modeling extensions
such as state machines and constraints.</p>
    </sec>
    <sec id="sec-6">
      <title>VII. THE EXPECTED CONTRIBUTION</title>
      <p>The expectation at the end of this PhD research is to have
full traits at the modeling level. We expect to be able to use
such modeling elements easily in traits and to generate code for
them. We also expect to get positive results for the applications
mentioned in Section VI with much more focus on variability
and separation of concerns.</p>
      <p>
        The plan for the remaining time of this research is to
investigate completely the use of state machines in traits and
also implement them in Umple. Afterwards, we integrate
constraints into traits and explore how it can affect the design
of systems. When we are done with these features and have
fully-functional model-based traits, we design and implement a
functional system from scratch based on our proposed ideas.
We also planned to explore how many designed patterns
described in GoF [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] can be implemented by traits.
      </p>
    </sec>
    <sec id="sec-7">
      <title>VIII. PUBLICATIONS</title>
      <p>The first paper related to this research has been submitted to
the journal Software and System modeling and we passed the
first review. It includes details of the work with more examples
and the results of the first phase of evaluation.</p>
    </sec>
    <sec id="sec-8">
      <title>IX. ACKNOWLEDGMENT</title>
      <p>I would like to thank my supervisor Timothy Lethbridge,
for the encouragement and advice provided throughout my
time. I have been extremely lucky to have a supervisor who
cared so much about my work and responded to my questions
so promptly.</p>
    </sec>
    <sec id="sec-9">
      <title>X. CONCLUSION AND FUTURE WORK</title>
      <p>In this paper, we explained our research towards extending
traits so they can be used in model driven software
development. In particular we are working on adding state
machines, associations, and constraints in traits. We have
already completed the integration of template parameters with
associations and also required interfaces in traits in order to
have genericity and well-controlled traits respectively. As
future research, we want to develop a library of reusable
patterns using traits as a basis. We also want to apply an
extended version of our work to facilitate work in software
product lines and explore variability based on traits.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Badreddin</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Forward</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Lethbridge</surname>
          </string-name>
          , T.C.
          <article-title>Model oriented programming: an empirical study of comprehension</article-title>
          .
          <source>Proceedings of the 2012 Conference of the Center for Advanced Studies on Collaborative Research</source>
          , IBM Corp.
          <article-title>(</article-title>
          <year>2012</year>
          ),
          <fpage>73</fpage>
          -
          <lpage>86</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Badreddin</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Forward</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Lethbridge</surname>
          </string-name>
          , T.C.
          <article-title>Exploring a Model-Oriented and Executable Syntax for UML Attributes</article-title>
          . Software Engineering Research, Management and Applications,
          <source>Studies in Computational Intelligence</source>
          <volume>496</volume>
          , (
          <year>2013</year>
          ),
          <fpage>33</fpage>
          -
          <lpage>53</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Bergel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Wuyts</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <article-title>Stateful traits</article-title>
          .
          <source>Advances in Smalltalk, Proceedings of 14th International Smalltalk Conference (ISC</source>
          <year>2006</year>
          ),
          <string-name>
            <surname>LNCS</surname>
          </string-name>
          , (
          <year>2007</year>
          ),
          <fpage>66</fpage>
          -
          <lpage>90</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Bergel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Wuyts</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <article-title>Stateful traits and their formalization</article-title>
          .
          <source>Computer Languages, Systems &amp; Structures</source>
          <volume>34</volume>
          ,
          <fpage>2</fpage>
          -
          <lpage>3</lpage>
          (
          <year>2008</year>
          ),
          <fpage>83</fpage>
          -
          <lpage>108</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Bettini</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Damiani</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Schaefer</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          <article-title>Implementing software product lines using traits</article-title>
          .
          <source>the ACM Symposium on Applied Computing</source>
          , (
          <year>2010</year>
          ),
          <fpage>2096</fpage>
          -
          <lpage>2102</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Bettini</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Damiani</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <article-title>Pure trait-based programming on the Java platform</article-title>
          .
          <source>Proceedings of the 2013 International Conference on Principles and Practices of Programming on the Java Platform Virtual Machines, Languages, and Tools</source>
          , ACM Press (
          <year>2013</year>
          ),
          <fpage>67</fpage>
          -
          <lpage>78</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Bono</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Damiani</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Giachino</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          <article-title>Separating type, behavior, and state to achieve very fine-grained reuse</article-title>
          .
          <source>Electronic proceedings of Formal Techniques for Java-like Programs (FTfJP)</source>
          , (
          <year>2007</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Bracha</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Cook</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          <article-title>Mixin-based inheritance</article-title>
          .
          <source>ACM SIGPLAN Notices</source>
          <volume>25</volume>
          ,
          <issue>10</issue>
          (
          <year>1990</year>
          ),
          <fpage>303</fpage>
          -
          <lpage>311</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Denier</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <article-title>Traits Programming with AspectJ</article-title>
          .
          <source>RSTI-L'objet 11</source>
          ,
          <issue>3</issue>
          (
          <year>2005</year>
          ),
          <fpage>69</fpage>
          -
          <lpage>86</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schärli</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wuyts</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.P.</given-names>
          </string-name>
          <string-name>
            <surname>Traits</surname>
          </string-name>
          :
          <article-title>A Mechanism for Fine-grained Reuse</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          <volume>28</volume>
          ,
          <issue>2</issue>
          (
          <year>2006</year>
          ),
          <fpage>331</fpage>
          -
          <lpage>388</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Duggan</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Techaubol</surname>
          </string-name>
          , C.-C.
          <article-title>Modular mixin-based inheritance for application frameworks</article-title>
          .
          <source>ACM SIGPLAN Notices</source>
          <volume>36</volume>
          ,
          <issue>11</issue>
          (
          <year>2001</year>
          ),
          <fpage>223</fpage>
          -
          <lpage>240</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Gamma</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Helm</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          , Johnson, R., and
          <string-name>
            <surname>Vlissides</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <article-title>Design patterns: elements of reusable object-oriented software</article-title>
          .
          <source>Addison-Wesley Longman Publishing Co., Inc</source>
          .,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Hannemann</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kiczales</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          <article-title>Design pattern implementation in Java and aspectJ</article-title>
          .
          <source>ACM SIGPLAN Notices; the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications; 37</source>
          ,
          <issue>11</issue>
          (
          <year>2002</year>
          ),
          <fpage>161</fpage>
          -
          <lpage>173</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Igarashi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pierce</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Wadler</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Featherweight</surname>
          </string-name>
          <article-title>Java: a minimal core calculus for Java and GJ</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          <volume>23</volume>
          ,
          <issue>3</issue>
          (
          <year>2001</year>
          ),
          <fpage>396</fpage>
          -
          <lpage>450</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Kiczales</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lamping</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mendhekar</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , et al.
          <article-title>Aspect-oriented programming</article-title>
          .
          <source>the European Conference on Object-Oriented Programming (ECOOP)</source>
          ,
          <source>Springer-Verlag LNCS 1241</source>
          , (
          <year>1997</year>
          ),
          <fpage>220</fpage>
          -
          <lpage>242</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Liquori</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Spiwack</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Featherweight-trait Java</surname>
          </string-name>
          :
          <article-title>A traitbased extension for FJ</article-title>
          . (
          <year>2004</year>
          ),
          <fpage>27</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Liquori</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Spiwack</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <article-title>FeatherTrait: A Modest Extension of Featherweight Java</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          <volume>30</volume>
          ,
          <issue>2</issue>
          (
          <year>2008</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Murphy-Hill</surname>
            ,
            <given-names>E.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Quitslund</surname>
            ,
            <given-names>P.J.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.P.</given-names>
          </string-name>
          <article-title>Removing duplication from java.io. Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications</article-title>
          , ACM Press (
          <year>2005</year>
          ),
          <fpage>282</fpage>
          -
          <lpage>291</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Quitslund</surname>
            ,
            <given-names>P.J.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.P.</given-names>
          </string-name>
          <article-title>Java with Traits - Improving Opportunities for Reuse</article-title>
          .
          <source>Proceedings of the 3rd International Workshop on MechAnisms for SPEcialization, Generalization and inHerItance (ECOOP )</source>
          , (
          <year>2004</year>
          ),
          <fpage>45</fpage>
          -
          <lpage>49</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Quitslund</surname>
            ,
            <given-names>P.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Murphy-Hill</surname>
            ,
            <given-names>E.R.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.P.</given-names>
          </string-name>
          <string-name>
            <surname>Supporting</surname>
          </string-name>
          <article-title>Java traits in Eclipse</article-title>
          .
          <source>Proceedings of the 2004 OOPSLA workshop on eclipse technology eXchange</source>
          , ACM Press (
          <year>2004</year>
          ),
          <fpage>37</fpage>
          -
          <lpage>41</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Quitslund</surname>
            ,
            <given-names>P.J.</given-names>
          </string-name>
          <string-name>
            <surname>Java</surname>
          </string-name>
          Traits - Improving Opportunities for Reuse.
          <source>Technical Report CSE-04-005</source>
          , OGI School of Science &amp; Engineering Oregon Health &amp; Science University,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Sakkinen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <article-title>Disciplined inheritance</article-title>
          .
          <source>European Conference on Object-Oriented Programming (ECOOP)</source>
          , (
          <year>1989</year>
          ),
          <fpage>39</fpage>
          -
          <lpage>56</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>Schärli</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Traits</surname>
          </string-name>
          <article-title> : Composable Units of Behavior</article-title>
          . Beaverton, USA; Bern, Switzerland,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Schärli</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.P.</given-names>
          </string-name>
          <string-name>
            <surname>Traits</surname>
          </string-name>
          <article-title>: Composable Units of Behaviour</article-title>
          .
          <source>ECOOP 2003 - European Conference on Object-Oriented Programming</source>
          , volume
          <volume>2743</volume>
          of Lecture Notes in Computer Science, Springer Berlin Heidelberg (
          <year>2003</year>
          ),
          <fpage>248</fpage>
          -
          <lpage>274</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <surname>Schärli</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nierstrasz</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ducasse</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Roel</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          , and
          <string-name>
            <surname>Black</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Traits</surname>
          </string-name>
          <article-title> : The Formal Model</article-title>
          .
          <source>Technical Report CSE-02- 013</source>
          ,CSETech, Software Composition Group, University of Bern, Switzerland,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Snyder</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <article-title>Encapsulation and inheritance in object-oriented programming languages</article-title>
          .
          <source>ACM SIGPLAN Notices</source>
          <volume>21</volume>
          ,
          <issue>11</issue>
          (
          <year>1986</year>
          ),
          <fpage>38</fpage>
          -
          <lpage>45</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          <source>[27] JHotDraw 7</source>
          .
          <year>2004</year>
          . http://www.randelshofer.ch/oop/jhotdraw/.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <surname>AspectJ</surname>
          </string-name>
          .
          <year>2014</year>
          . https://www.eclipse.org/aspectj/.
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>CodePro</given-names>
            <surname>Analytix</surname>
          </string-name>
          .
          <year>2014</year>
          . https://developers.google.com/javadev-tools/codepro/doc/.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>