<!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>Native Support for UML and OCL Primitive Datatypes Enriched with Uncertainty in USE ?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Tool Paper</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Victor Ortiz</string-name>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Loli Burgueño</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Antonio Vallecillo</string-name>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Martin Gogolla</string-name>
          <email>gogolla@uni-bremen.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institut LIST, CEA, Université Paris-Saclay</institution>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Open University of Catalonia</institution>
          ,
          <country country="ES">Spain</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Bremen</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>University of Málaga</institution>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <fpage>59</fpage>
      <lpage>66</lpage>
      <abstract>
        <p>Measurement uncertainty, an essential property of any physical system, is gaining attention in the modeling community due to the need to specify these kinds of system properties. Some notations already provide support for representing this information, but there is also the need to count on tools with native support for datatypes enriched with measurement uncertainty, able to manage it in a natural and transparent manner. This paper describes the extension that we have developed for the tool UML-based Specification Environment (USE) for supporting the primitive UML/OCL datatypes with uncertainty information.</p>
      </abstract>
      <kwd-group>
        <kwd>UML/OCL datatype</kwd>
        <kwd>Measurement uncertainty</kwd>
        <kwd>UML/OCL tool</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Physical systems operating in the real world are always subject to uncertainty.
In most of the cases, measurement uncertainty [
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ] is a property which
cannot be disregarded, i.e., we cannot assume that the measures taken by physical
components as well as their state (position, temperature, etc.) are precise values.
For instance, mechanical arms need to take into account the precision of their
movements, the tolerance of their components and their decalibration over time.
Hence, when modeling and simulating physical systems, we need to capture and
operate with their intrinsic uncertainty. Due to this need to specify and
represent these kinds of system properties, uncertainty is gaining attention in the
modeling community.
      </p>
      <p>
        In previous works [
        <xref ref-type="bibr" rid="ref2 ref3 ref5">2, 3, 5</xref>
        ], we defined an extension to the UML and OCL
primitive datatypes to represent and operate with measurement uncertainty. In
particular, we extended the types Real, Integer, UnlimitedNatural, Boolean
and String and created their corresponding datatypes UReal, UInteger,
UUnlimitedNatural, UBoolean and UString as well as their operations. All these
operations were created/adapted to allow the interoperability of compatible
datatypes. For instance, the infix operator +, originally defined for the numeric
types UnlimitedNatural, Integer and Real, was adapted to operate with the
numeric uncertain types, too. This way, a user can add, for example, an Integer
number and a UReal number, and the result is then a UReal number.
Furthermore, we also defined an extension for the OCL operations on collections (i.e.,
select, forAll, etc.) to account for the new types of elements. Finally, we
provided operations to convert values between the new and old datatypes.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref3 ref5">5, 3</xref>
        ], we provided a Java library with the implementation of the uncertain
