ingénierie dirigée par les modèlescregut.perso.enseeiht.fr/ens/2016-insa-idm/idm-insa-2016... ·...

142
Ingénierie Dirigée par les Modèles Ingénierie Dirigée par les Modèles Méta-modélisation avec ECore et Transformation de Modèles en ATL Faiez Zalila , Marc Pantel, Xavier Crégut, Arnaud Dieumegard, Benoît Combemale IRIT–ENSEEIHT 2, rue Charles Camichel - BP 7122 F-31071 Toulouse Cedex 7 {prenom.nom}@enseeiht.fr 30 septembre 2013 Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 1 / 142

Upload: others

Post on 16-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Ingénierie Dirigée par les ModèlesMéta-modélisation avec ECore et Transformation de Modèles en ATL

Faiez Zalila, Marc Pantel, Xavier Crégut, Arnaud Dieumegard, Benoît Combemale

IRIT–ENSEEIHT2, rue Charles Camichel - BP 7122

F-31071 Toulouse Cedex 7{prenom.nom}@enseeiht.fr

30 septembre 2013

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 1 / 142

Page 2: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)

Le langage OCL

Transformations

Le langage ATL

Page 3: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèlesIntérêt des modèlesModèles et méta-modèlesLes types de modèles dans un développementTransformation de modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)

Le langage OCL

Transformations

Le langage ATL

Page 4: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Intérêt des modèles

Rôle d’un modèle

I On utilise des modèles pour mieux comprendre un système.

Pour un observateur A, M est un modèle de l’objet O, si M aide A àrépondre aux questions qu’il se pose sur O. (Minsky)

I Un modèle est une simplification, une abstraction du système.I Exemples :

I une carte routièreI une partition de musiqueI un diagramme UMLI ...

I Un modèle permet :I de comprendre,I de communiquer,I de construire

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 4 / 142

Page 5: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Intérêt des modèles

