Vous êtes sur la page 1sur 3

Master 

M2 GL 

Module : IDM / 2021‐2022 

TP 1 : Transformation UML2JAVA 
L'exemple UML2Java décrit la transformation d'un modèle UML en un modèle Java simplifié. 
Le modèle Java contient les informations pour la création de classes Java, notamment en ce 
qui concerne la structure de ces classes, à savoir la référence du paquet, les attributs et les 
méthodes. 

1‐ Les Métamodèles 
Le métamodèle cible de Java simplifié est le suivant : 

 
   

Page 1 sur 3 
 
Le métamodèle source est une représentation simplifié du métamodèle UML : 

 
2‐ Travail demandé 
Le travail demandé est d’implémenter cet exemple sous forme de projet ATL sous Eclipse EMF. 

Durant la réalisation de ce TP, l’étudiant doit : 

1  Implanter les deux métamodèles cible et source 

2  Corriger des éventuelles erreurs au niveau des deux métamodèles  

3  Etudier le code ATL des règles (page 03) et donner des explications pour chaque partie du 
code (dans le rapport)   

4  Intégrer les règles de transformation écrites en ATL dans le projet  

5  Corriger et/ou modifier le code ATL des règles de transformation  

6  Créer le modèle source en assurant la conformité de ce modèle à son métamodèle 

7  Exécuter les transformations et produire le modèle cible 

8  Etablir un rapport (08 pages max) sur la réalisation du TP 

NB : Les modèles et métamodèles créés doivent être en format « .Ecore », format graphique 
(selon l’éditeur utilisé) ou en format standard XMI. 

   

Page 2 sur 3 
 
Code ATL de la transformation 
module UML2JAVA;
create OUT : JAVA from IN : UML;
helper context UML!ModelElement def: isPublic() : Boolean =
self.visibility = #vk_public;
helper context UML!Feature def: isStatic() : Boolean = self.ownerScope
= #sk_static;
helper context UML!Attribute def: isFinal() : Boolean =
self.changeability = #ck_frozen;
helper context UML!Namespace def: getExtendedName() : String =
if self.namespace.oclIsUndefined() then
''
else if self.namespace.oclIsKindOf(UML!Model) then
''
else
self.namespace.getExtendedName() + '.'
endif endif + self.name;
rule P2P {
from e : UML!Package (e.oclIsTypeOf(UML!Package))
to out : JAVA!Package (
name <- e.getExtendedName()
)
}
rule C2C {
from e : UML!Class
to out : JAVA!JavaClass ( name <- e.name,
isAbstract <- e.isAbstract, isPublic <- e.isPublic(), package <-
e.namespace
)
}
rule D2P {
from e : UML!DataType
to out : JAVA!PrimitiveType ( name <- e.name,
package <- e.namespace
)
}
rule A2F {
from e : UML!Attribute
to out : JAVA!Field ( name <- e.name,
isStatic <- e.isStatic(), isPublic <- e.isPublic(), isFinal <-
e.isFinal(), owner <- e.owner,
type <- e.type
)
}
rule O2M {
from e : UML!Operation
to out : JAVA!Method ( name <- e.name,
isStatic <- e.isStatic(), isPublic <- e.isPublic(), owner <- e.owner,
type <- e.parameter->select(x|x.kind=#pdk_return)-> asSequence()-
>first().type,
parameters <- e.parameter->select(x|x.kind<>#pdk_return)-> asSequence()
)
}

rule P2F {
from e : UML!Parameter (e.kind <> #pdk_return)
to out : JAVA!FeatureParameter ( name <- e.name,
type <- e.type
)
}
 

Page 3 sur 3 
 

Vous aimerez peut-être aussi