<!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>Leveraging a Model Transformation Chain for Semi-Automatic Source Code Generation on the Android Platform</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Daniel Sanchez</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universidad Distrital Francisco Jose de Caldas</institution>
          ,
          <addr-line>Bogota</addr-line>
          ,
          <country country="CO">Colombia</country>
        </aff>
      </contrib-group>
      <fpage>150</fpage>
      <lpage>164</lpage>
      <abstract>
        <p>The software industry nowadays is dealing with some problems like the fulfillment of quality attributes such as Portability, Interoperability, Maintenance, and Documentation. That is why the Object Management Group (OMG) proposed in 2000 the Model Driven Architecture (MDA) as an Interoperability specification. Thus, the purpose of this paper is to show the creation of a complete Model Transformation Chain that will refine a domain model to native code for the Android platform that will manage peripherals in mobile devices.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Model Driven Engineering</kwd>
        <kwd>Model Driven Architecture</kwd>
        <kwd>Mobile Applications</kwd>
        <kwd>Model Transformation Chain</kwd>
        <kwd>Model refining</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        According to Bezivin [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], Object technology initially relied on mechanisms like class inheritance
to promise application extensibility. However, it is now widely acknowledged that a more potent
form of application extensibility is achieved through plugins, as demonstrated by systems like
Eclipse. This plugin concept minimizes its dependence on class inheritance.
      </p>
      <p>Model-Driven Engineering (MDE) emphasizes and strives for abstract representations of the
knowledge and activities governing a specific application domain, as opposed to focusing solely
on computing concepts like algorithms.</p>
      <p>The primary objective of this project is to introduce a novel approach to developing mobile
applications by applying MDE concepts. This approach ofers several advantages compared to
traditional application development methods. It emphasizes the integration of expert domain
knowledge throughout the entire software construction process.</p>
      <p>
        Within the realm of MDE, there exists a vast terminology, various concepts, and numerous