Exemple : plan géographique du métro de LondresVersion de 1921 (http://www.clarksbury.com/cdl/maps.html)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 5 / 142

Page 6: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Intérêt des modèles

Exemple : plan schématique du métro de LondresVersion schématique — Harry Beck — de 1938 (http://www.clarksbury.com/cdl/maps.html)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 6 / 142

Page 7: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Intérêt des modèles

Pourquoi modéliser?

I Mieux comprendre les systèmes complexes

I Séparation des préoccupations/aspectsI Abstraction des plateformes :

I Architecture matérielle, RéseauI Architecture logicielle, Système d’exploitationI Langages

I Abstraction des domaines applicatifs

I Réutilistion

I Formalisation

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 7 / 142

Page 8: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Intérêt des modèles

Pourquoi de nombreux modèles?

I Le long du cycle de vie :I Analyse des besoins (indépendant solution)I Architecture, Conception détaillée (indépendant plateforme)I Réalisation, Déploiement (dépendant plateforme)

I Différentes étapes de raffinement dans une même phaseI Séparation des préoccupations

I Nombreux domaines applicatifsI Nombreuses plateformes (matériel, logiciel, technologique)I Nombreuses contraintes (service et qualité de service)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 8 / 142

Page 9: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Modèles et méta-modèles

Modèles et méta-modèles

Définition : Méta-modèle = modèle du modèle.=⇒ Il s’agit de décrire la structure du modèle.

Exemple : Structure d’un diagramme à état

*

Transition

ev: String

suivantsortantes* 1

Etat

nom: String1..*

initial

1

nom: String

Diagramme

rouge vert orangeOV

R

Conformité : Un modèle est conforme à un méta-modèle si :

I tous les éléments du modèle sont instance du méta-modèle ;

I et les contraintes exprimées sur le méta-modèle sont respectées.

Suite : Où est décrit le méta-modèle?

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 9 / 142

Page 10: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Exemple : le monde réel est un feu tricolore

Classe

nom: StringRéférence

* *

Attribut

nom: Stringnom: String

*

Transition

ev: String

suivantsortantes* 1

Etat

nom: String1..*

initial

1

nom: String

Diagramme

rouge vert orangeOV

R

Feu tricolore

Page 11: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Modèles et méta-modèles

Pyramide de l’OMG

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 11 / 142

Page 12: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Modèles et méta-modèles

Pyramide de l’OMGExplications

I M3 : méta-méta-modèle :I réflexif : se décrit en lui-mêmeI pour définir des méta-modèles, langages (exemple : UML)I exemple MOF de l’OMG

I M2 : méta-modèle : langage de modélisation pour un domaine métierI Exemples : UML2, SPEM...

I M1 : modèle : un modèle du monde réelI Exemples : un modèle de feu tricolore, un modèle de bibliothèque...

I M0 : le monde réelI Exemples : un feu tricolore, une bibliothèque...

Remarque : Le numéro permet de préciser l’objectif du « modèle ». Dans la suite,les notions de modèle et méta-modèle sont suffisantes.Pas nouveau :

I Grammarware : EBNF, syntaxe de Java, Programme Java, exécution

I XMLware : XML+DTD, MathML, document valide, données réelles

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 12 / 142

Page 13: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Exemple : le monde réel est une bibliothèque

Bibliothèque

Livre

titre: String

nbPages: int1..*

livres

DataType

**

Attribut

nom: String

Classe

nom: StringAssociation

Type

Référence* *

Attribut

nom: Stringnom: String

superclasses0..*

Classe

nom: String

bibliothèque livre1

nbPages = 680

titre = "EMF"

livre2

Page 14: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Modèles et méta-modèles

Intérêt des méta-modèles

I définir les propriétés structurelles d’une famille de modèles :I capturées par la structure du méta-modèle (multiplicité, références, etc.)I exprimées dans un langage de contrainte.

Exemple : Exprimer que le nb de pages d’un livre est positif en OCL :

context Livre inv: nbPages > 0

I définir la conformité d’un modèle par rapport à un métamodèle

I transformer le modèle (restructuration, raffinement, traduction vers un autreMM, syntaxes concrètes...)

I permettre l’interopérabilité entre outils grâce à une description connue (cf.MM) des données échangées

I plus généralement, raisonner et travailler sur les modèles

I ...

I Mais a-t-on défini la sémantique du MM?

Remarque : La sémantique d’un langage de programmation est définie sur lelangage (M2), pas sur le programme (M1).

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 14 / 142

Page 15: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Modèles et méta-modèles

Modèle et code : différentes perspectives

Code Code

Model

Code

Model

Code

Model Model

the code

the model is

some design

Let’s do

model coexist

code andthe code is

the model

What’s a

model?

CodeModel onlyModel−centric

Engineering

Roundtrip

VisualizationCode only

(http://www.ibm.com/developerworks/rational/library/3100.html)

Remarque : L’évolution est à aller vers le tout modèle :

I modèles nécessaires car au début le système est trop compliqué

I besoin de vérifier/valider les modèles (coût si erreurs identifiées tardivement)

I raffiner les modèles et aller vers le code

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 15 / 142

Page 16: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Les types de modèles dans un développement

Le modèle au centre du développement

Objectif : Tenter une interopérabilité par les modèlesI Partir de CIM (Computer Independant Model) :

I aucune considération informatique n’apparaît

I Faire des modèles indépendants des plateformes (PIM)I rattaché à un paradigme informatique ;I indépendant d’une plateforme de réalisation précise

I Spécifier des règles de passage (transformation) vers ...I ... les modèles dépendants des plateformes (PSM)

I version modélisée du code ;I souvent plus facile à lire.

I Automatiser au mieux la production vers le codePIM→ PSM→ Code

=⇒ Processus en Y

ModelsTransformation

QoS

PIM PDM

PSM

CIM

Code

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 16 / 142

Page 17: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Transformation de modèles

Exemples de transformation

I PIM −→ PIM :I privatiser les attributsI réorganiser le code (refactoring) : introduction de patron de conception...

I PIM −→ PSMI génération semi-automatique grâce à des marqueurs :

I classe marquée active⇒ hérite de Thread...I persistance

I motif de passage d’une classe UML à une classe JavaI prise en compte de l’héritage multiple (C++, Eiffel, Java)I prise en compte des technologies disponibles

I PSM −→ PIM :I adaptation pour gérer l’interopérabilité entre outilsI rétroconception, abstraction, analyse statique...

Conséquence : L’Ingénierie Dirigée par les Modèles repose surla méta-modélisation ET les transformations.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 17 / 142

Page 18: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Introduction à l’ingénierie dirigée par les modèles

Transformation de modèles

Types de transformation

(from Anneke Kleppe)Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 18 / 142

Page 19: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processusDéfinition du problèmeLes réseaux de PetriTraduction des processus en réseau de PetriFormalisation de la propriété de terminaisonArchitecture générale de l’application

Méta-modélisation (avec Ecore)

Le langage OCL

Transformations

Le langage ATL

Page 20: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Définition du problème

Étude de cas : Vérifier la terminaison de processus

I Définition : Un processus (Process) est composé de plusieurs éléments :I activités (WorkDefinition)I dépendances (WorkSequence) entre activitésI ressources (Resource)I et des notes (Guidance)

I Exemple de processus (sans resources)

RédactionTestsRedactionDoc Developement

Conception

startToStart

finishToFinish

finishToStart

startToStart

finishToFinish

I Question : Est-ce qu’un processus (quelconque) peut se terminer?

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 20 / 142

Page 21: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Définition du problème

Problèmes posés

I Pour répondre à la question, il faut :I savoir comment sera exécuté un procédé (sémantique d’exécution)I en particulier, tenir compte des contraintes :

I dépendances (WorkSequence) : vérifier l’état des activitésI ressources (Resource) : il faut gérer les allocations et les libérations

I examiner (toutes) les exécutions possibles pour voir si une au moins termineI être efficace, etc.

=⇒ Ceci est difficile !I Solution choisie :

I Définir une sémantique par traductionI exprimer la sémantique de SimplePDL en s’appuyant sur un langage formel (ex. les réseaux

de Petri).

I et s’appuyer sur les outils existants (ex. le model-checker de Tina)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 21 / 142

Page 22: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Les réseaux de Petri

Les réseaux de Petri

I Quelques exemples :

EtéAutomne

Hiver Printemps

ConsommateurProducteur Tampon

2

I Vocabulaire : place, transition, arc, read_arc, jeton

I Une transition est franchissable si toutes les places entrantes contiennent aumoins le nombre de jetons indiqué sur l’arc

I Tirer une transition : enlever des places entrantes le nombre de jetonscorrespondant au poids de l’arc (sauf read_arc) et placer dans les places desorties le nombre de jetons indiqué sur les arcs sortants

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 22 / 142

Page 23: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Les réseaux de Petri

Syntaxe concrète des réseaux de Petri pour Tina

EtéAutomne

Hiver Printemps

pl Hiver (1)tr h2p Hiver −> Printempstr p2e Printemps −> Etetr e2a Ete −> Automnetr a2h Automne −> Hiver

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 23 / 142

Page 24: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Les réseaux de Petri

Expression de propriétés

I Propriétés exprimées en LTL (Logique Temporelle Linéaire) :

[] <> Ete; # Toujours il y aura un été− <> Ete; # Il n’y aura pas d’été

I Pour vérifier ces propriétés, il suffit de taper :

tina −s 3 saisons.net saisons.ktzselt −S saisons.scn saisons.ktz −prelude saisons.ltl

I Le résultat est :

1 Selt version 2.9.4 −− 11/15/08 −− LAAS/CNRS2 ktz loaded, 4 states, 4 transitions3 0.000s45 − source saisons.ltl;6 TRUE7 FALSE8 state 0: Hiver9 −h2p ... (preserving T)−>

10 state 2: Ete11 −e2a ... (preserving Ete)−>12 state 4: Automne13 [accepting all]14 0.000s

Propriété 1 vraiePropriété 2 fausseun contre-exemple fourni

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 24 / 142

Page 25: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Traduction des processus en réseau de Petri

Principe de la traduction SimplePDL vers PetriNet

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 25 / 142

Page 26: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Illustration sur un exemple de processus

Page 27: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Formalisation de la propriété de terminaison

Propriétés LTL de terminaison d’un processus

I Définition : Un processus se termine si toutes les activités qui le composent seterminent.

I Formalisation en LTL : (pour notre exemple)

1 op finished = Conception_finished /\ RedactionTests_finished /\ RedactionDoc_finished /\Developpement_finished;

2

3 [] (finished => dead);4 [] <> dead ;5 [] (dead => finished);6 − <> finished;

I Cette propriété dépend du processus considéré (définition de finished)=⇒ Il faut donc l’engendrer pour chaque nouveau processus

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 27 / 142

Page 28: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Architecture générale de l’application

Schéma général

Tina

BNF

PetriNet

.ecore

proprietes

.ltl

.PetriNet

MyProcess MyProcess

.net

LTL

BNF

Résultats

.txt

SimplePDL

.ecoreSimplePDL

BNF

.txt

MyProcess

<<conformsTo>>

<<conformsTo>>

.SimplePDL

MyProcessT2M

M2T

<<conformsTo>> <<conformsTo>><<conformsTo>>

M2M

M2TTina

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 28 / 142

Page 29: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Étude de cas : vérifier des modèles de processus

Architecture générale de l’application

Méta-modèles et transformations

Deux méta-modèles :

I SimplePDL

I PetriNet

Trois types de transformations :I Transformations texte à modèle pour définir des syntaxes concrètes :

I textuelles : par exemple avec XtextI graphique : par exemple avec GMF ou Sirius

I Transformations de modèle à modèle :I traduire un modèle SimplePDL en un modèle PetriNet

I Transformations modèle à texte :I transformer un modèle PetriNet dans la syntaxe concrète de TinaI engendrer la propriété LTL de terminaison à partir d’un modèle de SimplePDL

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 29 / 142

Page 30: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)Les langages de méta-modélisationLe langage Ecore d’Eclipse/EMFMétamodélisation de SimplePDLMétamodélisation PetriNet

Le langage OCL

Transformations

Le langage ATL

Page 31: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Les langages de méta-modélisation

Les langages de méta-modélisation

Plusieurs langages proposés :

I MOF (Meta-Object Facility) proposé par l’OMG, variantes EMOF et CMOFAu départ description de UML en UMLExtraction du minimum d’UML pour décrire UML =⇒ MOF

I Ecore : Eclipse/EMF (Eclipse Modelling Framework)Implantation de EMOF (équivalent)

I KM3 (Kernel MetaMetaModel) : Meta-modèle de AMMA/ATL, (LINA, Nantes)

I Kermeta : (IRISA, Rennes) extension de EMOF/Ecore pour permettre de décrire lecomportement d’un méta-modèle (méta-programmation).

I GME (The Generic Modeling Environment), Vanderbilt.http://www.isis.vanderbilt.edu/projects/gme/

I ...

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 31 / 142

Page 32: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Le langage de méta-modélisation ECore (Eclipse/EMF)Extrait du méta-modèle ECore : principales notions

EClass

name: String

EAttribute

name: String

lowerBound: int

upperBound: int

EReference

name: String

containment: boolean

lowerBound: int

upperBound: int

EDataType

name: String

0..*

10..*

1

eReferences

0..*

eOpposite 0..1

eAttributeType

eAttributes

eReferenceType

eSuperTypes

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 32 / 142

Page 33: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Le langage de méta-modélisation ECore (Eclipse/EMF)Exemple de modèle ECore : bibliothèque

Bibliothèque

Livre

titre: String

nbPages: int

Adhérent

nom: String

Prêt

dateEmprunt: Date

durée: int

/dateRetour: Date

0..* adhérents

1..*

livres

0..1prêt

0..31

empruntsemprunteur

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 33 / 142

Page 34: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Le langage de méta-modélisation ECore (Eclipse/EMF)Principaux constituants

I EClass : Description d’un conceptcaractérisé par des attributs et des références

I EAttribute : une propriété de l’objet dont le type est « élémentaire »

I EReference : une référence vers un autre concept (EClass)équivalent à une association UML avec sens de navigation

I La propriété containment indique s’il y a composition :I vrai : l’objet référencé est contenu (durées de vie liées)I faux : c’est une référence vers un objet contenu par un autre élément.

I multiplicité définie sur les attributs et les références (idem UML).Convention : on note -1 pour indiquer * pour upperBound

I Héritage multiple : eSuperTypes

I Référence eOpposite pour indiquer que deux références opposées sont liées(équivalent association UML).

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 34 / 142

Page 35: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Le langage de méta-modélisation ECore (Eclipse/EMF)Extrait méta-modèle ECore : propriétés structurelles

name: String

lowerBound: int

upperBound: int

ordered: boolean

unique: boolean

many: boolean

required: boolean

changeable: boolean

transcient: boolean

derived: boolean

defaultValue: EJavaObject

0..1

eType

EClass EDataType

EAttributeEReference

EPackage

0..*

0..*eSubPackages

eClassifiers

ETypedElement

ENamedElement

EClassifier

EStructuralElement

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 35 / 142

Page 36: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Le langage de méta-modélisation ECore (Eclipse/EMF)Autres caractéristiques de Ecore

I Méta-modèle : plus riche que le premier présenté.

I Éléments abstraits : ENamedElement, ETypedElement, etc.

I Paquetage : ensemble de classes et paquetages

I Caractéristiques liées à la multiplicité : ordered, unique...

I EEnum : énumération : lister les valeurs possibles d’un EDataType.

I Opération (non présentées) : décrit la signature des opérations, pas le code.

Remarque : Héritage multiple et classes abstraites favorisent la factorisation et laréutilisation (ex : ENamedElement, ETypedElement).

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 36 / 142

Page 37: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Métamodèle d’Ecorerefcardz.dzone.com/refcardz/essential-emf

Page 38: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Le langage Ecore d’Eclipse/EMF

Intérêt de définir un modèle ECore

EMF permet d’engendrer :I Le modèle Java correspondant :

I chaque EClass donne une interface et une réalisation. Justification :I Bonne pratique que de définir des interfaces !I Permet de gérer l’héritage multiple

I équipée d’observateurs (changement d’attribut ou de référence).

I Un schéma XML correspondant et les opérations de sérialisation/désérialisationassociées.

I Un éditeur arborescent pour saisir un modèle.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 38 / 142

Page 39: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Métamodélisation de SimplePDL

Le métamodèle de SimplePDL

WorkSequenceWorkDefinition predecessor

1

successor

1

linksToSuccessors

0..*

linksToPredecessors

0..*

linkType: WorkSequenceType[1]name: EString[1]

ProcessElement

<< enumeration >>

WorkSequenceType

startToStart

finishToStart

startToFinish

finishToFinish

Process

name: EString[1]

count: EInt [1]

Resource

count: EInt [1]

Allocation

text: EString[1]

Guidance

processElements

0..*

elements

0..*

0..*

resources

wd

1

resources

Attention : Toutes les propriétés ne sont pas capturées par le MM.=⇒ Il faut donc le compléter : sémantique statiquePar exemple avec des propriétés OCL.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 39 / 142

Page 40: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Métamodélisation de SimplePDL

Contraintes OCL

1 context ProcessElement2 def: process(): Process =3 Process.allInstances()−>select(p | p.processElements−>includes(self))4 −>asSequence()−>first()5

6 context WorkSequence7 inv previousWDinSameProcess: self.predecessor.process = self.process8 inv nextWDinSameProcess: self.successor.process = self.process

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 40 / 142

Page 41: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Métamodélisation de SimplePDL

Même métamodèle dans avec une syntaxe textuelle (OCLinECore) I

1 package simplepdl : simplepdl = ’http://simplepdl’2 {3 enum WorkSequenceType { serializable }4 {5 literal startToStart;6 literal finishToStart = 1;7 literal startToFinish = 2;8 literal finishToFinish = 3;9 }

10 class Process11 {12 attribute name : String;13 property processElements : ProcessElement[*] { ordered composes };14 invariant nameForbidden: name <> ’Process’;15 }16 abstract class ProcessElement17 {18 property getProcess : Process { derived readonly transient volatile !resolve }19 {20 derivation: Process.allInstances()21 ->select(p | p.processElements->includes(self))22 ->asSequence()->first();23 }24 }25 class WorkDefinition extends ProcessElement26 {27 property linksToPredecessors#successor : WorkSequence[*] { ordered };

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 41 / 142

Page 42: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Métamodélisation de SimplePDL

Même métamodèle dans avec une syntaxe textuelle (OCLinECore) II

28 property linksToSuccessors#predecessor : WorkSequence[*] { ordered };29 property suivantes : WorkDefinition[*] { derived readonly transient volatile !resolve

}30 {31 derivation: self.linksToSuccessors->select(successor);32 }33 attribute name : String;34 invariant previousWSinSameProcess: self.getProcess.processElements->includesAll(self.

linksToPredecessors);35 invariant nextWSinSameProcess: self.getProcess.processElements->includesAll(self.

linksToSuccessors);36 }37 class WorkSequence extends ProcessElement38 {39 attribute linkType : WorkSequenceType;40 property predecessor#linksToSuccessors : WorkDefinition;41 property successor#linksToPredecessors : WorkDefinition;42 invariant previousWDinSameProcess: self.getProcess = self.predecessor.getProcess;43 invariant nextWDinSameProcess: self.getProcess = self.successor.getProcess;44 }45 class Guidance extends ProcessElement46 {47 property element : ProcessElement[*] { ordered };48 attribute text : String[?];49 }50 }

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 42 / 142

Page 43: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Méta-modélisation (avec Ecore)

Métamodélisation PetriNet

Le métamodèle PetriNet

Exercice : Proposer un métamodèle en langage ECore pour représenter un réseaude Petri.Exercice : Lister les contraintes OCL à définir pour garantir que les modèlesconformes correspondent à un réseau de Petri valide.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 43 / 142

Page 44: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)

Le langage OCLMotivationPrésentation générale d’OCLSyntaxe du langageConseils

Transformations

Le langage ATL

Page 45: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Motivation

Objectif général

Objectif : OCL est avant tout un langage de requête pour calculer une expressionsur un modèle en s’appuyant sur sa syntaxe (son méta-modèle).=⇒ Une expression exprimée une fois, pourra être évaluée sur tout modèleconforme au méta-modèle correspondant.Exemple : pour une bibliothèque particulière on peut vouloir demander :

I Livres possédés par la bibliothèque? Combien y en a-t-il ?

I Auteurs dont au moins un titre est possédé par la bibliothèque?

I Titres dans la bibliothèque écrits par Martin Fowler?

I Nombre de pages du plus petit ouvrage?

I Nombre moyen de pages des ouvrages?

I Ouvrages de plus 100 pages écrits par au moins trois auteurs?

I ...

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 45 / 142

Page 46: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Motivation

Programmation par contrat

Principe : Établir formellement les responsabilités d’une classe et de ses méthodes.

Moyen : définition de propriétés (expressions booléennes) appelées :

I invariant : propriété définie sur une classe qui doit toujours être vraie, de lacréation à la disparition d’un objet.Un invariant lie les requêtes d’une classe (état externe).

I précondition : propriété sur une méthode qui :I doit être vérifiée par l’appelant pour que l’appel à cette méthode soit possible ;I peut donc être supposée vraie dans le code de la méthode.

postconditions : propriété sur une méthode qui définit l’effet de la méthode,c’est-à-dire :

I spécification de ce que doit écrire le programmeur de la méthode ;I caractérisation du résultat que l’appelant obtiendra.

Exercice : Invariant pour une Fraction (état = numérateur et dénominateur) ?Exercice : Pré- et postconditions de racine carrée et de pgcd?

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 46 / 142

Page 47: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Motivation

OCL et Diagrammes d’UML

OCL peut être utilisé sur différents diagrammes d’UML :I diagramme de classe :

I définir des préconditions, postconditions et invariants :Stéréotypes prédéfinis : «precondition», «postcondition» et «invariant»

I caractérisation d’un attribut dérivé (p.ex. le salaire est fonction de l’âge)I spécifier la valeur initiale d’un attribut (p.ex. l’attribut salaire d’un employé)I spécifier le code d’une opération (p.ex. le salaire annuel est 12 fois le salaire

mensuel)

I diagramme d’état :I spécifier une garde sur une transitionI exprimer une expression dans une activité (affectation, etc.)I ...

I diagramme de séquence :I spécifier une garde sur un envoi de message

I ...

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 47 / 142

Page 48: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

OCL et Méta-modélisation : préciser la sémantique statique d’unmodèle

Le nombre de pages

est positif

Dans une classe,

deux attributs differents

ont des noms differents

est unique

le nom des classes

Bibliothèque

Livre

titre: String

nbPages: int1..*

livres

DataType

**

Attribut

nom: String

Classe

nom: StringAssociation

Type

Référence* *

Attribut

nom: Stringnom: String

superclasses0..*

Classe

nom: String

bibliothèque livre1

nbPages = 680

titre = "EMF"

livre2

Page 49: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Présentation générale d’OCL

The Object Constraint LanguageObjectifs initiaux

I Les langages formels traditionnels (e.g. Z) requièrent de la part des utilisateursune bonne compréhension des fondements mathématiques.

I Object Constraint Language (OCL) a été développé dans le but d’être :I formel, précis et non ambigu,

Employeeinv: self.age > 18age: Integer

wage: IntegerraiseWage()getWage():Integer

I utilisable par un large nombre d’utilisateurs,I un langage de spécification (et non de programmation !),I supporté par des outils.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 49 / 142

Page 50: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Préciser la sémantique statique d’un modèle

«invariant»

«invariant»

«invariant»

this.nbPages > 0

context Classe inv: self.attribut −>forall(a1, a2 | a1 <> a2 implies a1.nom <> a2.nom)

Classe.allInstances() −>select(c | c.name = self.name) −>size() = 1

Bibliothèque

Livre

titre: String

nbPages: int1..*

livres

DataType

**

Attribut

nom: String

Classe

nom: StringAssociation

Type

Référence* *

Attribut

nom: Stringnom: String

superclasses0..*

Classe

nom: String

bibliothèque livre1

nbPages = 680

titre = "EMF"

livre2

Page 51: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Présentation générale d’OCL

The Object Constraint LanguageHistorique

I Développé en 1995 par IBM,

I Inclu dans le standard UML jusqu’à la version 1.1 (1997),

I OCL 2.0 Final Adopted Specification (ptc/06-05-01), May 2006.

I VErsion actuelle : OCL 2.3.1 (ptc/2009-05-03), January 2012.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 51 / 142

Page 52: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Présentation générale d’OCL

The Object Constraint LanguagePropriétés du langage

I Langage de spécification sans effet de bordI une expression OCL calcule une valeur... et laisse le modèle inchangé!⇒ l’état d’un objet ne peut pas être modifié par l’évaluation d’une expression OCL

I l’évaluation d’une expression OCL est instantanée⇒ l’état des objets ne peut donc pas être modifié pendant l’évaluation d’une expression OCL

I OCL n’est pas un langage de programmation !

I OCL est un langage typé :I Chaque expression OCL a un typeI OCL définit des types primitifs : Boolean, Integer, Real et StringI Chaque Classifier du modèle est un nouveau type OCLI Intérêt : vérifier la cohérence des expressions

exemple : il est interdit de comparer un String et un Integer

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 52 / 142

Page 53: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Les types OCL de base

Les types de base (Primitive) sont Integer, Real, Boolean et String. Les opérateurssuivants s’appliquent sur ces types :

Opérateurs relationnels =, <>, >, <, >=, <=

Opérateurs logiques and, or, xor, not, if . . . then. . . else . . . endif

Opérateurs mathématiques +, −, /, ∗, min(), max(). . .

Opérateurs pour les chaînes de caractères concat, toUpper, substring...

Attention : Concernant l’opérateur if ... then ... else ... endif :

I la clause else est nécessaire et,

I les expressions du then et du else doivent être de même type.

Attention : and, or, xor ne sont pas évalués en court-circuit !

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 53 / 142

Page 54: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Priorité des opérateurs

Liste des opérateurs dans l’ordre de priorité décroissante :

1 @pre

2 . −> −− notation pointée et fléchée

3 not − −− opérateurs unaires

4 * /

5 + − −− opérateurs binaires

6 if− then− else− endif

7 < > <= >=

8 = <>

9 and or xor

10 implies −− implication

Remarque : Les parenthèses peuvent être utilisées pour changer la priorité.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 54 / 142

Page 55: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Les autres types OCL

I Tous les éléments du modèle sont des types (OclModelElementType),I y compris les énumérations : Gender :: male,

I Type Tuple : enregistrement (produit cartésien de plusieurs types)

Tuple {a : Collection(Integer) = Set{1, 3, 4}, b : String = ’foo’}

I OclMessageType :I utilisé pour accéder aux messages d’une opération ou d’un signal,I offre un rapport sur la possibilité d’envoyer/recevoir une opération/un signal.

I VoidType :I a seulement une instance oclUndefined,I est conforme à tous les types.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 55 / 142

Page 56: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Contexte d’une expression OCL

Une expression est définie sur un contexte qui identifie :

I une cible : l’élément du modèle sur lequel porte l’expression OCL

T Type (Classifier : Interface, Classe...) context EmployeeM Opération/Méthode context Employee::raiseWage(inc:Int)A Attribut ou extrémité d’association context Employee::job : Job

I le rôle : indique la signification de cette expression (pré, post, invariant...) etdonc contraint sa cible et son évaluation.

rôle cible signification évaluation

inv T invariant toujours vraiepre M précondition avant tout appel de Mpost M postcondition après tout appel de Mbody M résultat d’une requête appel de Minit A valeur initiale de A créationderive A valeur de A utilisation de Adef T définir une méthode ou un attribut

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 56 / 142

Page 57: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Syntaxe d’OCL

inv (invariant) doit toujours être vrai (avant et après chaque appel de méthode)context Employee

inv: self.age > 18context e : Employee

inv age_18: e.age > 18

pre (precondition) doit être vraie avant l’exécution d’une opérationpost (postcondition) doit être vraie après l’exécution d’une opération

context Employee::raiseWage(increment : Integer)pre: increment > 0post my_post: self.wage = self.wage@pre + increment

context Employee::getWage() : Integerpost: result = self.wage

Remarques : result et @pre : utilisables seulement dans une postcondition

I exp@pre correspond à la valeur de expr avant l’appel de l’opération.

I result est une variable prédéfinie qui désigne le résultat de l’opération.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 57 / 142

Page 58: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Syntaxe d’OCL

I body spécifie le résultat d’une opération

context Employee::getWage() : Integerbody: self.wage

I init spécifie la valeur initiale d’un attribut ou d’une association

context Employee::wage : Integerinit: 900

I derive spécifie la règle de dérivation d’un attribut ou d’une association

context Employee::wage : Integerderive: self.age * 50

I def définition d’opérations (ou variables) qui pourront être (ré)utilisées dans desexpressions OCL.

context Employeedef: annualIncome : Integer = 12 * wage

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 58 / 142

Page 59: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

La navigation dans le modèleAccès aux informations de la classe

I Une expression OCL est définie dans le contexte d’une classeI en fait : un type, une interface, une classe, etc.

I Elle s’applique sur un objet, instance de cette classe :=⇒ cet objet est désigné par le mot-clé self.

I Étant donné un accès à un objet (p.ex. self), une expression OCL peut :I accéder à la valeur des attributs :

I self.nbPagesI unLivre.nbPages

I appeler toute requête définie sur l’objet :I self.getNbPages()I unLivre.getNbPages()

Rappel : Une requête (notée {isQuery} en UML) est une opération :I qui a un type de retour (calcule une expression) ;I et n’a pas d’effet de bord (ne modifie pas l’état du système).

Attention : une opération avec effet de bord est proscrite en OCL!

I parcourir les associations...

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 59 / 142

Page 60: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Correspondance entre association et OCL

I Exemple de diagramme de classe

titre: StringnbPages: intmot−clé: String [0..*]

résumé

0..1

nom: Stringprénom: String

1..* {ordered, isUnique}auteur

Auteur

Livre

taille: int

Texte

titre: String

Éditeur1

1..*

livres

Bibliothèque

I pour atteindre l’autre extrémité d’une association, on utilise :I le rôle, p.ex. : unLivre.résuméI à défaut le nom de la classe en minuscule : unLivre.éditeur

I La manière dont une association est vue en OCL dépend :I de sa multiplicité : un exactement (1), optionnel (0..1), ≥ 2I de ses qualificatifs : { isUnique}, { isOrdered}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 60 / 142

Page 61: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Correspondance entre association et OCLassociation avec multiplicité ≤ 1

I multiplicité 1 : nécessairement un objet à l’extrémité (invariant implicite)I unLivre.éditeur

I multiplicité 0..1 (optionnel) :I utiliser l’opération oclIsUndefined()I unLivre.résumé. oclIsUndefined() est :

I vraie si pas de résumé,I faux sinon

I Exemple d’utilisation :

if unLivre.résumé.oclIsUndefined() thentrue

elseunLivre.résumé.taille >= 60

endif

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 61 / 142

Page 62: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Correspondance entre association et OCLassociation avec multiplicité ≥ 2

I les éléments à l’extrémité d’une association sont accessibles par une collectionI OCL définit quatre types de collection :

I Set : pas de double, pas d’ordreI Bag : doubles possibles, pas d’ordreI OrderedSet : pas de double, ordreI Sequence : doubles possibles, ordre

I Lien entre associations UML et collections OCL

UML Ecore OCL

Bag

isUnique Unique Set

isOrdered Ordered Sequence

isUnique, isOrdered Unique, Ordered OrderedSet

I Exemple : unLivre.auteur : la collection des auteurs de unLivre

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 62 / 142

Page 63: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Les collections OCL

I Set : ensemble d’éléments sans doublon et sans ordre

Set {7, 54, 22, 98, 9, 54, 20..25}−− Set{7,54,22,98,9,20,21,23,24,25} : Set(Integer)−− ou Set{7,9,20,21,22,23,24,25,54,98} : Set(Integer), ou...

I OrderedSet : ensemble d’éléments sans doublon et avec ordre

OrderedSet {7, 54, 22, 98, 9, 54, 20..25}−− OrderedSet{7,9,20,21,22,23,24,25,54,98} : OrderedSet(Integer)

I Bag : ensemble d’éléments avec doublons possibles et sans ordre

Bag {7, 54, 22, 98, 9, 54, 20..25}−− p.ex. : Bag{7,9,20,21,22,22,23,24,25,54,54,98} : Bag(Integer)

I Sequence : ensemble d’éléments avec doublons possibles et avec ordre

Sequence{7, 54, 22, 98, 9, 54, 20..25}−− Sequence{7,54,22,98,9,54,20,21,22,23,24,25} : Sequence(Integer)

Les collections sont génériques : Bag(Integer), Set(String), Bag(Set(Livre))

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 63 / 142

Page 64: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérations sur les collections (bibliothèque standard)Pour tous les types de Collection

size(): Integer −− nombre d’éléments dans la collection selfincludes(object: T): Boolean −− est−ce que object est dans sefl ?excludes(object: T): Boolean −− est−ce que object n’est pas dans self ?count(object: T): Integer −− nombre d’occurrences de object dans selfincludesAll(c2: Collection(T)): Boolean

−− est−ce que self contient tous les éléments de c2 ?excludesAll(c2: Collection(T)): Boolean

−− est−ce que self ne contient aucun des éléments de c2 ?isEmpty(): Boolean −− est−ce que self est vide ?notEmpty(): Boolean −− est−ce que self est non vide ?sum(): T −− la somme (+) des éléments de self

−− l’opérateur + doit être défini sur le type des éléments de selfproduct(c2: Collection(T2)): Set( Tuple(premier: T, second: T2))

−− le produit (*) des éléments de self

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 64 / 142

Page 65: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérations de la bibliothèque standard pour les collections

En fonction du sous-type de Collection, d’autres opérations sont disponibles :

I union

I intersection

I append

I flatten

I =

I ...

Une liste exhaustive des opérations de la bibliothèque standard pour les collectionsest disponible dans [OMG OCL 2.3.1, §11.7].

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 65 / 142

Page 66: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérations de la bibliothèque standard pour tous les objets

OCL définit des opérations qui peuvent être appliquées à tous les objets

I oclIsTypeOf(t : OclType) : BooleanLe résultat est vrai si le type de self et t sont identiques.

context Employeeinv: self. oclIsTypeOf(Employee) −− is trueinv: self. oclIsTypeOf(Company) −− is false

I oclIsKindOf(t : OclType) : Booleanvrai si t est le type de self ou un super-type de de self.

I oclIsNew() : BooleanUniquement dans les post-conditionsvrai si le récepteur a été créé au cours de l’exécution de l’opération.

I oclIsInState(t : OclState) : BooleanLe résultat est vrai si l’objet est dans l’état t.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 66 / 142

Page 67: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérations de la bibliothèque standard pour tous les objets

OCL définit des opérations qui peuvent être appliquées à tous les objets

I oclAsType(t : OclType) : TRetourne le même objet mais du type tNécessite que oclIsKindOf(t) = true

I allInstances()I prédéfinie pour les classes, les interfaces et les énumérations,I le résultat est la collection de toutes les instances du type au moment de l’évaluation.

context Employeeinv: Employee. allInstances()−> forAll(p1, p2

| p1 <> p2 implies p1.name <> p2.name)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 67 / 142

Page 68: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérateur select (resp. reject)

Permet de spécifier le sous-ensemble de tous les éléments de collection pourlesquels l’expression est vraie (resp. fausse pour reject).

I collection→ select(elem : T|expr)I collection→ select(elem|expr)I collection→ select(expr)

titre='OCL 2.0'nbPages=180

:Livre

Bib1 titre='UML 2.0'nbPages=560

:Livre

context Bibliothèque inv:self.livres->select(name = 'OCL 2.0')->notEmpty()

titre='EMF'nbPages=650

:Livre

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 68 / 142

Page 69: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérateur exists

Retourne vrai si l’expression est vraie pour au moins un élément de la collection.

I collection→ exists(elem : T|expr)

I collection→ exists(elem|expr)

I collection→ exists(expr)

titre='EMF'nbPages=650

:Livre

Bib1

titre='OCL 2.0'nbPages=180

:Livre

titre='UML 2.0'nbPages=560

:Livre

context Bibliothèque inv:self.livres->exists(name = 'OCL 2.0')

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 69 / 142

Page 70: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérateur forAll

Retourne vrai si l’expression est vraie pour tous les éléments de la collection.

I collection→ forAll(elem : T|expr)

I collection→ forAll(elem|expr)

I collection→ forAll(expr)

Bib1

titre='OCL 2.0'nbPages=180

:Livre

name='UML 2.0'nbPages=560

:Livre

context Bibliothèque inv:self.livres->forAll(nbPages < 200)

name='EMF'nbPages=650

:Livre

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 70 / 142

Page 71: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérateur collect

Retourne la collection des valeurs (Bag) résultant de l’évaluation de l’expressionappliquée à tous les éléments de collection.

I collection→ collect(elem : T|expr)I collection→ collect(elem|expr)I collection→ collect(expr)

Bib1

titre='OCL 2.0'nbPages=180

:Livre

titre='UML 2.0'nbPages=560

:Livre

context Bibliothèque def moyenneDesPages : Real =self.livres->collect(nbPages)->sum() / self.livres->size()

{180, 560, 650}

titre='EMF'nbPages=650

:Livre

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 71 / 142

Page 72: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Opérateur iterate

Forme générale d’une itération sur une collection et permet de redéfinir lesprécédents opérateurs.

collection−> iterate(elem : Type;answer : Type = <value>| <expression_with_elem_and_answer>)

context Bibliothèque def moyenneDesPages : Real =self.livres−> collect(nbPages)−> sum() / self.livres−> size()

−− est identique à :

context Bibliothèque def moyenneDesPages : Real =self.livres−> iterate(l : Livre;

lesPages : Bag{Integer} = Bag{}| lesPages−> including(l.nbPages))

−> sum() / self.livres−> size()

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 72 / 142

Page 73: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Syntaxe du langage

Plusieurs itérateurs pour un même opérateur

Remarque : les opérateurs forAll, exist et iterate acceptent plusieurs itérateurs :

Auteur. allInstances()−> forAll(a1, a2 |a1 <> a2 implies

a1.nom <> a2.nom or a1.prénom <> a2.prénom)

Bien sûr, dans ce cas il faut nommer tous les itérateurs !

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 73 / 142

Page 74: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage OCL

Conseils

Conseils

I OCL ne remplace pas les explications en langage naturel.I Les deux sont complémentaires !I Comprendre (informel)I Lever les ambiguités (OCL)

I Éviter les expressions OCL trop compliquéesI éviter les navigations complexes (utiliser let ou def)I bien choisir le contexte (associer l’invariant au bon type!)I éviter d’utiliser allInstances() :

I rend souvent les invariants plus complexesI souvent difficile d’obtenir toutes les instances dans un système (sauf BD!)

I décomposer une conjonction de containtes en plusieurs (inv, post, pre)I Toujours nommer les extrémités des associations (rôle des objets)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 74 / 142

Page 75: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)

