<!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>Towards a Model-Driven Approach to Automatic Code Generation for Android Applications</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dana Macias</string-name>
          <email>dsmaciasr@udistrital.edu.co</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Grévisse</string-name>
          <email>christian.grevisse@uni.lu</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hector Florez</string-name>
          <email>haflorezf@udistrital.edu.co</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="editor">
          <string-name>PCWrEooUrckResehdoinpgs ISSNc1e6u1r-3w-0s0.o7r3g</string-name>
        </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>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Luxembourg</institution>
          ,
          <addr-line>Esch-sur-Alzette</addr-line>
          ,
          <country country="LU">Luxembourg</country>
        </aff>
      </contrib-group>
      <fpage>379</fpage>
      <lpage>394</lpage>
      <abstract>
        <p>The design process of a mobile Android application commonly begins with the creation of UML diagrams, which represent the structure of the software. However, in many academic and practical scenarios, these diagrams are used solely as project documentation and not as an active part of the software development lifecycle. This leads developers to perform a manual translation, which increases development time and the likelihood of human error. In this work, we propose a program that generates source code for Android applications from UML class diagrams. The tool carries out this process by interpreting standardized UML files in XML format and producing Java code compatible with the Android SDK. This approach aims to facilitate the transition from design to implementation, reduce development efort, and promote the practical use of modeling techniques in software engineering education and practice. Furthermore, we introduce the integration of Large Language Models as a complementary mechanism. By generating structured prompts from UML diagrams, AI-based models can be employed to refine, extend, or suggest additional components of the application. This dual approach-direct code generation combined with AI-assisted refinement-seeks to maximize eficiency, ensure consistency between models and implementation, and highlight the potential of combining Model-Driven Engineering with AI-powered code generation.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Model-driven engineering</kwd>
        <kwd>Android applications</kwd>
        <kwd>Automatic code generation</kwd>
        <kwd>Large Language Models</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Unified Modeling Language (UML) has been a key foundation for analyzing and designing software
systems for decades. It allows information and structures to be represented, behaviors to be visualized
using use cases, structural aspects to be shown with class diagrams, and interactions to be depicted
with sequence diagrams. Historically, its adoption standardized communication between teams and
improved design traceability [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ].
      </p>
      <p>
        In traditional approaches, models such as UML are often used only in the initial phases (analysis and
design), while implementation is done directly in code, causing disconnections as the project evolves.
Model-Driven Engineering (MDE) addresses this problem by maintaining an explicit link between model
and implementation and enabling automatic code generation, reducing inconsistencies and promoting
traceability [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ].
      </p>
      <p>
        The incorporation of Artificial Intelligence, especially language models capable of generating code,
enhances this approach. AI can interpret structured specifications and produce code consistent with
architectural patterns, accelerate iteration, and adapt as models change. By combining MDE with AI,
it is possible to transform a model into precise textual instructions (prompts) and, from these, obtain
initial implementations ready for refinement [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ].
      </p>
      <p>
        In the context of Android application development, this approach is particularly useful due to the