datatypes as well as their operations, and implemented a proof of concept in the
tool USE [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In the current contribution, we have completed the implementation
and explain details of the approach that we followed, and how we have built our
architecture. Although we have developed our extension for the tool USE, this
approach could also be used to extend other UML/OCL tools.
      </p>
      <p>The rest of the paper is structured as follows. Sect. 2 explains the related
concepts to uncertainty in UML/OCL datatypes and the tool USE, and Sect. 3
details the technical details of the implementation in USE. Finally, Sect. 4 presents
our conclusions and outlines future work.
2
2.1</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <sec id="sec-2-1">
        <title>Uncertainty in UML/OCL Datatypes</title>
        <p>
          In [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ], to extend the OCL/UML primitive datatypes, we applied type
embedding [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], which is one kind of subtyping [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. We say that type A is a subtype of
type B (denoted as A &lt;: B) if all elements of A belong to B and operations of B,
when applied to elements of A, behave the same as those of A [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. If A &lt;: B, then
we also say that B is a supertype of A. For instance, Integer is a subtype of Real
because every Integer number can be viewed as a Real number whose decimal
part is zero. This concept is referred to as injecting Integer numbers into type
Real. Furthermore, operations that are defined on the type Real, when applied
to numbers of the type Integer, behave as those operations of type Integer.
        </p>
        <p>Then, for extending a primitive OCL datatype &lt;T&gt;, we defined an embedding
into a supertype U&lt;T&gt; that incorporates information about the uncertainty in
the values of &lt;T&gt; and defines the operations for the extended type, which are
also applicable to the base type.</p>
        <p>
          The uncertainty information, both its meaning and the way in which it is
propagated, varies depending on whether the values of the base type are numbers,
Booleans or Strings. For example, UBoolean values are pairs (b, c), where b is
a Boolean value and c is a Real number in the range [0; 1] that represents the
confidence in b; while a UReal number is a pair (x, u) where x is a Real number
and u is its standard uncertainty as stated by the ISO Guide to the Expression
of Uncertainty in Measurement (GUM) [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
        </p>
        <p>The subtyping (&lt;:) and embedding (,→) relationships considering both the
standard and the extended datatypes are as follows:</p>
        <sec id="sec-2-1-1">
          <title>UnlimitedNatural\{*} &lt;: Integer &lt;: Real</title>
          <p>→, →, →,</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>UUnlimitedNatural\{*} &lt;: UInteger &lt;: UReal</title>
          <p>Boolean</p>
          <p>→,
UBoolean</p>
          <p>String</p>
          <p>→,
UString</p>
          <p>
            The example in Fig. 1 shows a model, taken from [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ], in which we have
applied our extended datatypes. The system represents an Ozobot robot (see
https://ozobot.com) that is able to move in the direction its head points to.
These kinds of robots accept two type of commands: one to rotate the head at
a certain angle, and another one to move forward some distance. The mission
determines the target position the robot is supposed to reach with the plan.
Positions are given by coordinates in a planar surface. We are interested in
analyzing a robot’s behavior, and, in particular, whether the sequence of movements
defined in its plan (which is given by a set of movements) fulfills the mission,
i.e., it reaches the target position. For this, operation coincide() determines
whether two coordinates are equal.
          </p>
          <p>Class diagram</p>
          <p>Robot * robot
position : Coordinate
headsTo : UReal
performAllMoves() 1 robot</p>
          <p>Target
1 target position : Coordinate
Mission</p>
          <p>Plan Movement</p>
          <p>move : UReal
* moves {ordered} rotate : UReal
performMove()</p>
          <p>Coordinate
x : UReal
y : UReal
coincide(c : Coordinate) : UBoolean
distance(c : Coordinate) : UReal</p>
          <p>Interestingly, the behavior of the system with uncertainty uncovers the fact
that the precision of the robots movements has a significant impact on their
plans, since it accumulates very soon and therefore the missions easily fail.
Therefore the importance to have measurement uncertainty into account when
modeling a system that deals with physical quantities; otherwise the models do
not provide faithful descriptions of the systems they try to represent.
2.2</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>The UML-based Specification Environment (USE)</title>
        <p>
          USE [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] is a modeling tool that allows the development and validation of UML
models enriched with OCL expressions. The tool is open-source and distributed
under a GNU General Public License.
        </p>
        <p>USE provides mechanisms for the extension with new functionality by means
of user-defined Ruby functions (placed in files under the folder oclextensions).
All code available in this folder is loaded when USE is opened.</p>
        <p>
          This extension mechanism enables the definition of new operations (and their
behavior) for the predefined datatypes, but it does not allow the creation of new
datatypes. In order to add new datatypes, the USE source code has to be forked
and its native implementation has to be modified, which is what we did as a
proof of concept in our previous work [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
        <p>
          Internally, the USE tool uses ANTLR to define the grammars that it
supports (for USE class models, OCL, SOIL [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], ShellCommands and other USE
languages) and its source code is written in Java. In the following section, we
explain how we have extended the grammars with the new uncertain datatypes
and how we have developed their semantics in Java.
3
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Extension of USE</title>
      <p>Despite its graphical interface, the specification of models in USE is textual.
Thus, the first step when adding new functionality to the tool is to update the
grammar of its languages. In our case, we had to modify its OCL grammar which
is located in its base file org.tzi.use.parser.base.OCLBase.gpart. Listing 1.2
shows the part of the grammar that we modified. In particular, we added the
code in lines 7–18 and the new rule in lines 20–22.</p>
      <p>Listing 1.2. Extended USE grammar.
1 literal returns [ ASTExpression n ] :
2 t=' true ' { $n = new A S T B o o l e a n L i t e r a l ( true ) ; }
3 | f=' false ' { $n = new A S T B o o l e a n L i t e r a l ( false ) ; }
4 | i=INT { $n = new A S T I n t e g e r L i t e r a l ( $i ) ; }
5 | r=REAL { $n = new ASTRealLiteral ( $r ) ; }
6 | s=STRING { $n = new A ST S tr i ng L it e ra l ( $s ) ; }
7 | ' UString ' LPAREN usve=a d d i t i v e E x p r e s s i o n COMMA
8 usue=a d d i t i v e E x p r e s s i o n RPAREN
9 { $n = new A S T U S t r i n g L i t e r a l ( $usve . n , $usue . n ) ; }
10 | ' UReal ' LPAREN urve=a d d i t i v e E x p r e s s i o n COMMA
11 urue=a d d i t i v e E x p r e s s i o n RPAREN
12 { $n = new AST URealL itera l ( $urve . n , $urue . n ) ; }
13 | ' UBoolean ' LPAREN ubve=c o n d i t i o n a l I m p l i e s E x p r e s s i o n COMMA
14 ubpe=a d d i t i v e E x p r e s s i o n RPAREN
15 { $n = new A S T U B o o l e a n L i t e r a l ( $ubve . n , $ubpe . n ) ; }
16 | ' UInteger ' LPAREN uive=a d d i t i v e E x p r e s s i o n COMMA
17 uiue=a d d i t i v e E x p r e s s i o n RPAREN
18 { $n = new A S T U I n t e g e r L i t e r a l ( $uive . n , $uiue . n ) ; }
19 . . . ;
20 unc ertai ntyTyp e returns [ ASTType n ] :
21 name=(' UReal ' | ' UInteger ' | ' UBoolean ' | ' UString ' )
22 { $n = new ASTSimpleType ( $name ) ; } ;</p>
      <p>Then, using the ANTLR tools, the Java lexer, parser, tokens and listeners
were automatically generated.</p>
      <p>The implementation of datatypes in USE is done in a modular way. It
distinguishes between values and expressions, both of which have a type. Accordingly,
the Java source code that implements the datatypes is structured in three
packages, namely, org.tzi.use.uml.ocl.type, org.tzi.use.uml.ocl.value, and
org.tzi.use.uml.ocl.expr, which is shown in the top part of Fig. 2. The
package at the bottom, called atenearesearchgroup.uncertainty.uDatatypes
contains the Java library that we have developed with the behavior of the types
UUnlimitedNatural, UInteger, UReal, UBoolean and UString, which is used
by the other three packages.</p>
      <p>The content of the extended USE package org.tzi.use.uml.ocl.type is
displayed in Fig. 3. The elements in white are the USE original classes, whilst
the interfaces and the elements shaded in gray are the new classes that we
have added. We created an abstract class called UncertainType from where
all the uncertain types inherit. Each class defining a type contains the
constructor of the type and the OCL methods for type checking. For instance,
the class UReal contains its constructor and methods such as isTypeOfUReal,
isKindOfUReal, isKindOfNumber and isKindOfOclAny. We have also modified
the original USE classes to add the operations that allow the identification of the
new datatypes as their supertypes of the original datatypes, when applicable. For
instance, we have added to the class RealType the methods isTypeOfUReal()
and isKindOfUReal().</p>
      <p>
        The package org.tzi.use.uml.ocl.value contains a similar hierarchy of
elements, as Fig. 4 shows. This package uses the Java library that implements
the behavior of the uncertain datatypes [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        The new classes that we have created in USE implement the Adapter
design pattern [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]; they act as a wrapper for the classes in the library. This way,
for instance, the new USE class UIntegerValue contains an attribute of the
class UInteger from the library, and has to define only its comparison methods
(equals, compareTo, etc.) to allow the interoperability with compatible values
such as Real and UReal. Apart from the newly created classes, we also had to
modify the abstract class Value to add a method with the signature is&lt;T&gt;()
for each datatype, where &lt;T&gt; is the name of the new datatype (isUReal(),
isUInteger(), etc.).
      </p>
      <p>Finally, once the types and value of the new datatypes were created, the last
step was to make them available for their use inside OCL expressions and make
their operations available, too. Regarding the latter, we decided to overload the
existing operators such as “+”. Then, a user can perform the operation “+” with
any numeric parameter independently whether it is uncertain or not.</p>
      <p>In USE, this is implemented in the package org.tzi.use.uml.ocl.expr,
which contains a class for each datatype. Then, for each uncertain datatype, we
have created a new class with the following signature: StandardOperations&lt;T&gt;
where &lt;T&gt; is the name of the new datatype—for instance,
StandardOperationsUBoolean. Furthermore, we had to register all the operations in the USE class
OpGeneric.</p>
      <p>Regarding the operations on collections, we distinguish between those which
return a boolean value (such as forAll, exists and includes) and those which
return objects (such as select, any and count). The former operations are
overloaded and only when they contain uncertain values, they return a UBoolean—in
the rest of the cases, they stick to their original behavior and return a Boolean
value. For the latter operations, we decided to create new versions of them with
the prefix “u” for dealing with uncertain values—for instance, uSelect. Each
operation is defined in a Java class that inherits from ExpQuery.</p>
      <p>Finally, we followed a test-driven methodology when extending use. Thus,
we extensively used the testing facilities that USE provides for unit and system
testing. Following the same folder structure and style in which all the tests were
developed, we included our tests under the folder src/test. We created new
test classes for the new functionality that checked both its grammar and its
behavior—, and executed them in batch using ANT.</p>
    </sec>
    <sec id="sec-4">
      <title>Conclusions and Future Work</title>
      <p>We have presented an extension of the tool USE to enable the application of
native uncertain types for capturing measurement uncertainty, and we have shown
how we structured and implemented the extension. Although the aim of this
work was to extend the UML/OCL primitive datatypes that are supported by
USE with our library of uncertain types, the same approach could be used to
extend other UML/OCL tools, if they have an internal organization for
supporting the datatypes. Our uncertainty extension has been already applied in several
middle-sized models — see, e.g., http://bit.ly/UncertainContracts-Examples.</p>
      <p>There are several lines of research that we plan to address soon. First, we
would like to check and improve (if needed) the efficiency of the execution of
operations and to extend the evaluation browser with aspects of uncertainty. We
also plan to check how far other OCL evaluators can be extended in this way,
and study the effort required to do so.</p>
      <p>Acknowledgements. We would like to thank the reviewers for their
constructive comments on previous versions of this paper. This work has been partially
supported by Spanish Research Projects PGC2018-094905-B-I00 and
TIN201675944-R.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>America</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Inheritance and subtyping in a parallel object-oriented language</article-title>
          .
          <source>In: Proc. of ECOOP'87</source>
          . pp.
          <fpage>234</fpage>
          -
          <lpage>242</lpage>
          . Springer (
          <year>1987</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Bertoa</surname>
            ,
            <given-names>M.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moreno</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barquero</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Burgueño</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Troya</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Expressing measurement uncertainty in OCL/UML datatypes</article-title>
          .
          <source>In: Proc. of ECMFA'18. LNCS</source>
          , vol.
          <volume>10890</volume>
          , pp.
          <fpage>46</fpage>
          -
          <lpage>62</lpage>
          . Springer (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Bertoa</surname>
            ,
            <given-names>M.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moreno</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Burgueño</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Incorporating measurement uncertainty into OCL/UML primitive datatypes</article-title>
          .
          <source>Software and System Modeling</source>
          (
          <year>2019</year>
          ). https://doi.org/10.1007/s10270-019-00741-0
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Boute</surname>
          </string-name>
          , R.T.:
          <article-title>A heretical view on type embedding</article-title>
          .
          <source>SIGPLAN Not</source>
          .
          <volume>25</volume>
          (
          <issue>1</issue>
          ),
          <fpage>25</fpage>
          -
          <lpage>28</lpage>
          (
          <year>Jan 1990</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Burgueño</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bertoa</surname>
            ,
            <given-names>M.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moreno</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Expressing confidence in models and in model transformation elements</article-title>
          .
          <source>In: Proc. of MODELS'18</source>
          . pp.
          <fpage>57</fpage>
          -
          <lpage>66</lpage>
          . ACM (
          <year>2018</year>
          ). https://doi.org/10.1145/3239372.3239394
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Burgueño</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mayerhofer</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wimmer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Using physical quantities in robot software models</article-title>
          .
          <source>In: Proc. of RoSE'18</source>
          . pp.
          <fpage>23</fpage>
          -
          <lpage>28</lpage>
          . ACM (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Büttner</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>On OCL-based imperative languages</article-title>
          .
          <source>Sci. Comput</source>
          . Program.
          <volume>92</volume>
          ,
          <fpage>162</fpage>
          -
          <lpage>178</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <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.,
          <string-name>
            <surname>Vlissides</surname>
          </string-name>
          , J.: Design Patterns:
          <article-title>Elements of Reusable Object-oriented Software</article-title>
          .
          <string-name>
            <surname>Addison-Wesley Longman</surname>
          </string-name>
          (
          <year>1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Gogolla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Büttner</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Richters</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>USE: A UML-based specification environment for validating UML and OCL</article-title>
          . Sci. Comp. Prog.
          <volume>69</volume>
          ,
          <fpage>27</fpage>
          -
          <lpage>34</lpage>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. JCGM 100:
          <year>2008</year>
          :
          <article-title>Evaluation of measurement data - Guide to the expression of uncertainty in measurement (GUM). Joint Committee for Guides in Metrology (</article-title>
          <year>2008</year>
          ), http://www.bipm.org/utils/common/documents/jcgm/JCGM_100_2008_E.pdf
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. JCGM 200:2012:
          <article-title>International Vocabulary of Metrology - Basic and general concepts and associated terms (VIM), 3rd edition</article-title>
          .
          <article-title>Joint Committee for Guides in Metrology (</article-title>
          <year>2012</year>
          ), http://www.bipm.org/utils/common/documents/jcgm/JCGM_200_
          <year>2012</year>
          .pdf
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Liskov</surname>
            ,
            <given-names>B.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wing</surname>
            ,
            <given-names>J.M.:</given-names>
          </string-name>
          <article-title>A behavioral notion of subtyping</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst</source>
          .
          <volume>16</volume>
          (
          <issue>6</issue>
          ),
          <fpage>1811</fpage>
          -
          <lpage>1841</lpage>
          (
          <year>Nov 1994</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>