Le langage OCL

TransformationsApplication à l’étude de casContexte/MotivationLes langages de transformationTypes de transformationLe standard QVTConclusion

Le langage ATL

Page 76: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation texte à modèle

I Objectif : définir une syntaxe concrète textuelle pour un méta-modèleI Intérêt : pouvoir utiliser tous les outils classiques pour les textes :

I éditeurs de texteI outils de gestion de version et configurationI recherche de texte, remplacement de texteI ...

I Xtext : http://www.eclipse.org/XtextI définit un pont entre modelware et grammarwareI syntaxe concrète définit par une grammaire LL(k)I engendre un outil de transformation à la demande des fichiers texteI engendre un éditeur syntaxique pour Eclipse

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 76 / 142

Page 77: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Syntaxe concrète textuelle pour SimplePDL

I Un exemple de syntaxe concrète textuelle :

process ExempleProcessus {wd RedactionDocwd Conceptionwd Developpementwd RedactionTestsws Conception f2f RedactionDocws Conception s2s RedactionDocws Conception f2s Developpementws Conception s2s RedactionTestsws Developpement f2f RedactionTests

}

I De nombreuses autres syntaxes sont possibles !

I Qui pourraient être plus pratiques pour l’utilisateur !

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 77 / 142

Page 78: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Description de la syntaxe concrète avec Xtext I

