1.4 Langage de transformation de modèles ATL
Plusieurs langages de transformation ont été
proposés pour réaliser des transformations de modèle selon
l'approche par méta-modélisation, parmi lesquels le standard
MOF2.0 QVT et le langage ATL (ATLAS Transformation Langage) [7].
Dans ce mémoire, notre choix s'est porté sur ce
dernier langage. En effet, ATL est largement utilisé maintenant par la
communauté et il est aussi considéré comme un standard de
transformation dans Eclipse.
ATL [8], acronyme de «ATLAS Transformation Langage»
est un langage de transfor-
page 15
1.4 Langage de transformation de modèles ATL
mation de modèles dans le domaine de l'IDM
(Ingénierie Dirigée par les Modèles) ou MDE (Model-Driven
Engineering). Il fournit aux développeurs un moyen de spécifier
la manière de produire un certain nombre de modèles cibles
à partir de modèles sources.
1.4.1 Vue d'ensemble sur la transformation ATL
Une transformation de modèles définit la
façon de générer un modèle Mb, conforme au
méta-modèle MMb, à partir du modèle Ma conforme au
méta-modèle MMa. Un élément majeur dans
l'ingénierie des modèles est de considérer, dans la mesure
du possible, tous les objets traités comme des modèles. La
transformation de modèles doit être elle-même définie
comme un modèle (MMa2MMb.atl). Ce modèle de transformation doit
être conforme au méta-modèle qui définit la
sémantique de transformation de modèles (ATL). Tous les
méta-modèles doivent être conformes au
méta-méta-modèle considéré (ECore). La
Figure 1.6 donne une vue d'ensemble sur la transformation ATL [5].
FIGURE 1.6 - Vue d'ensemble sur la
transformation ATL
Le langage ATL offre différents types d'unités,
qui sont définis dans des fichiers d'extension «.atl»
distincts. Ces unités sont le module permettant de définir les
opérations des transformations des modèles, des requêtes
ATL et des bibliothèques qui peuvent être importées par les
différents types d'unités ATL, y compris les autres
bibliothèques. Un aperçu de ces différents types
d'unités est fourni dans la suite.
page 16
1.4 Langage de transformation de modèles ATL
1.4.2 Présentation d'ATL
Un programme ATL qui définit la transformation d'un
modèle en un autre modèle est appelé module et est
stocké dans un fichier (.atl). Le module est composé d'une
section entête, d'une section d'importation de bibliothèques,
d'une section de déclaration des fonctions auxiliaires (helpers) et
d'une section de spécification des règles de transformation.
Les règles de transformation en ATL peuvent être
spécifiées dans un style déclaratif (mat-ched/lazy rules)
ou impératif (called rules).
Dans ce qui suit, nous décrivons en détails les
différentes sections ATL utilisées dans le cadre de notre
programme de transformation.
~ La section d'en-tête
(header)
La section d'en-tête définit le nom du module de
transformation ainsi que le nom des variables correspondantes aux
modèles sources et cibles. Elle encode également le mode
d'exécution. La syntaxe de la section d'en-tête est définie
comme suit :
module MMa2MMb;
create Mb : MMb [from|refining] Ma : MMa ;
|
~ La section d'importation
La section d'en-tête définit le nom du module de
transformation ainsi que le nom des variables correspondantes aux
modèles sources et cibles. Elle encode également le mode
d'exécution. La syntaxe de la section d'en-tête est définie
comme suit :
uses nom bibliothèque;
~ Les helpers
Les fonctions ATL sont appelées des helpers
d'après le standard OCL (Object Constraint Language (OCL)) sur le quel
ATL se base. OCL définit deux sortes de helpers : opération et
attribut.
1. La syntaxe d'un helper opération est définie
comme suit :
helper [context type_du_contexte]? def : nom_du_helper (
nom_paramètre1 : type_paramètre1 , nom_paramètre2 :
type_paramètre2) :
type_de_retour = expression;
|
page 17
1.4 Langage de transformation de modèles ATL
2. La syntaxe d'un helper attribut est définie comme suit
:
helper [context type_du_contexte]? def :
nom_du_helper : type_de_retour = expression;
|
Il existe une différence dans la sémantique
d'exécution du helper opération et du helper attribut. Le premier
est calculé à chaque appel tandis que le deuxième est
calculé une seule fois selon l'ordre de sa déclaration dans le
fichier ATL.
~ Les règles
Le langage ATL est un langage hybride, il contient aussi bien
les constructions déclaratives que les constructions impératives.
Le style recommandé est le style déclaratif, cependant, pour
faciliter les constructions plus ou moins compliqués il est possible
d'avoir recourt au style impératif. Le langage comprend trois types de
règles déclaratives et un type de règles
impératives. La Figure 1.7 présente la syntaxe abstraite des
règles de transformation ATL.
FIGURE 1.7 - Les règles de
transformation ATL.
Les règles standards (Matchedrules)
:
Ils constituent le noyau de la transformation
déclarative. Elles sont appelées une seule fois pour chaque tuple
correspondant à leurs motifs d'entrée trouvée dans les
modèles source. Elles permettent de spécifier pour quels
éléments sources les éléments cibles sont
générés ainsi que la façon dont ces
éléments cibles sont initialisés.
Les règles paresseuses (lazyrule)
:
Elles ressemblent aux règles standards, à la
différence qu'elles ne sont déclenchées que par d'autres
règles. Elles sont appliquées sur chaque tuple autant de fois
qu'elles sont référencées.
page 18
1.5 La plateforme de modélisation sous Eclipse
Les règles paresseuses uniques (unique
lazyrule) :
Identiques aux règles paresseuses non uniques, à la
différence qu'elles sont appliquées une
unique fois pour chaque tuple.
Les règles appelées (calledrules)
:
Elles fournissent le style de programmation impératif.
Elles peuvent être vues comme des
helper particuliers. Elles doivent être
déclenchées.
~ Les bibliothèques ATL
Une bibliothèque ATL permet de définir un ensemble
de helpers qui peuvent être appelés à
partir des différentes unités ATL. Ce fichier est
défini par l'en-tête :
library nom_bib;
|