areas of study. This project specifically concentrates on one of these areas of study: the Model
Transformation Chain. This choice is made because it efectively illustrates the unifying principle
that "everything is a model" [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>
        Conventional software development typically employs models like the Unified Modeling
Language (UML) solely during the analysis and design phases. The responsibility for
implementation then falls on the source code, creating a disconnect between these two aspects.
While a well-defined software architecture during the design phase may seem like an organized
approach, real-world scenarios often introduce challenges [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Development teams change
dynamically, and the initial developer may not be the one to complete the project. Furthermore,
software requirements evolve, necessitating changes in both the code and the model. In addition,
if the software must run on diferent platforms or environments, the development team must
rebuild the system for each platform, incurring additional time and costs. Embracing MDE
concepts involves creating a domain metamodel, which can be tailored to the specific needs
of each customer or problem. A modeler then constructs a model that adheres to this domain
metamodel, and the model undergoes a series of transformations within the Model
Transformation Chain to produce a final result. It’s important to note that not all transformations result in
a model [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. In our case, the final transformation yields a set of text files in a specific format,
efectively generating one or several apps designed to run on a designated platform.
      </p>
      <p>This process introduces a conceptual separation between execution platforms and
programming languages, shifting the focus from the modeling phase. Consequently, new roles emerge,
such as "modelers" and "metamodelers," responsible for creating models and metamodels using
a modeling language.</p>
      <p>
        This paper demonstrates the outcomes of a research endeavor that integrates prior findings as
discussed in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], alongside the establishment of the domain metamodel and model transformation
chain. Additionally, it incorporates the contributions outlined in [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], which involve defining the
architectural metamodel.
      </p>
      <p>The paper is structured as follows. Section 2 describes the concepts of Model Driven
Engineering. Section 3 presents the general overview of the Model Transformation Chain. Section 4
presents the description of the domain metamodel. Section 5 presents the description of the
architecture metamodel. Section 6 illustrates the transformations between each of the stages
presented in the Model Transformation Chain. Section 7 presents the future work and finally,
section 8 concludes the paper.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <p>This section introduces fundamental concepts relevant to the current research.</p>
      <sec id="sec-2-1">
        <title>2.1. Model Driven Engineering</title>
        <p>
          According to [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] The MDE approach does not have a singular objective. It encompasses various
pursued goals, including:
• Isolating business-neutral descriptions from platform-dependent implementations.
• Identifying, precisely expressing, separating, and combining specific system aspects
during development using domain-specific languages.
• Establishing precise relationships between these diverse languages within a
comprehensive framework.
• Enabling the articulation of operational transformations between them.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. MOF (Meta-Object Facility):</title>
        <p>
          MOF provides an open framework to deal with models, this defines the levels used by MDA and
it is the meta-meta model accepted by the MDA architecture. Also, define the interexchange
of models using XML Metadata Interchange (XMI) [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. MOF not only establishes the essential
levels of abstraction within MDA but also stands as the accepted meta-meta model underpinning
the entire MDA architecture. MOF defines two standards Complete MOF (CMOF) and Essential
MOF (EMOF) [
          <xref ref-type="bibr" rid="ref7 ref8 ref9">7, 8, 9</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>2.3. OCL (Object Constraint Language)</title>
        <p>OCL allows us to create restrictions in the model definitions and also is used by Atlas
Transformation Language (ATL) to define the rules to transform the models.</p>
      </sec>
      <sec id="sec-2-4">
        <title>2.4. Atlas Transformation Language (ATL)</title>
        <p>
          Since the core of this project is the model transformation, it was made a revision of ATL which
is a language that permits to create the transformation rules with OCL, this rule indicates to the
ATL virtual machine how to modify the properties of the input model in order to create the
output model conforms to the target metamodel [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. The chosen option for representing and
working with the models is EMF, a widely accepted choice within the community.
        </p>
        <sec id="sec-2-4-1">
          <title>2.4.1. Eclipse Modeling Framework (EMF)</title>
          <p>
            EMF, proposed by the Eclipse community, utilizes Ecore as its metamodel, aligning with EMOF.
This choice also enables support for XMI for model serialization/deserialization, fostering
interoperability with other software modeling tools [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ].
          </p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Model Transformation Chain</title>
      <p>
        Model transformations assume a significant role within the Model-Driven Engineering (MDE)
methodology. Crafting definitions for model transformations is anticipated to evolve into
a routine endeavor in model-driven software development [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Just as software engineers
currently benefit from conventional Integrated Development Environments (IDEs), compilers,
and debuggers for programming tasks, they should be similarly empowered by advanced MDE
tools and techniques for model transformation endeavors. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>The potential exists to string together multiple transformations in order to traverse diverse
model facets within the same system under examination. For instance, the final transformation
(which entails a model-to-text conversion producing the source code application) generates code
that more efectively embodies the nuances of the studied domain. Consequently, generating
code grounded in a domain model becomes achievable.</p>
      <p>To be able to make a model transformation, it is necessary that the two metamodels conform
to the same metameta model. In the present work that is accomplished given that the two
metamodels conform to Ecore, which conforms to EMOF, which, in turn, conforms to MOF.</p>
      <p>
        As articulated in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], the subsequent model transformation chain was proposed:
      </p>
      <p>
        Two transformations were established among three distinct models (the generated source
code is also considered a model) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Atlas Transformation Language (ATL) is employed as the
metamodel for model-to-model transformations, and Acceleo as the metamodel for model-to-text
transformations.
      </p>
      <p>Subsequently, we will introduce the various components comprising this sequence of
transformations.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Domain Metamodel</title>
      <p>
        Following the same nomenclature of other model languages accepted by the OMG, this proposal
of DSL was called as "Mobile Peripheral Model Language" from here only MPML. The initial
rendition of the domain metamodel was introduced in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Nevertheless, as time progressed,
multiple alterations were incorporated. The ensuing presentation reveals the ultimate
constituents within the metamodel. Next, it describes such elements and the interactions modeled
between them.
      </p>
      <sec id="sec-4-1">
        <title>4.1. Elements</title>
        <sec id="sec-4-1-1">
          <title>4.1.1. MPMLComponent</title>
          <p>Regarding the peripherals: this is the higher level of abstraction of the metamodel. It represents
every input sensor or output element to be modeled in the device. This element inherits all the
other peripherals.</p>
          <p>Starting with the input sensors (MPMLInputComponent), according to the website of Android
developers https://developer.android.com/guide/topics/sensors/sensors_overview.html there
exists the next classification of sensors
• Motion sensors: These sensors measure acceleration forces and rotational forces along
three axes. This category includes accelerometers, gravity sensors, gyroscopes, and
rotational vector sensors.
• Environmental sensors: These sensors measure various environmental parameters, such
as ambient air temperature and pressure, illumination, and humidity. This category
includes barometers, photometers, and thermometers.
• Position sensors: These sensors measure the physical position of a device. This category
includes orientation sensors and magnetometers.</p>
          <p>Complementing the sensor elements, there were defined the next abstract elements:
• MPMLOutputComponent: Here are included some elements of the mobile phones that
are going to be used only with the purpose of giving an output to the user, this includes
the vibrator.
• DataStorage (previously InputOutputElement): In order to add more scope to the modeling
language, providing it with elements that model interaction with the data, which has
the ability to manipulate data in an external or internal mechanism in the device. In this
category there was added two concrete elements:
– NFCWriter: There was included the interaction to write plain/text information to
other devices or in MIFARE NFC Tags.
– RealTimeDatabase: For the data storage, the idea is that the user can model the
CRUD (Create, Read, Update, and Delete) operations. In order to avoid depending
on the implementation of the server logic, choose Firestore Real-Time Database.
The components were selected as a result of the ease of storing information without
having to create a Schema a priori.</p>
        </sec>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Mobile Peripheral Model Language (MPML) - Dynamic Model</title>
        <p>
          One of the major diferences between the version of MPML presented in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] and the current
version is that the previous one was centered on the static model of the peripherals, with their
hierarchy, but the new one extends it with concepts that allow modeling the data flow between
the components; to model this goal, more elements were added, which achieved to model the
lfow data transportation and transformations over the diferent peripherals.
        </p>
        <p>The basic illustration of the flow elements is presented in the flow chart depicted in Figure 1.</p>
        <p>It is crucial to emphasize that these dynamic elements were encapsulated within a static
model in the EMF domain, as demonstrated in Figure 2. Within this context, the following
elements are discernible:
• Start: From the Data Flow perspective, this is the first access point where all the peripherals
are chained in order to send/receive models and deal with the data transformations over
them.
• Connector: Abstract definition of the connection between the diferent Components.</p>
        <p>There are 2 types of concrete connectors:
– FlowConnector: It connects one InputComponent to an OutputComponent.
– DataConnector: It connects the InputComponents and OutputComponents to a
DataStorage. The connection from the former is called dataStore and the connection
from the last one is called dataSource.</p>
        <p>Also, a Transformator has a recursive reference to itself in order to allow to chain several
transformations over the same Entity.
• App: This element defines the app name and namespace. Additionally, it connects to the
Start element in order to define all the dataFlow for the dynamic perspective of the model.
From the static perspective of the model, it contains the next collections of elements:
– components: 0 to many MPMLComponent elements.
– connectors: 0 to many Connector elements.
– connectors: 0 to many DataStorage elements.</p>
        <p>– start: only one Start access point.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Architecture Metamodel</title>
      <p>
        The purpose of the architecture metamodel is to encompass all the app-generated architectural
concepts. Clean Architecture was selected due to its optimal compatibility with the pluggable
attributes of the peripherals, elaborated further in [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        This architecture was introduced by Robert C. Martin in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], Clean Architecture serves as a
Component-Based Software Engineering (CBSE) strategy that facilitates the segregation of
concerns associated with platform-specific and platform-independent functionalities. Subsequently,
a synopsis of this metamodel will be presented.
      </p>
      <p>The hierarchy of peripherals changes in order to accomplish the requirements extracted from
the Android platform.</p>
      <p>Regarding the peripherals, the element at the top of the hierarchy is the Peripheral abstract
element, from which all the peripherals inherit.</p>
      <p>Complementing this concept there are the next abstract elements:
• InputPeripheral: All the Input Elements are the ones that bring data to the system.
• OutputPeripheral: All the Output Elements are the ones that export data outside of the
system or to an external system.</p>
      <p>The peripherals are classified into any of the types in Table 1.</p>
      <p>
        Clean architecture is a model-centered architecture where the cores are the Entities and
UseCases, This is the business logic and it should not be attached to any platform requirement,
while the Controllers, Gateways, and Presenters are the components that allow the
communication between the UseCases, and finally, the components related to the Framework are the
details, according to Robert C. Martin [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>As presented in Table 2, the Camera and the GPS are EmbeddedPeripherals, but their
nature is InputPeripherals, so they can be immersed in the Clean Architecture flow in order to
communicate with other peripherals.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Model Transformations</title>
      <p>Even though the primary goal of these transformations is to refine the Domain metamodel with
the objective of generating a functional Android source code for a mobile peripheral-centric app.
The most important thing to define in each transformation is the intention of the transformation
itself.</p>
      <p>The artifacts engaged in the model transformation chain are categorized into two: PIM
(Platform Independent Model), which comprises elements agnostic to the execution platform,
in this instance, the Android operating system, and PSM (Platform Specific Model), which
encompasses elements that depend on this platform. The figure 4 depicts this.</p>
      <sec id="sec-6-1">
        <title>6.1. Domain to Architecture</title>
        <p>The intention of this transformation is to refine the Domain model in order to give some aspects
more concerned about the architecture of the Android app to be generated.</p>
        <p>Significantly, the nature of ATL is imperative, allowing the creation of blocks that can serve
as either matched or called rules.</p>
        <p>The components involved in this transformation are visually represented in Figure 5.</p>
      </sec>
      <sec id="sec-6-2">
        <title>6.2. Architecture to Source Code</title>
        <p>The source code is automatically generated in Kotlin specifically tailored for Android platform
version 12, codenamed "Snow Cone".</p>
        <p>All of the components generated have their contracts, input, and output ports well defined
into the component in a folder called "port".</p>
        <p>The other point to highlight is that none of the components Adapters, UseCases, and Entities
have any reference to any Android framework library, which indeed makes these components
reusable to any other app, even more with the interoperability given by the Android framework,
they can be connected with other components developed with Kotlin that fulfill the contract
defined by these components.</p>
        <p>The first module executed is the Acceleo Main Module, which is called Main.mtl, which
generates the source code in two steps:</p>
      </sec>
      <sec id="sec-6-3">
        <title>6.3. First step: Static structure</title>
        <p>This first step generates the static structure of the Android app.
• FrameworkComponent:
– If the model contains screens then the transformation will generate some
Extension fields that are used for the UI components, the MainActivity (required for
any interaction required from an InputPeripheral that is connected from the Start
component).
– Resources:
∗ colors.xml
∗ styles.xml
∗ dimens.xml
∗ mainLayouts
∗ appbarLayouts
∗ NavHeader
∗ sideNavbar
∗ navgraph
∗ ActivityMainDrawerMenu
• Configs: This includes the Manifest.xml, the project Gradle, and the Gradle app module
ifles.
• In case controllers are included, then it generates the Gradle file and Factory class for
the adapters, UseCases, and Entities modules. This Factory class creates the concrete
classes that implement the interfaces that will be used as contracts to communicate to
other components.</p>
      </sec>
      <sec id="sec-6-4">
        <title>6.4. Second step: Dynamic structure</title>
        <p>While the static structure validates the existence of screens and controllers in order to generate
the files, the dynamic structure follows the Peripherals connected from the Start element, since
they are chained for the "connected" attributes then it is a straightforward path to follow,
the only bifurcated situation is when the same Peripheral has a dataSource, dataStore and an
embeddedConnector, then they are prioritized in that order:</p>
        <sec id="sec-6-4-1">
          <title>6.4.1. InputPeripheral</title>
          <p>• All the elements explained in the section 5, more specifically the InputPeripheral is
generated depending on the type of the InputPeripheral, along with some extra files
generated, as shown in the table 3.
• goes on the controller or EmbeddedController, as the case may be.
Architecture!InputPeripheral Files generated</p>
          <p>Screen
NFCReader
MotionSensor</p>
          <p>PositionSensor
EnvironmentSensor</p>
          <p>ViewModel
Fragments
NFCReader
xml/nfc_tech_filter.xml:
listing the technologies supported
Activity
Activity
Activity</p>
        </sec>
        <sec id="sec-6-4-2">
          <title>6.4.2. Adapters</title>
          <p>Figure 7 shows the elements that are taken from the architecture metamodel in order to generate
the Android source code of the adapters ring of Clean Architecture.</p>
          <p>Regarding to the Controllers, per each Controller element, it generates the classes:
• Controller:</p>
          <p>Concrete Controller class.
• IController:</p>
          <p>Input contract for the Framework component.
• DS:</p>
          <p>The Data Structure is to be transported from the adapter component.
• goes on with the useCaseInteractor.
• Gateway:</p>
          <p>Concrete Gateway class.
• IDAO:</p>
          <p>Generates the output IDAO contract that the gateway is going to use.</p>
          <p>• goes on with the OutputPeripheral.</p>
          <p>Per each Gateway that is connected to a RealTimeDatabase it generates the next classes:</p>
        </sec>
        <sec id="sec-6-4-3">
          <title>6.4.3. UseCaseInteractor</title>
          <p>Figure 8 shows the elements that are taken from the architecture metamodel in order to generate
the Android source code of the use cases ring of Clean Architecture.</p>
          <p>Regarding the UseCases, per each UseCaseInteractor element, it generates the next classes:
• UseCase:</p>
          <p>Concrete UseCase class.
• IUseCases:</p>
          <p>Input contract for the adapters component.
• Output contract for the adapters component:</p>
          <p>IGateway and IPresenter (if needed).
• Presenter:</p>
          <p>If fulfills the requirements then the Presenter concrete class is also generated in the
adapters component.
• DTO:</p>
          <p>The Data Structure is to be transported from the use cases component.</p>
          <p>• goes on with the gateway.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>7. Future Work</title>
      <p>It is necessary to validate the model transformation chain through several business cases under
study and compare the time spent between conventional development and the use of the MTC.</p>
      <p>Another desirable approach is to validate the efectiveness of model transformation by
employing validation methods and unit tests ofered by each of the model transformations.</p>
      <p>Finally, the model evolution will be reviewed in response to business requirement changes
and software platform upgrades.</p>
    </sec>
    <sec id="sec-8">
      <title>8. Conclusions</title>
      <p>The development of the DSL (MPML Mobile Peripheral Model Language) as a means to enhance
accessibility for a broader user base. This initiative facilitates the construction of Android
applications, catering not only to those lacking software development knowledge but also extending
its utility to individuals proficient in computer science. For the latter, the Model
Transformation Chain ofers an avenue to concentrate their eforts on augmenting the functionality of
semi-automated apps generated through the Model Transformation Chain.</p>
      <p>EMF is presented as a user-friendly tool that helps the modeler in the creation of metamodels
ofering case tools; supporting the XMI (XML Metadata Interchange) standard specification,
and ensuring compatibility and interoperability with other modeling tools and platforms.
Moreover, EMF boasts a well-crafted graphical user interface, which serves as a powerful visual
representation of the underlying models. This intuitive interface enhances the modeler’s ability
to interact with and comprehend complex models, further solidifying EMF as a versatile and
indispensable tool for model-driven</p>
      <p>The construction of the Model Transformation Chain was afected by several changes due to
test and validation processes, demanding changes in all the stages of the Chain. Consequently,
it is recommended to other people interested in working in this kind of work to use a Skeleton
approach, which indicates to creation of the complete infrastructure with all the metamodels
and their transformation models, and over time evolves in its construction.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Bézivin</surname>
          </string-name>
          ,
          <article-title>Expert ' s voice On the unification power of models</article-title>
          ,
          <source>Vital And Health Statistics. Series 20 Data From The National Vitalstatistics System Vital Health Stat 20 Data Natl Vital Sta</source>
          (
          <year>2005</year>
          )
          <fpage>171</fpage>
          -
          <lpage>188</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kühne</surname>
          </string-name>
          , Matters of (meta-)
          <string-name>
            <surname>modeling</surname>
          </string-name>
          ,
          <source>Software &amp; Systems Modeling</source>
          <volume>5</volume>
          (
          <year>2006</year>
          )
          <fpage>369</fpage>
          -
          <lpage>385</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <article-title>Model Transformation Chains as Strategy for Software Development Projects</article-title>
          ,
          <source>in: The 3rd International Multi-Conference on Complexity, Informatics and Cybernetics</source>
          (IMCIC
          <year>2012</year>
          ), Orlando,
          <year>2012</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>12</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>D.</given-names>
            <surname>Sanchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <article-title>Model driven engineering approach to manage peripherals in mobile devices</article-title>
          ,
          <source>in: Computational Science and Its Applications-ICCSA</source>
          <year>2018</year>
          : 18th International Conference, Melbourne,
          <string-name>
            <surname>VIC</surname>
          </string-name>
          , Australia,
          <source>July 2-5</source>
          ,
          <year>2018</year>
          , Proceedings,
          <source>Part IV 18</source>
          , Springer,
          <year>2018</year>
          , pp.
          <fpage>353</fpage>
          -
          <lpage>364</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>D.</given-names>
            <surname>Sanchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. E.</given-names>
            <surname>Rojas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <article-title>Towards a Clean Architecture for Android Apps using Model Transformations</article-title>
          ,
          <source>IAENG International Journal of Computer Science</source>
          <volume>49</volume>
          (
          <year>2022</year>
          )
          <fpage>270</fpage>
          -
          <lpage>278</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Sanchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Villalobos</surname>
          </string-name>
          ,
          <article-title>Extensible model-based approach for supporting automatic enterprise analysis, in: 2014 IEEE 18th international enterprise distributed object computing conference</article-title>
          , IEEE,
          <year>2014</year>
          , pp.
          <fpage>32</fpage>
          -
          <lpage>41</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>O. M. G. MOF</surname>
          </string-name>
          ,
          <article-title>Meta Object Facility (MOF) Specification v 2.4.1</article-title>
          , Available at : http://www.omg.org/spec/MOF/2.4.1/PDF (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>E.</given-names>
            <surname>Seidewitz</surname>
          </string-name>
          , What models mean,
          <source>Software, IEEE</source>
          <volume>20</volume>
          (
          <year>2003</year>
          )
          <fpage>26</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>B.</given-names>
            <surname>Selic</surname>
          </string-name>
          ,
          <article-title>The pragmatics of model-driven development</article-title>
          , IEEE software (
          <year>2003</year>
          )
          <fpage>19</fpage>
          -
          <lpage>25</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>I. Projet</given-names>
            <surname>Atlas</surname>
          </string-name>
          ,
          <source>Atl: Atlas transformation language</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>P.</given-names>
            <surname>Gómez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. E.</given-names>
            <surname>Sánchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Villalobos</surname>
          </string-name>
          ,
          <article-title>An approach to the co-creation of models and metamodels in enterprise architecture projects</article-title>
          .,
          <source>Journal of Object Technology</source>
          <volume>13</volume>
          (
          <year>2014</year>
          )
          <fpage>2</fpage>
          -
          <lpage>1</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Allilaire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bézivin</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Kurtev</surname>
          </string-name>
          ,
          <article-title>Atl: A model transformation tool</article-title>
          ,
          <source>Science of computer programming 72</source>
          (
          <year>2008</year>
          )
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>R. C.</given-names>
            <surname>Martin</surname>
          </string-name>
          ,
          <article-title>Clean architecture: a craftsman's guide to software structure and design</article-title>
          , Prentice Hall Press,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>