1 grammar fr.enseeiht.PDL1 with org.eclipse.xtext.common.Terminals2

3 generate pDL1 "http://www.enseeiht.fr/PDL1"4

5 Process :6 ’process’ name=ID ’{’7 processElements+=ProcessElement*8 ’}’9 ;

10

11 ProcessElement :12 WorkDefinition13 | WorkSequence14 | Guidance15 ;16

17 WorkSequence :18 ’ws’ linkType=WorkSequenceType19 ’from’ predecessor=[WorkDefinition]20 ’to’ successor=[WorkDefinition]21 ;22

23 Guidance:24 text=STRING25 ;26

27 WorkDefinition :

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 78 / 142

Page 79: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Description de la syntaxe concrète avec Xtext II

28 ’wd’ name=ID29 ;30

31 enum WorkSequenceType :32 start2start = ’s2s’33 | finish2start = ’f2s’34 | start2finish = ’s2f’35 | finish2finish = ’f2f’36 ;

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 79 / 142

Page 80: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation modèle à modèle

I Objectif : définir une transformation d’un modèle A à un modèle BI Intérêt :

I Transformer des données d’un fomalisme à un autreI Modifier un modèleI Extraire une vue d’un modèleI ...

I ATL : http://www.eclipse.org/atl/I Définition de rêgles de transformationI Propose un moteur d’execution de transformations

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 80 / 142