modular structure with well-defined layers that separate presentation, logic, and persistence. Automatic
code generation from UML class diagrams significantly reduces development time and improves product
consistency [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>This document proposes—rather than presenting a complete tool—an approach based on a single
UML class diagram specific to Android applications that feeds into two complementary paths: on
the one hand, the generation of structured prompts for a generative model, and on the other, the
direct generation of Android source code. The idea is that both outputs complement each other to
complete the development: the prompts guide the AI in the creation or refinement of components,
while the direct generation path produces a project base aligned with the model. This approach seeks
to minimize manual efort, maintain consistency between design and implementation, and accelerate
the transition from model to functional product, leaving open the possibility of future evolution toward
a comprehensive tool.</p>
      <p>This article is structured as follows. Section 2 presents the concepts and tools that support the
generation of source code for Android mobile applications using MDE. Section 3 presents the work
of other authors. Section 4 shows the new system proposed to generate source code based on UML
models for Android mobile applications and prompt to support development. Section 5 presents future
work. Section 6 concludes the article.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <sec id="sec-2-1">
        <title>2.1. Model-Driven Engineering (MDE)</title>
        <p>
          MDE is a paradigm that treats models as primary artifacts throughout the software lifecycle (analysis,
design, implementation, and testing). Rather than using models only as documentation, MDE employs
them as both input and output for automated transformation tools [
          <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
          ]. MDE focuses on the
implementation and basic notions of models and metamodels. A model is the graphical representation of a
system to be studied — also known as the domain — while a metamodel is the formal description of a
model for that domain. It defines the structure and modeling rules.[
          <xref ref-type="bibr" rid="ref8">8</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Model-Driven Architecture (MDA)</title>
        <p>A specific instance of MDE is Model-Driven Architecture (MDA), promoted by the OMG, which defines
a set of standards for:
• CIM (Computation Independent Model): domain view without implementation details.
• PIM (Platform Independent Model): model independent of any specific technology platform.
• PSM (Platform Specific Model): model tailored to a particular platform.</p>
        <p>• QVT (Query/View/Transformation): languages for model transformation.</p>
        <p>
          According to Bézivin, the unifying power of models in MDE/MDA lies in raising the level of abstraction
and enabling systematic generation of artifacts (code, documentation, tests, etc.) from normative
metamodels, which are the reference models that establish which elements, relationships, and rules
must be followed for the models to be consistent and compatible[
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>2.3. Eclipse IDE and Eclipse Modeling Framework (EMF)</title>
        <p>The Eclipse IDE is one of the most extensible open development platforms via plugins. Its Eclipse
Modeling Framework (EMF) serves as the core for model-driven development:
• Defining metamodels in the Ecore format (abstract syntax).
• Automatically generating Java classes that implement the metamodel.
• XMI/XML support for serializing and visualizing model instances.
UML</p>
        <p>MDE/MDA</p>
        <sec id="sec-2-3-1">
          <title>EMF / Eclipse</title>
        </sec>
        <sec id="sec-2-3-2">
          <title>Java Code Generation</title>
        </sec>
        <sec id="sec-2-3-3">
          <title>XML / XMI Export</title>
          <p>2.4. XML and XMI
The XML (eXtensible Markup Language) format is widely used to exchange and persist MDE models.
In particular, XMI (XML Metadata Interchange) defines how to serialize instances of Ecore or UML
metamodels into XML:
• It facilitates interoperability between tools (e.g., Papyrus, Acceleo, GenCode).
• It enables model–implementation traceability by storing each UML diagram element in
standardized XML tags.</p>
          <p>
            This combination of UML, MDE/MDA, EMF/Eclipse, Java generation and XML/XMI, as shown in Fig.
1, forms the basis of today’s automated development environments for both enterprise systems and
mobile applications.[
            <xref ref-type="bibr" rid="ref11">11</xref>
            ].
          </p>
        </sec>
      </sec>
      <sec id="sec-2-4">
        <title>2.5. Clean Architecture</title>
        <p>The Clean Architecture is an architecture proposed by Robert C. Martin based on components
(Component-Based Software Engineering - CBSE) that seeks to keep the business logic independent
from the technical details of the development platform, such as presentation and others (Android, iOS,
Web...), facilitating the reuse, maintenance, and scalability of the software. A component is a unit or
piece of software that can be deployed, developed, and updated independently (e.g., Java .jar file, XML
.xml file, Python .py file).</p>
        <p>
          In component-based development (CBD) and clean architecture, the system is built by assembling
several components that are already ready for integration. In this architecture, you start with the
business core (main logic). Then you add external components (UI, database, APIs, etc.) without
afecting the core [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
        </p>
        <p>In Android applications, it is common to use this architecture because it allows the diferent activities
of the project to be separated from the logic, such as views or frameworks. This prevents conflicts
from arising in the actions carried out in the application, such as the loss of information when making
changes between activities, and eliminates the dependence of the application flow on the activities or
modules of the diferent views.</p>
        <p>
          It has a domain-centric approach, meaning that it puts the business/domain at the center and places
the technical details around it. This makes it possible to change the UI, database, or any external
system without touching the business logic [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. This allows for testing the logic without relying
on the interface or database, and keeping the core business clean and surrounded by infrastructure
components.
        </p>
      </sec>
      <sec id="sec-2-5">
        <title>2.6. Android Activities</title>
        <p>An activity is a single window on the mobile screen, usually occupying the entire screen. This is what
interacts directly with the user, like an interface. The Android Developers platform gives the following
example of an activity: “An email app may have one activity that displays a list of new emails, another
activity for composing an email, and another activity for reading emails.” Activities work together to
create a cohesive user experience in the app, but each activity is completely separate from the others.</p>
        <p>An activity enables a series of interactions between the system and the app, which are:
• Track what appears on the screen for the user, so that they can continue executing the process
associated with the activity.
• Identify which processes in use have paused activities that the user can return to, and prioritize
them so that they are ready quickly.
• Collaborate with the app’s termination so that the user can return to activities and restore their
previous state.
• Allow applications to implement user flows between each other and allow the system to control
this flow</p>
        <p>
          In Android applications, an activity is implemented as a subclass of the Activity class[
          <xref ref-type="bibr" rid="ref13">13</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-6">
        <title>2.7. MVVM: Model–View–ViewModel</title>
        <p>García, R.F. (2023) accounts that "The MVVM architecture was developed by Ken Cooper and Ted Peters
of Microsoft (and later announced by John Gossman on his blog in 2005), to simplify event-driven
programming (in which events drive program flow) of web interfaces".</p>
        <p>The Model-View-ViewModel (MVVM) pattern is a way of organizing the code of an Android
application to make it clearer, more maintainable, and easier to scale. This pattern helps separate responsibilities
within the app by dividing the code into three main components: Model, View, and ViewModel.
• Model: represents the business logic and data of the application. It is the layer that is responsible
for accessing databases, web services, or any source of information. For example, if you are
developing a task app, the Model would include classes such as Task, as well as the functions to
get, save, or delete tasks.
• View: is the part that interacts directly with the user. In Android, this includes activities (Activity),
fragments (Fragment), and interface elements such as buttons, lists, or forms. Its only job is
to display data on the screen and receive events from the user (such as touches or text inputs),
without containing business logic.
• ViewModel: acts as an intermediary between the View and the Model. It receives data from the
Model, prepares it (for example, converts it into readable text or filters a list), and exposes it to the
View. It also receives actions from the View (such as a click on a button to save) and is responsible
for prompting the Model to execute the corresponding action. In addition, the ViewModel often
uses LiveData or StateFlow so that the View observes the data and automatically updates itself
when the data changes.</p>
        <p>
          This pattern improves the order of the project and allows each component to focus on its specific
function, facilitating testing, maintenance, and code reuse[
          <xref ref-type="bibr" rid="ref14">14</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-7">
        <title>2.8. Generative AI &amp; Large Language Models</title>
        <p>
          Generative Artificial Intelligence refers to AI systems designed to create new content, including text,
images, audio, and source code. Unlike traditional AI systems that primarily classify or predict,
generative AI focuses on producing outputs that were not explicitly present in the training data. In software
development, generative AI plays a key role in accelerating prototyping, refining designs, and generating
functional code aligned with high-level specifications [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ],[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ].
        </p>
        <p>
          Large Language Models (LLMs) are advanced neural network architectures trained on vast corpora
of text, capable of performing a wide range of natural language processing tasks such as translation,
summarization, and code generation. Their strength lies in the ability to generalize from patterns in
data and produce coherent, contextually relevant responses to user queries. In software engineering,
LLMs have shown remarkable potential for automating tasks like documentation, test generation, and
source code synthesis [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ],[
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>
          A prompt is the input instruction provided to a generative model to guide its output. Well-structured
prompts can significantly improve the accuracy, consistency, and relevance of the generated results,
making prompt engineering a critical practice in the efective use of LLMs, among others in software
engineering [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Related Work</title>
      <p>Currently, there are several projects focused on the use of model-driven engineering (MDE), supported
by UML diagrams, to automate the generation of source code for Android application environments.
These proposals divide development into two complementary views: the structural view (class diagrams)
and the behavioral view (sequence diagrams), ofering increasingly mature and eficient solutions to
accelerate the software lifecycle. With the implementation of architectures such as clean architecture,
MVVM, among others, the projects developed are capable of producing more maintainable, scalable
applications that are aligned with industry best practices, reducing manual efort and minimizing errors
during coding.</p>
      <sec id="sec-3-1">
        <title>3.1. MDE- and UML-based projects for generating Android code</title>
        <p>
          Regarding the user interface, there is the MOBICAT project, an MDE-based tool that enables automatic
generation of graphical user interface (GUI) code for Android applications. The approach is based
on modeling domain-specific features using UML profiles. It utilizes use case and sequence diagrams
to capture functional requirements and navigation flows. MOBICAT generates both the interface
and the associated controller classes. Its efectiveness was empirically validated with three
opensource applications, showing significant improvements in efort reduction, development cost, and
implementation time. MOBICAT positions itself as an efective solution for automating GUIs in mobile
applications[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
        </p>
        <p>
          The next project is the first project, discussed by Parada and de Brisolara, proposes an MDE-based
approach to simplify and accelerate Android app development. The proposal includes UML
modeling—class diagrams for the structural view and sequence diagrams for the behavioral view—combining
the MDE paradigm with Android app development and automatic code generation. UML diagrams are
translated using an extended version of the GenCode tool to produce Java source code. Key Android
components such as Activities, Services, Content Providers, and Intents are modeled, respecting the
Android lifecycle[
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
        <p>
          Lastly, a research project focuses on the use of standards to facilitate more detailed code generation.
Son et al. proposes a method for generating Android application code using UML, centered on the
combination of class and sequence diagrams (MSD) under the Meta Object Facility (MOF) standard.
Unlike previous approaches that only generated skeleton code, this proposal allows for the generation
of more detailed behavior fragments. Transformation rules (e.g., object creation, method invocation)
are defined and implemented with Acceleo. The methodology improves the quality and quantity of the
automatically generated code, making the development of Java-based mobile applications for Android
more efective[
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. MDE-based projects to generate Android code</title>
        <p>
          In another research work, Sánchez describes a model transformation chain to semi-automatically
generate source code for the Android platform, focused on managing mobile peripherals. It does not
focus on the use of UML diagrams. The approach uses Model-Driven Architecture (MDA) and defines
a domain-specific language (DSL) called MPML (Mobile Peripheral Modeling Language). The models
are transformed using ATL (model-to-model) and Acceleo (model-to-text) rules. The process starts by
transforming the domain model to the architectural model using ATL, then generates source code with
Acceleo. Both static structure and dynamic data flow are represented, allowing the modeling of sensors,
data storage, and outputs such as vibrators. The result is a set of source files optimized for Android 12
in Kotlin, accurately representing the application’s behavior [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
        <p>
          Another project presents an automated method to create functional Android applications from models,
combining Model-Driven Engineering (MDE) with Clean Architecture [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. The main idea is that
developers design an app using a high-level model, without needing to know much programming, and
then it is automatically transformed into a complete app in Kotlin, following Google and Android Jetpack
best practices – It is a set of libraries, tools, and guidelines provided by Google that help developers
create Android applications more eficiently and consistently. It facilitates the implementation of best
practices, reduces repetitive code, and ensures that the application works correctly on diferent devices
and versions of Android [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ].
        </p>
        <p>The process starts with the design of a metamodel that includes business and visual elements. This
metamodel is created with tools such as Obeo Designer and is based on ECORE. Once the model is
in place, Acceleo is used to automatically generate the source code of the app, organizing it in layers
according to Clean Architecture.</p>
        <p>
          The project uses Firebase Firestore as a database, which facilitates integration and real-time
management. Forms, validations, and data views are created automatically, without the need for manual
coding [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. MDE approaches with Generative AI</title>
        <p>
          Another project is based on the extension of BESSER, an open-source low-code platform. In this
work, the authors implemented a sublanguage for GUI modeling, complemented by a code generator
that translates these models into Flutter code following best practices. The approach leverages UML
for modeling and uses Dart as the target programming language, enabling model-based mobile app
generation, prioritizing usability and maintainability[
          <xref ref-type="bibr" rid="ref20">20</xref>
          ].
        </p>
        <p>The comparative analysis in Table 1 shows that existing MDE-based tools for Android development
apply diverse strategies, from structural modeling to GUI generation. However, they share certain
limitations: most rely on custom metamodels or DSLs, which complicates adoption, and often require
several types of UML or specialized diagrams, reducing accessibility for students and practitioners.</p>
        <p>The proposed approach addresses these issues by focusing exclusively on standard UML class
diagrams, a notation that is widely understood in academia and industry. Unlike other tools, it performs
only model-to-text (M2T) transformations, which makes the process simpler and more direct. From a
single UML model, the system produces two complementary outputs: on one hand, a structured prompt
that can be used with generative AI models to refine or extend the application, and on the other hand, a
basic Android source code project aligned with clean architectural principles.</p>
        <p>This dual output strategy—M2T for prompts and M2T for Android code—diferentiates the proposal
from previous works. It reduces modeling overhead, ensures coherence between design and
implementation, and introduces a novel integration of UML, MDE, and generative AI, opening opportunities for
both educational use and agile industry adoption.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Proposed Analysis Model</title>
      <p>In the context of LLMs for code generation, prompts serve as the bridge between abstract system
representations (such as UML diagrams) and the generated source code.</p>
      <p>The aforementioned two-way strategy will be presented below, with a section dedicated to the M2T
UML → prompt branch (see Section 4.1) and another to the M2T UML → code branch (see Section 4.2).
It is explained again that the first (M2T UML → prompt) is oriented toward more complex use cases,
while the second (M2T UML → code) focuses on structural elements.</p>
      <sec id="sec-4-1">
        <title>4.1. Prompt Transformation</title>
        <sec id="sec-4-1-1">
          <title>UML Model</title>
        </sec>
        <sec id="sec-4-1-2">
          <title>Transformation to Prompt</title>
        </sec>
        <sec id="sec-4-1-3">
          <title>Generative AI model</title>
          <p>DanaMaciasetal.CEURWorkshopProceedings
-
ro ap
P
+
)
o o h
p r L d c
e a
roP app seY seY seY oN oN oN seY seY seY seY seY seY Jvaa (UMsop rop seY
c
A
I
B
O
c
A
,
L
T
n
e
G
+
lly (A ed l) lly lly eD ,o
] ita n ed ita ita lin eo lee )re
12 ra o se se se ife o ra ra o se o o se to b c
[ P N Y Y Y d m P P N Y N N Y K (O cA tso oN
M
(
]3 ra o se se se se se o o o o se to Mle
[ P N Y Y Y Y Y N N N N Y K (E ce oN
m
r
o
f
t
a
l
p
s
s
o
r
c
y
l
l
a
i
t
d
i
o -
le1ab ijfftrrrrssceaoooooppdEnnADmM iittssrrcceaah itss?eeoLuUM liifttsseeeeaooooyyLpdunnUMr?am lli()tttrs?cceeee2aaaaooydunTmM iffttrrrrsss?e2aaooonnmmMM ifs?eeaSLnD lliiir?ceevaaagoobydnnhmm litrs?ceeoooopdddnnnAm lliItttrs?ceeeaaaaaoyunUGm llllittttrrrss?cceeeeaaaaoooyunnm lliiiitt?cceeaaaobppdunn lliiiitttsseeeaaaooooypdnnnhw trs?yu llliiiitttrrrss?ccceeeaaaoyppppunh ltteaaggpuuun lsseoodu iIftttrrrrss?eeeeeevaaooppnnAGm
T C C D D g G P D D M G G Is D d D O T G</p>
          <p>The proposed meta-transformation flow is shown in Fig. 2. Rather than producing source code
directly from the model (classic M2T), this approach first converts the formal model (UML class model)
into a structured textual prompt. The prompt is designed to contain all information required by a
code-capable generative model so the latter can produce coherent, architecture-aligned source code.
The purpose of this branch is to produce structured statements that encode constraints, use cases, and
architectural directives. It makes the statements explicit enough for a generative model to produce
coherent and testable code. It preserves traceability between model elements and generated code
artifacts.
4.1.1. Transformation rules</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Rule 1 — Use-case → Function/Service fragment. The input consists of UML classes with their</title>
      <p>methods, which will be interpreted as possible use cases. In this process, actors are projected as user
classes, actions as methods within those classes, data referenced as attributes, and relationships between
steps as associations between classes. From this, the prompt output should generate instructions for
implementing a service function or method that meets the use case, including the necessary validations
and the expected calls to the repository or persistence layer.</p>
      <p>Suggested fragment (example):
Implement a function [UseCaseName](...) that:
- validates inputs: [...]
- calls repository [RepositoryName] to persist/retrieve data
- returns: [entity / DTO / status]</p>
    </sec>
    <sec id="sec-6">
      <title>Rule 2 — Constraint / OCL → Validation fragment. Input: Attribute constraints or invariants</title>
      <p>(e.g., age &gt; 0). Prompt output: Precise validation instruction indicating where to check the constraint
(constructor, setter, service) and expected error handling.</p>
      <p>Suggested fragment (example):
Add validation: [attribute] must satisfy [condition].</p>
      <p>If invalid, throw [Exception] with message "[text]" or return error payload
[format].</p>
    </sec>
    <sec id="sec-7">
      <title>Rule 3 — Architecture directive → Organization fragment. Input: Required architecture (e.g.,</title>
      <p>MVVM, Clean Architecture). Prompt output: Clear directives for organizing generated code into layers
and placing each model element in its respective layer.</p>
      <p>Suggested fragment (example):
Organize code using [Architecture]. Place:
- Domain Layer: [entities, use-cases]
- Data Layer: [repositories, data sources]
- Presentation Layer: [viewmodels, activities/fragments]
4.1.2. Combined prompt example
As an example of a simple model, consider the following: a class Student with the attributes
name:String and age:Int (with the constraint that age must be greater than 0), a class Course with
the attribute title:String, and a relationship where one student can enroll in multiple courses.
Additionally, there is the use case CreateStudent, and the system is organized following a combination
of MVVM and Clean Architecture.</p>
      <p>Complete prompt (example):
Given a pre-defined structure of Android app in Java using MVVM and Clean
Architecture:
There is a class Student with attributes name:String, age:Int, where age has
the constraint:
Add validation: age must be &gt; 0; if invalid, throw IllegalArgumentException.
There is also a class Course with attribute title:String.</p>
      <p>Relationship: A Student can enroll in multiple Courses.</p>
      <p>Represent as: in Student -&gt; List&lt;Course&gt; courses;
Implement createStudent(studentDto) that:
- validates inputs (name not null/empty, age &gt; 0)
- calls StudentRepository to persist the Student
- returns the created Student
Organize code:
- Domain: Student, Course, CreateStudent use case
- Data: StudentRepository (e.g. SQLite)
- Presentation: StudentViewModel (calls use cases), StudentActivity
(form + list)</p>
      <p>This aligns well with best practices in prompt engineering, namely, iterative refinement of prompts
to improve outputs; using templates or examples to guide model behavior; and maintaining clarity and
specificity in the instructions.</p>
      <p>
        The proposed transformation rules draw inspiration from established practices in Model-Driven
Engineering (MDE), particularly the use of rule-based transformation languages like ATL [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] and
the standard QVT from OMG [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. Prompt engineering best practices, such as explicit instructions,
structured templates, and iterative refinement, inform the design of these prompt fragments. [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ].
      </p>
      <sec id="sec-7-1">
        <title>4.2. System for automatic Android code generation from UML class diagrams</title>
        <p>Automatic source code generation starts from a structured base containing the essential information
about the system to be built. To do this, it is necessary to have a detailed model representing the logical
architecture of the software. In the context of application development, one of the most widely used
tools for this purpose is UML (Unified Modeling Language), and in particular, class diagrams, as they
allow the structure of the system to be modeled through classes, attributes, methods, and relationships
between objects. These diagrams provide an accurate representation of the system’s logic and structure,
making them an ideal tool for automatic transformation processes. From these models, it is possible
to generate source code for Android mobile applications, accelerating the development process and
ensuring structural alignment between the design and the code.</p>
        <p>The proposed process for automatic code generation follows a flow divided into three main stages:
• Input: A UML model describing the application’s class architecture is received as input. This
model is exported in XMI (XML Metadata Interchange) format, which is a standard for
interoperability between modeling tools. In this case, the Modelio tool is used to build the diagram and
export the corresponding file.</p>
        <p>This diagram must reflect the essential elements of the application architecture. Since the tool’s
approach combines MDE with Clean Architecture and the MVVM pattern, the tool will generate
the classes needed to represent the use cases and database access services required, according
to the interpretation of the diagram. The class diagram will be constructed from the basic UML
structure, integrating both the domain and the necessary Activities in the application. The goal
is to ensure that the model represents the basic requirements and serves as the basis for the
automatic generation of the application.</p>
        <p>
          In addition, the tool will have sections where you can specify additional configuration details,
such as database requirements and the required connection engine (e.g., SQLite, Firebase, or
Firestore). It will also allow you to customize visual aspects such as color scheme, typography,
and application logo. If none of these settings are entered, the default values will be retained.
Figure 3 shows an example of the class diagram for an Android mobile application. This diagram
was generated based on the guide provided by the Kodeco website entitled “UML for Android
Engineers” [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] and the modeling structure provided by Modelio.
• Processing: In this phase, the system interprets the UML model, extracting and analyzing key
elements such as classes, attributes, methods, relationships, and associations. This information is
transformed according to specific rules that allow the data from the UML design to be traversed
and extracted into an Android project structure. In addition to capturing the class structure,
the application logic is also incorporated, organizing it according to the MVVM
(Model-ViewViewModel) pattern and under the principles of Clean Architecture, which guarantees a clear
separation of responsibilities and favors software maintenance and scalability.
        </p>
        <p>This transformation is done following a series of rules related to the architecture and pattern
proposed. Clean architecture provides the layered structure (Domain, Data, Presentation), and the
MVVM design pattern organizes the presentation layer (UI → ViewModel → Model). Therefore,
the structure of the generated project is organized as follows:
– Domain Layer
∗ Entities
∗ Use Cases
– Data Layer</p>
        <p>∗ Repository
– Presentation Layer (MVVM)
∗ ViewModel → calls the Use Cases.</p>
        <p>∗ View (UI / Activities or Fragments)
The generated code is guided by the diferentiation between classes in the diagram with the
Activity label or key, as this determines the flow of the application, taking into account the
relationships between the Activities and the entities.</p>
        <p>In the domain layer, each entity that appears in the class diagram is transformed into a class
with its main attributes. For example, the Student entity becomes the Student class, which contains
information such as the identifier, name, email, and status. However, the methods associated
with the entity in the diagram, such as create, edit, or disable student, are not implemented
within the class itself, but are moved to specific use cases that are also part of the domain layer.
These use cases become independent classes that encapsulate the corresponding business logic,
while the Student class only retains the definition of the entity and its attributes. In this way, the
transformation allows for a clear separation of data from the operations performed on it, making
the code scale in a more orderly manner and following the principle of single responsibilities.
In the data layer, each entity modeled in the class diagram is transformed into a class responsible
for managing access to the database. For example, the Student entity is complemented by a class
that implements the methods necessary to save, update, query, or delete students in repositories
such as SQLite or Firebase. This class was called StudentRepository. These methods correspond
to basic CRUD persistence and allow the information defined in the domain layer to be stored
and retrieved in a structured manner. Furthermore, this layer is not always mandatory, as its
generation depends on the preferences defined by the developer at the outset, who can choose
whether the application will work with local storage, cloud storage, or without data persistence.
In the presentation layer, the ViewModel classes associated with each entity are generated
ifrst. These classes act as a bridge between the business logic and the user interface, as they
are responsible for invoking use cases and preparing the information that will be displayed on
the screen. Next, the View classes are created, which correspond to the Activities or Fragments
defined in the class diagram. These Activities contain the necessary widgets (buttons, text boxes,
lists, etc.), for which the corresponding libraries and classes are imported. In addition, the basic
methods that allow each Activity to interact with the user and display the information processed
by the ViewModel are implemented. Finally, a MainActivity is generated, which acts as the main
entry point for the application. This transformation would be represented in a class diagram as
shown in Figure 4.</p>
        <p>Here, the classes CreateStudentUseCase, ListStudentsUseCase, StudentRepository,
StudentViewModel, and StudentActivity were generated. Following the generation rules described above,
which are based on the structure of the class diagram. In addition, in this process, the preferences
registered when importing the class diagram are added to the user interface documents, i.e.,
the XML layouts, and those preferences, such as the selected colors and the uploaded logo, are
translated. Otherwise, the tool’s default settings will be saved.
• Output: As a result of the processing, an Android project package is automatically generated,
structured with the essential files to start development. This includes Java source classes, XML
layouts, resource files such as colors.xml, and configuration files such as AndroidManifest.xml
or build.gradle. The generated structure corresponds to a base template oriented towards
general-purpose systems (e.g., applications that provide services). This approach is particularly
useful in the development of non-entertainment-oriented applications, i.e., those that are not
games. These are utility or functional applications, whose main purpose is to provide a service,
process information, facilitate specific tasks, or manage data. Common examples include personal
management applications, educational applications, sensor monitoring systems, and
administrative tools, among others. In these cases, the internal structure and logic of the system become
more relevant, and therefore, modeling them correctly allows for more coherent, maintainable,</p>
        <p>and scalable implementations.</p>
        <p>The proposal is materialized as a desktop tool, composed of three main modules:
1. The UML model reception module, which extracts and validates the XMI file exported from</p>
        <p>Modelio.
2. The model interpretation and transformation engine, in charge of mapping UML elements to</p>
        <p>Android structures.
3. The code generator, which automatically builds the project structure following Clean Architecture
conventions and MVVM pattern principles.</p>
        <p>This approach not only improves developer productivity, but also ensures structural consistency and
facilitates the application of best practices from the design stage.</p>
        <p>The general operation of the tool is depicted in the architecture diagram (Fig. 5).</p>
        <p>The tool has a graphical interface that allows the user to upload a XMI file, using a graphical
component that enables files to be uploaded to the project. It also has preference components, a color
selector, and an image upload for the application logo, as well as specifying whether databases will be
used and what type of data passes will be used. Once the file is uploaded to the system, it is sent to the
backend, where the uploaded file is analyzed.</p>
        <p>In the first stage of the backend, called Scan file, the system:
• Reads the content of the XMI file.
• Extracts the classes defined in it.
• Identifies the relationships between these classes.
• The classes in .java format.
• The coded relationships between the classes.</p>
        <p>• The corresponding interfaces, if necessary.</p>
        <p>Once this information has been extracted, the code translation stage begins. In this phase, the system
generates</p>
        <p>Subsequently, the generation of directories and complementary files is performed, which form the
basic structure of an Android project.</p>
        <p>Finally, all the generated files are integrated and organized into a complete Android project. From
this project, it is possible to compile and package the application into an executable file (APK). This
ifle can be downloaded and run on a mobile device or opened in development environments such as
Android Studio, where the developer can inspect it, adjust it, or extend its functionality.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>5. Future Work</title>
      <p>• Development of the tool The development of the tool based on the model requires moving
towards its complete implementation, including the graphical interface, the transformation engine,
and the code output connectors. It is proposed to follow an agile methodology, particularly
SCRUM, to allow constant inspections, user testing, and continuous adjustments. In addition,
since it is planned to be used in academic environments, it is essential that the tool be intuitive
and easy to use so that students and teachers can easily interact with it.
• Refinement of the domain model It is proposed to continue working on the domain model that
feeds the generator system, especially in the definition of the elements that accurately represent
the fundamental concepts of an Android application. This includes a better representation of
activities, services, controllers, repositories, entities, and data flows, conforming to modern
architectures such as MVVM or Clean Architecture. A richer and more accurate representation
will enable more complete and structured code to be generated.</p>
      <sec id="sec-8-1">
        <title>Backend Generation Code</title>
      </sec>
      <sec id="sec-8-2">
        <title>Backend Generation Prompt</title>
      </sec>
      <sec id="sec-8-3">
        <title>Front</title>
      </sec>
      <sec id="sec-8-4">
        <title>Upload file XMI</title>
      </sec>
      <sec id="sec-8-5">
        <title>Scan file</title>
      </sec>
      <sec id="sec-8-6">
        <title>Reading the file</title>
      </sec>
      <sec id="sec-8-7">
        <title>Extraction of the classes</title>
      </sec>
      <sec id="sec-8-8">
        <title>Extraction of the relations</title>
      </sec>
      <sec id="sec-8-9">
        <title>Translation to code</title>
      </sec>
      <sec id="sec-8-10">
        <title>Generation of classes, .java files</title>
      </sec>
      <sec id="sec-8-11">
        <title>Generation of relations on code</title>
      </sec>
      <sec id="sec-8-12">
        <title>Generation of interfaces</title>
      </sec>
      <sec id="sec-8-13">
        <title>Directory generation and other files</title>
      </sec>
      <sec id="sec-8-14">
        <title>Scan file</title>
      </sec>
      <sec id="sec-8-15">
        <title>Reading the file</title>
      </sec>
      <sec id="sec-8-16">
        <title>Extraction of the classes</title>
      </sec>
      <sec id="sec-8-17">
        <title>Extraction of the relations</title>
      </sec>
      <sec id="sec-8-18">
        <title>Translation to Text</title>
      </sec>
      <sec id="sec-8-19">
        <title>Generation of classes to text</title>
      </sec>
      <sec id="sec-8-20">
        <title>Generation of relations conditions</title>
      </sec>
      <sec id="sec-8-21">
        <title>Generation of methods description</title>
      </sec>
      <sec id="sec-8-22">
        <title>Generation of use case description</title>
      </sec>
      <sec id="sec-8-23">
        <title>Text</title>
      </sec>
      <sec id="sec-8-24">
        <title>With instructions</title>
        <p>and conditions
/manifest
/java
/res
/test</p>
      </sec>
      <sec id="sec-8-25">
        <title>Extract file</title>
        <p>• Scalability to other styles of mobile applications Although the initial focus is on utilitarian
or functional applications, it is planned to explore the scalability of the model to other styles of
applications, such as those oriented to entertainment or games. These have diferent structures and
requirements (e.g., graphics engines, game cycles, animation logic), so adjustments or extensions
to the domain model and code generator will be required to adequately support them.
• Validation with case studies Perform tests with real or academic projects to evaluate the
efectiveness of the tool. Development times, quality of the generated code, and usability of the
system could be compared with traditional approaches. Generate performance statistics of the
tool to make improvements.
• Extension of the generator to other platforms Explore the possibility of extending the system
so that it can also generate code for other mobile platforms, such as iOS or cross-platform solutions
using tools such as Flutter or React Native. However, it is also important to take into account the
version of the system to be coupled with these tools so that it can be used on other platforms.
• Visual communication of metrics and structure Incorporate functionalities that allow the
graphical display of the generated structure (for example, in the form of an inverse UML class
diagram) and code quality metrics, to facilitate the understanding and evaluation of the results.</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>6. Conclusions</title>
      <p>The application of Model Driven Engineering (MDE) in software development proves to be an efective
strategy to structure, simplify, and accelerate the generation of Android applications. By using UML
class diagrams as the basis, the system’s logic and structure are clearly defined, reducing ambiguity,
improving traceability, and minimizing implementation errors.</p>
      <p>Automating code generation allows for component reuse, scalability, and faster delivery times, while
the integration of Clean Architecture provides maintainability, testability, and adaptability to future
changes. This results in more sustainable and robust applications.</p>
      <p>Additionally, incorporating generative AI and prompt engineering ofers a new layer of innovation.
Through well-crafted prompts, developers can automatically generate use cases—complementary pieces
of code—that improve productivity and support academic and industrial environments.</p>
      <p>In summary, the proposed tool represents a significant contribution by combining MDE, Clean
Architecture, and AI-assisted techniques to deliver Android applications that are consistent, maintainable,
and aligned with modern development practices.</p>
    </sec>
    <sec id="sec-10">
      <title>Declaration on Generative AI</title>
      <p>The authors have not employed any Generative AI tools.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Rumbaugh</surname>
          </string-name>
          , I. Jacobson,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Booch, The Unified Modeling Language Reference Manual, (2nd Edition)</article-title>
          ,
          <source>Pearson Higher Education</source>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>E.</given-names>
            <surname>Hernández</surname>
          </string-name>
          <string-name>
            <surname>Orallo</surname>
          </string-name>
          , El lenguaje unificado de modelado (uml),
          <source>Acta de Informática y Computación</source>
          <volume>026067</volume>
          (
          <year>2022</year>
          ). URL: https://www.acta.es/medios/articulos/informatica_y_computacion/026067.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>D.</given-names>
            <surname>Sanchez</surname>
          </string-name>
          ,
          <article-title>Leveraging a model transformation chain for semi-automatic source code generation on the android platform</article-title>
          .,
          <source>in: ICAI Workshops</source>
          ,
          <year>2023</year>
          , pp.
          <fpage>150</fpage>
          -
          <lpage>164</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Muñoz</surname>
          </string-name>
          ,
          <article-title>Automatic code generation system for transactional web applications</article-title>
          ,
          <source>in: Computational Science and Its Applications-ICCSA</source>
          <year>2019</year>
          : 19th International Conference, Saint Petersburg,
          <source>Russia, July 1-4</source>
          ,
          <year>2019</year>
          , Proceedings, Part V 19, Springer,
          <year>2019</year>
          , pp.
          <fpage>436</fpage>
          -
          <lpage>451</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -24308-1_
          <fpage>36</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>D.</given-names>
            <surname>Sobania</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Briesch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hanna</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Petke</surname>
          </string-name>
          ,
          <article-title>An analysis of the automatic bug fixing performance of chatgpt</article-title>
          ,
          <source>in: 2023 IEEE/ACM International Workshop on Automated Program Repair (APR)</source>
          , IEEE,
          <year>2023</year>
          , pp.
          <fpage>23</fpage>
          -
          <lpage>30</lpage>
          . doi:
          <volume>10</volume>
          .1109/APR59189.
          <year>2023</year>
          .
          <volume>00012</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Jiang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Shen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <article-title>A survey on large language models for code generation</article-title>
          ,
          <source>ACM Trans. Softw. Eng. Methodol</source>
          . (
          <year>2025</year>
          ). doi:
          <volume>10</volume>
          .1145/3747588.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>H.</given-names>
            <surname>Zafar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ur Rehman Khan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mashkoor</surname>
          </string-name>
          , H. U. Nisa,
          <article-title>Mobicat: a model-driven engineering approach for automatic gui code generation for android applications</article-title>
          ,
          <source>Frontiers in Computer Science</source>
          <volume>6</volume>
          (
          <year>2024</year>
          ). doi:
          <volume>10</volume>
          .3389/fcomp.
          <year>2024</year>
          .
          <volume>1397805</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>H.</given-names>
            <surname>Florez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Leon</surname>
          </string-name>
          ,
          <article-title>Model driven engineering approach to configure software reusable components</article-title>
          , in: Applied Informatics: First International Conference, ICAI 2018, Bogotá, Colombia, November 1-
          <issue>3</issue>
          ,
          <year>2018</year>
          , Proceedings 1, Springer,
          <year>2018</year>
          , pp.
          <fpage>352</fpage>
          -
          <lpage>363</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -01535-0_
          <fpage>26</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <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>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -95171-3_
          <fpage>28</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J.</given-names>
            <surname>Bézivin</surname>
          </string-name>
          ,
          <article-title>On the unification power of models</article-title>
          ,
          <source>Software &amp; Systems Modeling</source>
          <volume>4</volume>
          (
          <year>2005</year>
          )
          <fpage>171</fpage>
          -
          <lpage>188</lpage>
          . doi:
          <volume>10</volume>
          .1007/s10270-005-0079-0.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A. G.</given-names>
            <surname>Parada</surname>
          </string-name>
          , L. B.
          <string-name>
            <surname>De Brisolara</surname>
          </string-name>
          ,
          <article-title>A model driven approach for android applications development</article-title>
          ,
          <source>in: 2012 Brazilian Symposium on Computing System Engineering</source>
          , IEEE,
          <year>2012</year>
          , pp.
          <fpage>192</fpage>
          -
          <lpage>197</lpage>
          . doi:
          <volume>10</volume>
          . 1109/SBESC.
          <year>2012</year>
          .
          <volume>44</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <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="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Android</surname>
            <given-names>Developers</given-names>
          </string-name>
          , Application Fundamentals,
          <year>2025</year>
          . URL: https://developer.android.com/guide/ components/fundamentals, accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>R. F.</given-names>
            <surname>García</surname>
          </string-name>
          , MVVM:
          <article-title>Model-View-ViewModel, in: iOS Architecture Patterns: MVC, MVP, MVVM, VIPER, and</article-title>
          VIP in Swift, Apress, Berkeley, CA,
          <year>2023</year>
          , pp.
          <fpage>145</fpage>
          -
          <lpage>224</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 978-1-
          <fpage>4842</fpage>
          -9069-
          <issue>9</issue>
          _
          <fpage>4</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>R.</given-names>
            <surname>Bommasani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Hudson</surname>
          </string-name>
          , E. Adeli,
          <string-name>
            <given-names>R.</given-names>
            <surname>Altman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Arora</surname>
          </string-name>
          , S. von Arx,
          <string-name>
            <given-names>M. S.</given-names>
            <surname>Bernstein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bohg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bosselut</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Brunskill</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Brynjolfsson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Buch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Card</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Castellon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Chatterji</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Creel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. Q.</given-names>
            <surname>Davis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Demszky</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Donahue</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Doumbouya</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Durmus</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ermon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Etchemendy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Ethayarajh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Fei-Fei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Finn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Gale</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Gillespie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Goel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Goodman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Grossman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Guha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Hashimoto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Henderson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hewitt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Ho</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Hong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hsu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Huang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Icard</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Jain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Jurafsky</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Kalluri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Karamcheti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Keeling</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Khani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Khattab</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. W.</given-names>
            <surname>Koh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Krass</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Krishna</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kuditipudi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Ladhak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Leskovec</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Levent</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X. L.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Ma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Malik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. D.</given-names>
            <surname>Manning</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mirchandani</surname>
          </string-name>
          , E. Mitchell,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Munyikwa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Nair</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Narayan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Newman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Nie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Niebles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Nilforoshan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Nyarko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Ogut</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Orr</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Papadimitriou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Park</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Piech</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Portelance</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Potts</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Raghunathan</surname>
          </string-name>
          , R. Reich, H.
          <string-name>
            <surname>Ren</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Rong</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Roohani</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Ruiz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Ryan</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          <string-name>
            <surname>Ré</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Sadigh</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Sagawa</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Santhanam</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Shih</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Srinivasan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Tamkin</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Taori</surname>
            ,
            <given-names>A. W.</given-names>
          </string-name>
          <string-name>
            <surname>Thomas</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Tramèr</surname>
            ,
            <given-names>R. E.</given-names>
          </string-name>
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Wu</surname>
            ,
            <given-names>S. M.</given-names>
          </string-name>
          <string-name>
            <surname>Xie</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Yasunaga</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>You</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Zaharia</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Zhang</surname>
            , L. Zheng,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Zhou</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Liang</surname>
          </string-name>
          ,
          <article-title>On the opportunities and risks of foundation models</article-title>
          ,
          <year>2022</year>
          . URL: https://arxiv.org/abs/2108.07258. doi:
          <volume>10</volume>
          .48550/arXiv.2108.07258. arXiv:
          <volume>2108</volume>
          .
          <fpage>07258</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>T.</given-names>
            <surname>Brown</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Mann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Ryder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Subbiah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Kaplan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Dhariwal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Neelakantan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Shyam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Sastry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Askell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Agarwal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Herbert-Voss</surname>
          </string-name>
          , G. Krueger,
          <string-name>
            <given-names>T.</given-names>
            <surname>Henighan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Child</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ramesh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Ziegler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Winter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hesse</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Chen</surname>
          </string-name>
          , E. Sigler,
          <string-name>
            <given-names>M.</given-names>
            <surname>Litwin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Gray</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Chess</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Clark</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Berner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>McCandlish</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Radford</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Sutskever</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Amodei</surname>
          </string-name>
          ,
          <article-title>Language models are few-shot learners</article-title>
          , in: H.
          <string-name>
            <surname>Larochelle</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Ranzato</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Hadsell</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Balcan</surname>
          </string-name>
          , H. Lin (Eds.),
          <source>Advances in Neural Information Processing Systems</source>
          , volume
          <volume>33</volume>
          ,
          <string-name>
            <surname>Curran</surname>
            <given-names>Associates</given-names>
          </string-name>
          , Inc.,
          <year>2020</year>
          , pp.
          <fpage>1877</fpage>
          -
          <lpage>1901</lpage>
          . URL: https://proceedings.neurips.cc/paper_files/paper/2020/file/ 1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>P.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Yuan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Fu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Jiang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Hayashi</surname>
          </string-name>
          , G. Neubig,
          <article-title>Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing</article-title>
          ,
          <source>ACM Computing Surveys</source>
          <volume>55</volume>
          (
          <year>2023</year>
          )
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          . doi:
          <volume>10</volume>
          .1145/3560815.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>H. S.</given-names>
            <surname>Son</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W. Y.</given-names>
            <surname>Kim</surname>
          </string-name>
          , R. Y. C.
          <article-title>Kim, Mof based code generation method for android platform</article-title>
          ,
          <source>International Journal of Software Engineering and Its Applications</source>
          <volume>7</volume>
          (
          <year>2013</year>
          )
          <fpage>415</fpage>
          -
          <lpage>426</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Android</surname>
            <given-names>Developers</given-names>
          </string-name>
          , Android Jetpack,
          <year>2025</year>
          . URL: https://developer.android.com/jetpack, accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>A.</given-names>
            <surname>Nirumand Jazi</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Alfonso</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          ,
          <article-title>Low-code flutter application development solution</article-title>
          ,
          <source>in: Proceedings of the ACM/IEEE 27th International Conference on Model Driven Engineering Languages and Systems</source>
          , MODELS Companion '
          <volume>24</volume>
          ,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery, New York, NY, USA,
          <year>2024</year>
          , p.
          <fpage>838</fpage>
          -
          <lpage>847</lpage>
          . doi:
          <volume>10</volume>
          .1145/3652620.3688330.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>E. A.</given-names>
            <surname>Team</surname>
          </string-name>
          ,
          <article-title>Atl: A model transformation tool</article-title>
          ,
          <year>2025</year>
          . URL: https://help.eclipse.org/latest/topic/org. eclipse.m2m.atl.doc/guide/user/ATL%20User%
          <fpage>20Guide</fpage>
          .html, accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>O. M. G.</surname>
          </string-name>
          (OMG), Qvt - mof query/view/transformation,
          <year>2016</year>
          . URL: https://www.omg.org/spec/QVT, accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>B.</given-names>
            <surname>Team</surname>
          </string-name>
          , Prompt engineering: Best practices for
          <year>2025</year>
          ,
          <year>2025</year>
          . URL: https://www.bridgemind.ai/blog/ prompt-engineering-best-practices, accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>M.</given-names>
            <surname>Carli</surname>
          </string-name>
          , Uml for android engineers,
          <year>2021</year>
          . URL: https://www.kodeco.com/ 21792733-uml
          <article-title>-for-android-engineers/page/3</article-title>
          , accessed:
          <fpage>2025</fpage>
          -09-07.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>