Page 81: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Propriétés d’une transformation modèle à modèle

I Transformations :I endogènes : mêmes méta-modèle source et cible,I exogènes : méta-modèles source et cible différents

I Transformations unidirectionnelles ou bidirectionnelles

I Traçabilité : garder un lien (une trace) entre les éléments cibles et les élémentssources correspondants.

I Incrémentalité : une modification du modèle source sera répercutéeimmédiatement sur le modèle cible.

I Réutilisabilité : mécanismes de structuration, capitalisation et réutilisation detransformation.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 81 / 142

Page 82: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Le langage de transformation ATL

I ATL (ATLAS Transformation Language) est le langage de transformationdéveloppé dans le cadre du projet ATLAS.

I ATL a été développé au LINA à Nantes par l’équipe de Jean Bézivin.

I Fait desormais partie du projet EMP (Eclipse Modeling Project) :http://www.eclipse.org/modeling/

I ATL se compose :I d’un langage de transformation (déclaratif et impératif) ;I d’un compilateur et d’une machine virtuelle ;I d’un IDE s’appuyant sur Eclipse

I Pages principales : http://www.eclipse.org/atl/

I Manuel utilisateur et autres documentations accessibles surhttp://www.eclipse.org/atl/documentation/

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 82 / 142

Page 83: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation en ATL : helper et règle I

1 module SimplePDL2PetriNet;2 create OUT: PetriNet from IN: SimplePDL;3

4 -- Obtenir le processus qui contient ce process element.5 -- Remarque: Ce helper ne serait pas utile si une référence opposite6 -- avait été placée entre Process et ProcessElement7 helper context SimplePDL!ProcessElement8 def: getProcess(): SimplePDL!Process =9 SimplePDL!Process. allInstances()

10 -> select(p | p.processElements-> includes(self))11 -> asSequence()-> first();12

13 -- Traduire un Process en un PetriNet de même nom14 rule Process2PetriNet {15 from p: SimplePDL!Process16 to pn: PetriNet!PetriNet (name <- p.name)17 }

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 83 / 142

Page 84: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation en ATL : principe I

1 -- Traduire une WorkDefinition en un motif sur le réseau de Petri2 rule WorkDefinition2PetriNet {3 from wd: SimplePDL!WorkDefinition4 to5 -- PLACES d’une WorkDefinition6 p_ready: PetriNet!Place (name <- wd.name + ’_ready’,7 marking <- 1,8 net <- wd.getProcess())9 -- TRANSITONS du RdP d’une WorkDefinition

10 , t_start: PetriNet!Transition (name <- wd.name + ’_start’, net <- wd.getProcess() )

11 -- ARCS du RdP d’une WorkDefinition12 , a_nsed2s: PetriNet!Arc (13 kind <- #normal14 , weight <- 115 , source <- p_ready16 , target <- t_start17 , net <- wd.getProcess()18 )

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 84 / 142

Page 85: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation en ATL : resolveTemp et conditions

1 -- Traduire une WorkSequence2 rule WorkSequence2PetriNet {3 from ws: SimplePDL!WorkSequence4 to a_ws: PetriNet!Arc (5 kind <- #read_arc6 , weight <- 17 , source <-8 if ( (ws.linkType = #finishToStart)

or (ws.linkType = #finishToFinish) )9 then thisModule.resolveTemp(ws.predecessor,’p_finished’)

10 else thisModule.resolveTemp(ws.predecessor,’p_started’)11 endif12 , target <-13 if ( (ws.linkType = #finishToStart)

or (ws.linkType = #startToStart) )14 then thisModule.resolveTemp(ws.successor,’t_start’)15 else thisModule.resolveTemp(ws.successor,’t_finish’)16 endif17 , net <- ws.getProcess()18 )19 }

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 85 / 142

Page 86: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation de graphe (AGG)

NAC 1.1 : StartToStart NAC 1.2 : FinishToStart

{x<100}

start

Rule 1 : Start

NAC 2.1 : StartToFinish NAC 2.2 : FinishToFinish

{x<100}

complete

Rule 2 : Complete

setProgression

Rule 3 : SetProgression{x>-1 && x<99}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 86 / 142

Page 87: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Autres langages pour les transformation

I Spécification QVT de l’OMGI Les langages de méta-programmation

I KermetaI EpsilonI ...

I En fait tout langage, y compris les plus généralistes !mais sont-ils adaptés?

I pouvoir d’expression?I structuration de la transformation?I factorisation / réutilisation?I vérification?

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 87 / 142

Page 88: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Transformation modèle à texte

I Objectif : Engendrer un texte à partir d’un modèle.I Intérêt :

I engendrer du code (ex : code Java à partir de diagramme UML)I engendrer de la documentationI engendrer un texte d’entrée d’un outil

ex : engendrer la représentation Tina d’un réseau de Petri

I Outils :I Langage de programmation généralisteI Langage de transformation (plus précisément de requête)I Langage de template, en particulier ceux de

http://www.eclipse.org/modeling/m2t/I le texte de la page intègre des morceaux de scripts.

I Nous verrons l’exemple de Acceleo : http://www.eclipse.org/acceleo/

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 88 / 142

Page 89: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Sérialisation d’un modèle SimplePDL avec Acceleo I

1 [comment encoding = UTF−8 /]2 [module toPDL(’http://simplepdl’)]3

4 [comment Generation de la syntaxe PDL1 à partir d’un modèle de processus/]5

6 [template public toPDL(proc : Process)]7 [comment @main/]8 [file (proc.name.concat(’.pdl1’), false, ’UTF−8’)]9 process [proc.name/]{

10 [for (wd : WorkDefinition | proc.processElements−>getWDs())]11 wd [wd.name/]12 [/for]13 [for (ws : WorkSequence | proc.processElements−>getWSs())]14 ws [ws.predecessor.name/] [ws.getWSType()/] [ws.successor.name/]15 [/for]16 }17 [/file]18 [/template]19

20 [query public getWDs(elements : OrderedSet(ProcessElement)) : OrderedSet(WorkDefinition) =

21 elements−>select( e | e.oclIsTypeOf(WorkDefinition) )22 −>collect( e | e.oclAsType(WorkDefinition) )23 −>asOrderedSet()24 /]

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 89 / 142

Page 90: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Application à l’étude de cas

Sérialisation d’un modèle SimplePDL avec Acceleo II

25

26 [query public getWSs(elements : OrderedSet(ProcessElement)) : OrderedSet(WorkSequence) =

27 elements−>select( e | e.oclIsTypeOf(WorkSequence) )28 −>collect( e | e.oclAsType(WorkSequence) )29 −>asOrderedSet()30 /]31

32 [template public getWSType(ws : WorkSequence)]33 [if (ws.linkType = WorkSequenceType::startToStart)]34 s2s[elseif (ws.linkType = WorkSequenceType::startToFinish)]35 s2f[elseif (ws.linkType = WorkSequenceType::finishToStart)]36 f2s[elseif (ws.linkType = WorkSequenceType::finishToFinish)]37 f2f[/ if]38 [/template]

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 90 / 142

Page 91: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Contexte/Motivation

Le modèle au centre du développement

I Partir de CIM (Computer Independant Model) :I aucune considération informatique n’apparaît

I Faire des modèles indépendants des plateformes (PIM)I rattaché à un paradigme informatique ;I indépendant d’une plateforme de réalisation précise

I Spécifier des règles de passage (transformation) vers ...I ... les modèles dépendants des plateformes (PSM)

I version modélisée du code ;I souvent plus facile à lire.

I Automatiser au mieux la production vers le codePIM→ PSM→ Code

=⇒ Processus en Y

ModelsTransformation

QoS

PIM PDM

PSM

CIM

Code

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 91 / 142

Page 92: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Contexte/Motivation

Définition d’un DSL

Un DSL c’est :

I une syntaxe abstraite (concepts et relations)

I des syntaxes concrètes (graphiques et textuelles)

I des domaines sémantiques

ConcreteSyntax

n

ConcreteSyntax

2

AbstractSyntax

ConcreteSyntax1

SemanticDomain

Mapping

Mapping

M1

M0

M2

M3

<?xml version="1.0" encoding="UTF-8"?>

<simplepdl:Process xmi:version="2.0"

xmlns:xmi="http://www.omg.org/XMI"

xmlns:simplepdl="http://simplepdl">

<activities name="A1" next="//@precedes.0 //

@precedes.4"/> <activities name="A2" previous="//@precedes.0"

next="//@precedes.1" annotateElement="//@guidance.

0"/> <activities name="A3" previous="//@precedes.4" 4"

before="//@activities.3"/> <precedes kind="pk_finish_start" after="//@activities.

4" before="//@activities.2"/> <precedes after="//@activities.2" before="//@activities.

0"/> <guidance guidance="//@activities.1"

detail="MyGuidance"/></simplepdl:Process>

model1model2model3

metamodel1metamodel2meta

model3metamodel4

MMM

??

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 92 / 142

Page 93: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Contexte/Motivation

Classes de transformation

Ma

MMa MMb

MbMt

<<conformTo>> <<conformTo>>

Transformation exogène

Ma

MMab

MbMt

<<conformTo>>

Transformation endogène

PIM

PSM

PIM

PSM

HorizontaleHorizontale

PIM

PSM

Verticale

RestructurationNormalisationintégration de patrons

Raffinement

Migration de logicielFusion de modèles

PIM vers PSMRétro-conception

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 93 / 142

Page 94: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Contexte/Motivation

Propriétés d’une transformation

I Transformations endogènes, exogènes

I Transformations unidirectionnelles ou bidirectionnelles

I Réversibilité

I Traçabilité

I Incrémentabilité

I Réutilisabilité

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 94 / 142

Page 95: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Exemple : Transformation de structures séquentiellesd’enregistrements

Le système Unix :

I une commande peut être constituéed’autres commandes

I les commandes peuvent être chaînées(pipe)

I structures de contrôle possibles surl’exécution des commandes

I tester le résultat d’une commande

AWK : un générateur de rapports par Aho,Kernighan et Weinberg

I recherche de motifs

I exécution d’actions

⇒ style déclaratif

BEGIN {profondeur = 0;nb_blocs = 0;max_p = 0;

}/^6.*/ {

profondeur++;nb_blocs++;if (profondeur > max_p)max_p = profondeur;

}/^−6.*/ {

if (profondeur == 0)print "ERREUR";

elseprofondeur−−;

}END {

print "nb_blocs = " nb_blocs;print "max_p = " max_p;

}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 95 / 142

Page 96: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Exemple : Transformations d’arbres

Principe : Exploiter des dommaines structurés en arbre. Le parcours est guidé par lastructure d’arbre.Exemples :

I XSLT ou XQuery

I Compilation et grammaires attribuées

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 96 / 142

Page 97: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Exemple : Transformations de graphes

Principe : Un modèle en entrée (un graphe orienté étiqueté) est transformé en unmodèle de sortie. La transformation est spécifiée par un autre modèle.

Transformation :Mb*← f (MMa*, MMb*, Mt, Ma*)

Remarque : Il pourrait y avoirplusieurs Ma et Mb.

Exemples : AGG, MDA/QVT, ATL...

MMt

Ma

MMa MMb

MbMt

<<conformTo>> <<conformTo>>

MMM

<<conformTo>>

<<conformTo>>UML

OMG/MOF

Eclipse/Ecore

ATL, AGG...UML4J2EE

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 97 / 142

Page 98: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Génération 3 : Transformations de graphesExemple avec AGG et le pacman : règles du pacman

p: Pacman

marbles = m : Marble

p: Pacman

marbles = m+1collect(p)

f1: Field f2: Fieldf1: Field f2: Field

f1: Field f2: Fieldf1: Field f2: Field

p: Pacman p: PacmanmovePM(p)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 98 / 142

Page 99: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Génération 3 : Transformations de graphesExemple avec AGG et le pacman : règles du fantôme

f1: Field f2: Fieldf1: Field f2: Field

f1: Field f2: Fieldf1: Field f2: Field

moveGhost(g)

p: Pacman kill(g) g: Ghostg: Ghost

g: Ghost g: Ghost

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 99 / 142

Page 100: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Les langages de transformation

Génération 3 : Transformations de graphesExemple avec AGG et le pacman : exemple

f1: Field

f2: Field

f3: Field m2: Marble

m1: Marble

p: Pacman

marbles = 3

f1: Field

f2: Field

f3: Field m2: Marble

p: Pacman

marbles = 4

movePMcollect

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 100 / 142

Page 101: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Types de transformation

Types de transformation

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 101 / 142

Page 102: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

L’appel à propositions pour QVTDescription du problème

QVT = Query / Views / Transformations

Description du problème au quel doivent répondre les propositions de l’OMG QVTRequest for Proposals (QVT RFP, ad/02-04-10) de 2002 :

I normaliser un moyen d’exprimer des correspondances (transformations) entrelangages définis avec MOF

I exprimer des requêtes (Queries) pour filtrer et sélectionner des éléments d’unmodèle (y compris sélectionner les éléments source d’une transformation.)

I proposer un mécanisme pour créer des vues (Views).Vue = modèle déduit d’un autre pour en révéler des aspects spécifiques.

I formaliser une manière de décrire des transformations (Transformations) quisont actuellement décrites en langage naturel, BNF, etc.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 102 / 142

Page 103: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

L’appel à propositions pour QVTExigences obligatoires

I définir un langage de requêtes sur des modèles ;

I définir un langage de transformation entre un méta-modèle source S et unméta-modèle cible T qui à partir d’un modèle source conforme à S engendre unmodèle cible conforme à T.

I la syntaxe abstraite des langages de transformation, requête et vues, doitêtre définie comme un méta-modèle MOF 2.0.

I le langage de transformation doit permettre d’exprimer toute informationnécessaire pour engendrer automatiquement le modèle cible depuis lesource.

I le langage de transformation doit permettre de créer une vue d’unméta-modèle.

I le langage de transformation doit être déclaratif.Intérêt : pouvoir répercuter les changements sur les modèles.

I tous les mécanismes spécifiés dans la réponse doivent opérer sur desmodèles conformes aux méta-modèles définis avec MOF 2.0.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 103 / 142

Page 104: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

L’appel à propositions pour QVTExigences optionnelles

I Les définitions de transformations peuvent être bidirectionnelles.

I Traçabilité entre les éléments source et destination lors de l’exécution d’unetransformation.

I Mécanismes pour réutiliser les définitions de transformation (templates,pattern, redéfinition, surcharge).

I Utilisation de données supplémentaires à celle des modèles source etdestination (données intermédiaires).

I Possibilité d’avoir même modèle source et destination (mise à jour d’unmodèle, exemple : information dérivée).

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 104 / 142

Page 105: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTInformations générales

I Standard OMG : MOF QVT final adopted specification (ptc/05-11-01).

I Syntaxe abstraite en MOF 2.0 (et syntaxe concrète textuelle et graphique)

I Possibilité de plusieurs modèles (conformes à des méta-modèles issus de MOF)

I Langage de requête s’appuyant sur OCL

I Gestion automatique des liens de traçabilitéI Plusieurs scénarios d’exécution :

I check-only : vérifier si les modèles donnés respectent une relationI transformations unidirectionnellesI transformations multi-directionnellesI répercutions sur les modèles cibles des modifications progressives sur les modèles

sources (transformation incrémentale)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 105 / 142

Page 106: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTArchitecture

Relations

Core

RelationsToCore

TransformationOperational

Mappings

Black

Box

I Style déclaratif :I Relations : spécification déclarative de haut niveau entre modèles MOFI Core : expressivité équivalente à Relations mais simplifié (≡ JVM)

I Style impératif :I Operational Mappings Language : étend Relations avec des constructions

impératives (extension d’OCL)I Black Box : mécanisme pour appeler un programme externe

⇒ 3 langages qui ensemble constituent un « langage hybride ».

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 106 / 142

Page 107: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTTransformations

transformation umlRdbms (uml: SimpleUML, rdbms: SimpleRDBMS) {...

I Une transformation a un nom : umlRdbms

I Elle porte sur des modèles candidats. Ici deux modèles candidats uml etrdbms

I Chaque modèle candidat est typé par un méta-modèle : SimpleUML etSimpleRDBMS=⇒ Le modèle candidat doit être conforme à son méta-modèle.

I Une transformation contient des relations qui doivent être vraies sur lesmodèles candidats pour que la transformation soit réussie.

I Une direction de transformation peut être précisée (en choisissant unmodèle qui devient cible). Si la transformation n’est pas réussie, le modèle ciblesera modifié en conséquence : ajout, suppression ou modification d’éléments.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 107 / 142

Page 108: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTRelations

relation PackageToSchema { /* map each package to a schema */domain uml p:Package { name = pn }domain rdbms s:Schema { name = pn }

}

I Une relation spécifie des contraintes qui doivent être satisfaites sur leséléments de modèles candidats d’une transformation.

I Domaine = motif typé qui correspond à une partie d’un modèle candidat.I un paquetage p de uml qui a pour nom pnI un schéma s de rdbms de nom pnI p, s et pn sont des variables libres

I Les différents domaines (2 ici) doivent pouvoir être mis en correspondance.I Pour chaque paquetage, il doit y avoir un schéma de même nomI Pour chaque schéma, il doit y avoir un paquetage de même nom

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 108 / 142

Page 109: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTLes clauses when et where

relation ClassToTable {/* map each persistent class to a table */

domain rdbms t:Table {schema = s:Schema {},name = cn,column = cl:Column {

name = cn + ’_tid’,type = ’NUMBER’

},primaryKey = k:PrimaryKey {

name = cn + ’_pk’,column = cl

}

}domain uml c:Class {

namespace = p:Package {},kind = ’Persistent’,name = cn

}when {

PackageToSchema(p, s);}where {

AttributeToColumn(c, t);}

}

I Clause when : condition sous laquelle la relation doit être vérifiée.

I Clause where : condition que doivent vérifier tous les éléments de modèleparticipant à la relation. Permet de contraindre les variables libres de la relationet ses domaines.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 109 / 142

Page 110: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTTop−level relations

transformation umlRdbms (uml: SimpleUML, rdbms: SimpleRDBMS) {top relation PackageToSchema { ... }top relation ClassToTable { ... }relation AttributeToColumn { ... }

}

I une transformation contient deux types de relation : top et non-top

I l’exécution d’une transformation nécessite que toutes les top soient satisfaites.Les non-top ne doivent l’être que si elles sont invoquées directement outransitivement dans une clause where.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 110 / 142

Page 111: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Le standard QVT

Le standard QVTMise à jour d’objet déjà créés : resolveIn

transformation JClass2JPackage(inout javamodel:JAVA);main () {

javamodel−> objectsOfType(JClass)−>jclass2jpackage();}

mapping Class::jclass2jpackage() : JPackage () {init {

result := resolveIn(jclass2jpackage, true)// all JPackage objet created using jclass2jpackage

−>select(p| self.package=p.name)−>first();// select those named p.name and take the first one

if result then return;// avoid creating two packages with the same name

}name := self.package;

// set the name of the new created JPackage object}

}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 111 / 142

Page 112: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Transformations

Conclusion

Conclusion

Les transformations : un complément nécessaire pour l’IDMGains espérés :

I mise en œuvre des processus en Y

I automatiser (au moins partiellement) le passage entre modèles et/ou espacestechnologiques

I favoriser l’interopérabilité entre outils

I capitaliser le savoir faire

I plus haut niveau d’abstraction→ meilleure maîtrise, vérification, validation

État actuel :

I manque de maturité des outils disponibles ;

I comment tester une transformation?

I nombreuses contraintes techniques ;

I écrire une transformation en Java a encore un sens. Mais vérifier son programmeJava est difficile !

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 112 / 142

Page 113: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Sommaire

Introduction à l’ingénierie dirigée par les modèles

Étude de cas : vérifier des modèles de processus

Méta-modélisation (avec Ecore)

Le langage OCL

Transformations

Le langage ATLIntroductionExemples de transformationModuleRequête (Query)Bibliothèques (libraries)Langage de requête d’ATL

Page 114: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Introduction

Origines d’ATL

I ATL (ATLAS Transformation Language) est le langage de transformationdéveloppé dans le cadre du projet ATLAS.

I ATL a été développé au LINA à Nantes par l’équipe de Jean Bézivin.

I Fait desormais partie du projet EMP (Eclipse Modeling Project) :http://www.eclipse.org/modeling/

I ATL se compose :I d’un langage de transformation (déclaratif et impératif) ;I d’un compilateur et d’une machine virtuelle ;I d’un IDE s’appuyant sur Eclipse

I Pages principales : http://www.eclipse.org/atl/

I Manuel utilisateur et autres documentations accessibles surhttp://www.eclipse.org/atl/documentation/

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 114 / 142

Page 115: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Exemples de transformation

Transformation UML vers Java

Transformer notre modèle UML vers notre modèle Java consiste à :I Chaque paquetage UML donne un paquetage Java :

I les noms sont les mêmes mais en Java, le nom est complètement qualifié.

I Chaque classe UML donne une classe Java :I de même nom;I dans le paquetage correspondant ;I avec les mêmes modifiers.

I Chaque DataType UML donne un type primitif correspondant en JavaI de même nom;I dans le paquetage correspondant ;

I Chaque attribut UML donne un attribut Java respectant le nom, le type, la classed’appartenance et les modifiers.

I Idem pour les opérations.

Voir http://www.eclipse.org/atl/atlTransformations/#UML2Java.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 115 / 142

Page 116: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Exemples de transformation

Méta-modèle UML (diagramme de classe simplifié)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 116 / 142

Page 117: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Exemples de transformation

Méta-modèle Java (simplifié)

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 117 / 142

Page 118: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Exemples de transformation

Exemple de transformation d’un modèle vers du texte

I Exemple 1 : Transformer le modèle Java vers du code Java.I Exemple 2 : Contrôler la cohérence du modèle UML en écrivant une

transformation qui affiche un diagnostic :I Tous les éléments d’un Namespace doivent avoir des noms différents.I Un Namespace ne peut contenir que des Classifier et des Namespace.

Remarque : Dans ce dernier cas, il serait possible d’aller vers un modèled’erreur plutôt que simplement vers du texte !Génération vers un modèle d’erreur puis affichage du modèle d’erreur.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 118 / 142

Page 119: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Entête d’une transformation modèle à modèle

module UML2JAVA;create OUT : JAVA from IN : UML;

I La convention veut qu’une transformation d’un modèle à un autre, soit nomméed’après les méta-modèles avec un 2 (to) ajouté entre les deux!

I OUT et IN sont les noms données aux modèles. Ils ne sont pas utilisés par lasuite (sauf dans le cas d’une utilisation avec MDR) !

I Les modèles sources et cibles sont typés, ici UML et JAVA.Ils doivent donc être conformes au méta-modèle définissant leur type.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 119 / 142

Page 120: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Helpers : méthodes auxiliaires

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;

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 120 / 142

Page 121: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Helpers : définition

I Un helper est l’équivalent d’une méthode auxiliaire ;

I Il est défini sur un contexte et pourra être appliqué sur toute expression ayantpour type ce contexte (comme une méthode dans une classe en Java)

I Le contexte peut être celui du module :

helper def : carre(x: Real): Real = x * x;

I Un helper peut prendre des paramètres et possède un type de retour

I Le code d’un helper est une expression OCL.

I Remarque : Il existe des helpers sans paramètre (et donc sans lesparenthèses), appelés attribut helper.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 121 / 142

Page 122: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : règle déclenchée sur un élément du modèle

rule P2P {from e: UML!Package (e.oclIsTypeOf(UML!Package))to out: JAVA!Package (

name <− e.getExtendedName())

}

Une règle est caractérisée par deux éléments obligatoires :

I un motif sur le modèle source (from) avec une éventuelle contrainte ;

I un ou plusieurs motifs sur le modèle cible (to) qui explique comment leséléments cibles sont initialisés à partir des éléments sources correspondant.

Une règles peut aussi définir :

I une contrainte sur les éléments correspondant au motif source

I une partie impérative

I des variables locales

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 122 / 142

Page 123: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : lien entre éléments cibles et sources

rule C2C {from e: UML!Classto out: JAVA!JavaClass (

name <− e.name,isAbstract <− e.isAbstract,isPublic <− e.isPublic(),package <− e.namespace

)}

I Lors de la création d’un élément cible à partir d’une élément source, ATLconserve un lien de traçabilité entre les deux.

I Ce lien est utilisé pour initialiser un élément cible dans la partie to.

I le package d’une JavaClass est initialisé avec l’élément du modèle cibleconstruit pour l’élément e.namespace.=⇒ Il doit y avoir une match rule qui porte sur UML!Package et qui crée unJAVA!Package

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 123 / 142

Page 124: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : avec condition sur l’élément filtré

Supposons que l’on veut traduire différemment un attribut UML suivant qu’il estdéclaré public ou non. On peut alors écrire deux règles.

rule A2F {from e : UML!Attribute ( not e.isPublic() )to out : JAVA!Field (

name <− e.name,isStatic <− e.isStatic(),isPublic <− e.isPublic(),isFinal <− e.isFinal(),owner <− e.owner,type <− e.type

)}

Attention : Pour un même élément source, on ne peut avoir deux rêgles s’applicantà une même instance d’un objet. Les filtres de rêgles doivent être exclusifs.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 124 / 142

Page 125: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : avec condition sur l’élément filtré (suite)

rule A2F {from e : UML!Attribute

( e.isPublic() )to out : JAVA!Field (

name <− e.name,isStatic <− e.isStatic(),isPublic <− e. false,isFinal <− e.isFinal(),owner <− e.owner,type <− e.type

),

accesseur: JAVA!Method (name <− ’get’

+ e.name.toCapitalize(),isStatic <− e.isStatic(),isPublic <− true,owner <− e.owner,parameters <− Sequence{}

),modifieur: JAVA!Method(...)

}

I Si l’attribut est déclaré public en UML, il est transformé en attribut privé en Javaavec un accesseur et un modifieur.

⇒ Cette règle crée donc plusieurs éléments cibles.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 125 / 142

Page 126: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : partie impérative (do)

rule C2C {from e: UML!Classto out: JAVA!JavaClass (

name <− e.name,isAbstract <− e.isAbstract,isPublic <− e.isPublic()

)do {

package <− e.namespace ;}

}

I la clause do est optionnelle ;

I do contient des instructions (partie impérative d’une règle) ;

I ces instructions sont exécutées après l’initialisation des éléments cibles.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 126 / 142

Page 127: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Matched rule : variables locales (using)

fromc: GeometricElement!Circle

using {pi: Real = 3.14;area: Real = pi * c.radius.square();

}

I la clause using est optionnelle ;

I elle permet de déclarer des variables locales à la règle ;

I les variables peuvent être utilisées dans les clauses using, to and do ;

I une variable est caractérisée par son nom, son type et doit être initialisée avecune expression OCL.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 127 / 142

Page 128: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Called rules

rule newPackage(qualifiedName: String) {to

p: JAVA!Package (name <− qualifiedName

)}

I équivalent d’un helper qui peut créer des éléments dans le modèle cible

I doit être appelée depuis une matched rule ou une autre called rule

I ne peut pas avoir de partie from

I peut avoir des paramètres

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 128 / 142

Page 129: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Utilisation du module

I Pour appeler un Helper ou une Called rule, il faut utiliser :

thisModule.<nom de l’élément à appeler>[(<parametres eventuels>)]

Operation particulière : resolveTemp

I Récupérer un élément crée dans une rêgle de transformation différenteI Deux arguments

I Un objet : cibler une rêgle de transformationI Une chaine de caractère : spécifier l’élément de la rêgle ciblée à retourner

rule A2B {from a : MMA!TypeAto

b : MMB!TypeB ([...]

),obj: MMB!TypeObj (

[...])

}

rule C2D {from c : MMA!TypeCto

d : MMB!TypeD (attr1 <− thisModule.resolveTemp(

c.attributeA, "obj"))

}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 129 / 142

Page 130: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Module

Exécution d’un module ATL

L’exécution d’un module se fait en trois étapes :

1. initialisation du moduleI initialisation des attributs définis dans le contexte du module ;

2. mise en correspondance des éléments sources des matched rules :I quand une règle correspond à un élément du modèle source, les éléments cibles

correspondants sont créés (mais pas encore initialisés)

3. initialisation des éléments du modèle cible.Le code impératif des règles (do) est exécuté après l’initialisation de la règlecorrespondante. Il peut appeler des called rules.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 130 / 142

Page 131: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Requête (Query)

Requête (Query)

query JAVA2String_query = JAVA!JavaClass.allInstances()−>select(e | e.oclIsTypeOf(JAVA!JavaClass))−>

collect(x | x.toString().writeTo(’/tmp/’+ x.package.name.replaceAll(’.’, ’/’)+ ’/’ + x.name + ’.java’));

...

I une requête (query) est une tranformation d’un modèle vers un type primitif

I Exemple classique : construire une chaîne de caractères.I Une requête a :

I un nom;I un type ;I une expression ATL qui calcule la valeur de la requête.

I Comme un module, une requête peut définir des helpers et des attributs.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 131 / 142

Page 132: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Bibliothèques (libraries)

Bibliothèques (libraries)

library JAVA2String;

−− definition of helpers...

I Une bibliothèque permet de définir des helpers qui pourront être (ré)utilisésdans dans des modules, requêtes ou autres bibliothèques (clause uses).

I Tout helper doit être attaché à un contexte car pas de contexte par défaut.

I Une bibliothèque peut utiliser une autre bibliothèque (clause uses)

query JAVA2String_query = JAVA!JavaClass.allInstances()−>select(e | e.oclIsTypeOf(JAVA!JavaClass))−>

collect(x | x.toString().writeTo(’/tmp/’+ x.package.name.replaceAll(’.’, ’/’)+ ’/’ + x.name + ’.java’));

uses JAVA2String;

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 132 / 142

Page 133: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Types primitifs

I OclAny décrit le type le plus généralI Ses opérations sont :

I comparaisons : = (égalité) <> (différence)I oclIsUndefined() : self est-il défini ?I oclIsKindOf(t: oclType) : self est-il une instance de t ou d’un de ses sous-type

(équivalent instanceof de Java)?I oclIsTypeOf(t: oclType) : selft est-il une instance de t?I Remarque : oclIsNew() et oclAsType() ne sont pas définies en ATLI Autres opérations :

I toStringI oclType() : Le type de selfI output(s : String) : affiche s sur la console EclipseI debug(s : String) : affiche s + ’ : ’ + self.toString() dans la console

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 133 / 142

Page 134: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Types primitifs

I Boolean : true et falseI opérateurs : and, or, not, xor, implies(b : Boolean) (≡ self⇒ b)

I Number : Integer (0, 10, -412) ou Real (3.14)I binaire : * + − / div(), max() , min()I unaire : abs()I Integer : mod() ;I Real : floor(), round()I cos(), sin(), tan(), acos(), asin(), toDegrees(), toRadians(), exp(), log(), sqrt()

I String : ’bonjour’, ’aujourd\’hui’I les caractères sont numérotés de 1 à size()I opérations : size(), concat(s : String) (ou +), substring(lower : Integer, upper :

Integer), toInteger(), toReal()I toUpper(), toLower(), toSequence() (of char), trim(), startsWith(s : String), indexOf(s :

String), lastIndexOf(s : String), split(regexp : String), replaceAll(c1 : String, c2 :String), regexReplaceAll(c1 : String, c2 : String)

I writeTo(fileName : String)I println() : écrire la chaîne dans la console d’Eclipse

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 134 / 142

Page 135: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Collections

I Quatre types de collection :I Set : sans ordre, ni doubleI OrderedSet : avec ordre, sans doubleI Bag : sans ordre, doubles possiblesI Sequence : avec ordre, doubles possibles

I Les collections sont génériques :I Sequence(Integer) : déclarer une séquence d’entiersI Sequence{1, 2, 3} : Sequence d’entiers contenant {1, 2, 3}I Set( Sequence(String)) : un ensemble de séquences de String

I Opérations sur les collections :I size()I includes(o : oclAny), excludes(o : oclAny)I count(o : oclAny)I includesAll(c : Collections), excludesAll(c : Collections)I isEmpty(), nonEmpty()I sum() : pour les types qui définissent l’opérateur +I asSequence(), asSet(), asBag() : obtenir une collection du type précisé

I pour les opérations spécifiques d’un type de collection, voir ATL User Guide

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 135 / 142

Page 136: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

CollectionsItérer sur les collections

source−>operation_name(iterators | body)

I source : collection itérées ;

I iterators : variables qui prennent leur valeur dans source

I body : l’expression fournie à l’opération d’itération

I operation_name : l’opération d’itération utiliséeexists body vraie pour au moins un élément de source

forAll body vraie pour tous les éléments de source

isUnique body a une valeur différente pour chaque élément de source

any un élément de source qui satisfait body (OclUndefined sinon)

one un seul élément de source satisfait body

collect collection des éléments résultant de l’application de body sur chaque élément de source

select collection des éléments de source satisfaisant body

reject collection des éléments de source NE satisfaisant PAS body

sortedBy collection d’origine ordonnée suivant la valeur de body. Les éléments doivent posséder l’opérateur <.

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 136 / 142

Page 137: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Autres types

I Le type énumération doit être défini dans les méta-modèles.La notation ATL pour accéder à une valeur du type est #female au lieu de laforme OCL qui est Gender::female

I TupleI Un tuple définit un produit cartésien (un enregistrement) sous la forme de plusieurs

couples (nom, type).I Déclaration d’un Tuple

Tuple{a: MMAuthor!Author, title: String, editor: String}

I Instanciation d’un tuple (les deux sont équivalentes) :

Tuple{editor: String = ’ATL Manual’, a: MMAuthor!Author = anAutohor,editor: String = ’ATL Eds.’}

Tuple{a = anAutohor, editor = ’ATL Manual’, editor = ’ATL Eds.’}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 137 / 142

Page 138: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Autres typesMap

I Map(type_clé, type_élément) : définit un tableau associative muni desopérations :

I get(clé : oclAny) : la valeur associées à la clé (sinon OclUndefined)I including(clé : oclAny, val : oclAny) : copie de self avec le couple (clé, cal) ajoutéI union(m : Map) : l’union de self et mI getKeys() : l’ensemble des clés de selfI getValues() : le sac (bag) des valeurs de self

I Ne fait pas partie de la spécification d’OCL

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 138 / 142

Page 139: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Types issus des méta-modèles cibles et sources

I Tout type défini dans le méta-modèle source ou cible est aussi un type

I Notation : metamodel !classExemples : JAVA!Class, UML!Package...

I Un tel type a des caractéristiques (attributs ou références) accessibles avec lanotation pointée : self.name, self.package, etc.

I oclIsUndefined() : permet pour une caractéristique de multiplicité [0..1] desavoir si elle n’est pas définie.Ne marche pas pour multiplicité > 1 car représentée par une collection.

I allInstances() : obtenir toutes les instances de la méta-classe self

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 139 / 142

Page 140: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Expressions d’ATL déclaratif (issues d’OCL)

I Expression ifI expression else obligatoireI mot clé endif obligatoire

if condition thenexp1 ;

elseexp2 ;

endif

I Expression let

let var : Type = init in exp

let x: Real =if aNumber > 0 then

aNumber.sqrt()else

aNumber.square()endif

in let y: Real = 2 in X/y ;

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 140 / 142

Page 141: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Code impératif d’ATL

I Affectation

target <− expr;

I instruction if

if (condition) {instructions

}

if (condition) {instructions1 ;

} else {instructions2 ;

}

I instruction for

for (iterator in collection) {instructions ;

}

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 141 / 142

Page 142: Ingénierie Dirigée par les Modèlescregut.perso.enseeiht.fr/ENS/2016-insa-idm/idm-insa-2016... · 2016. 11. 20. · Ingénierie Dirigée par les Modèles Introduction à l’ingénierie

Ingénierie Dirigée par les Modèles

Le langage ATL

Langage de requête d’ATL

Conclusion : Vers les langages dédiés (DSL)

I DSL : (Domain Specific Language) Langage dédié à un domaine métierI Définir le méta-modèle qui capture les concepts du métier.

I Utilisation de langage de méta-modélisation : Ecore, EMOF, etc.

I Exprimer les propriétés non capturées par le méta-modèle.I Utilisation d’OCL ou autre (transfo vers modèle d’erreur, Kermeta, ...)

I Définir une syntaxe concrète textuelle et/ou graphique.I Ajouter des outils autour de ce DSL :

I outils de simulation : animer le modèle pour le valider, mesurer ses performances,etc.

I outils de vérification : vérifier des propriétés sur le modèle métierI outils de génération (vers code ou autres modèles)

I Une solution consiste à réutiliser des outils existantsI transformer le modèle métier en un modèle exploitable par l’outil cible

Zalila et al. (ENSEEIHT) Ingénierie Dirigée par les Modèles 30 septembre 2013 142 / 142