Vous êtes sur la page 1sur 47

Méthodologie de Développement Objet

Troisième partie : Ingénierie des Modèles

Christine Solnon

INSA de Lyon - 4IF

2014 - 2015

1/47
Introduction

Automatiser la production de logiciels ?

Saint Graal du développement logiciel :


; Générer automatiquement le code à partir d’une spécification

Point clé : Comment spécifier un système ?


Description informelle en langue naturelle ?
Facile à comprendre par l’utilisateur
Mais ambigüe et impossible à exploiter automatiquement
Description à l’aide d’un langage formel ?
Difficile à comprendre par un utilisateur non initié
Mais non ambigüe et plus facile à exploiter automatiquement

En pratique : Mélange d’informel et de formel

2/47
Introduction

Petite parenthèse sur les langages formels


Langage = ensemble (potentiellement infini) de “mots"
; Langage Java = ensemble des programmes Java
; Langage UML = ensemble des modèles UML
Langage formel = langage décrit par une grammaire formelle
; Ensemble de règles définissant les mots syntaxiquement corrects
Exemple de grammaire formelle :
hExpr i ::= hExpr i 0 +0 hTermei | hExpr i 0 −0 hTermei | hTermei
hTermei ::= hTermei 0 ∗0 hFacti | hTermei 0 /0 hFacti | hFacti
hFacti ::= hConsti | hVar i | 0 (0 hExpr i 0 )0
hConsti ::= ...
hVar i ::= ...

Automate = procédure qui décide si un mot appartient au langage décrit par


une grammaire ; Construction d’un arbre de syntaxe abstraite

Questions :
Peut-on décrire tous les langages comme ça ?
Comment décrire le langage des grammaires formelles ?
; Plus de détails dans le cours “Grammaires et langages"
3/47
Introduction

Qu’est-ce que la transformation de modèles ?


Procédure qui transforme un modèle d’un langage vers un autre
Modèle = mot d’un langage décrit par une grammaire formelle
; Ex. : Diagramme de classes, Contrainte OCL, Programme Java, ...
Langage source = langage du modèle en entrée
Langage cible = langage du modèle en sortie

Reformulation : Langage cible = Langage source


Optimisation ; Améliorer les performances en temps ou en mémoire
Refactoring ; Améliorer le code sans changer le comportement
Re-engineering ; Restructuration forte

Traduction : Langage cible 6= Langage source


Migration ; cible et source sont des versions différentes d’un même langage
Synthèse de programmes ; source = spécification ; cible = lang. de prog.
Compilation ; source de haut niveau ; cible de plus bas niveau
Reverse engineering ; source de bas niveau ; cible de plus haut niveau
4/47
Introduction

Comment transformer automatiquement des modèles ?

Une grammaire décrit les mots “syntaxiquement corrects" :


; Construction d’un arbre de syntaxe abstraite à partir d’un mot
Une grammaire ne dit pas comment interpréter le mot / monde réel
; Besoin d’associer une sémantique aux arbres de syntaxe abstraite
Pour transformer automatiquement un mot m1 ∈ L1 en un mot m2 ∈ L2 , il
faut connaître la correspondance sémantique des arbres de syntaxe
abstraite de L1 vers ceux de L2
; Règles de transformation
Interprétation sémantique Interprétation sémantique
de m1 dans R1 de m2 dans R2
↑ ↑
↑ ↑
Arbre de syntaxe Application Arbre de syntaxe
abstraite de m1 −→ de règles de −→ abstraite de m2
↑ transformation ↓
↑ ↓
Mot m1 de L1 Mot m2 de L2
5/47
Introduction

Les modèles dans un processus de développement classique :


Elaboration de modèles
Éventuellement : Génération de squelettes de code à partir de modèles
Ecriture et maintenance du code
Les modèles deviennent obsolètes
Éventuellement : Re-génération de certains modèles
; Reverse engineering

Les modèles dans un processus d’ingénierie des modèles


Ecriture et maintenance de modèles
Génération du code à partir des modèles

; Les modèles sont au centre du processus

; Objectif ambitieux... utopiste ou réaliste ?


6/47
Introduction

Pour en savoir plus

Ingénierie dirigée par les modèles : des concepts à la pratique


J.-M. Jézéquel, B. Combemale, D. Vojtisek
EMF : Eclipse Modeling Framework
D. Steinberg, F. Budinsky, M. Paternostr
Thomas Stahl, Markus Völter
MDA en action : Ingénierie logicielle guidée par les modèles
Xavier Blanc
MDA Guide Version 1.0.1, 2003
Site de l’OMG
http ://www.omg.org/cgi-bin/doc ?omg/03-06-01

7/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles


Méta-modélisation et MOF
Contraintes et OCL
XMI/JMI et la sérialisation/manipulation de modèles
Synthèse

3 Model-Driven Architecture

8/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Méta-modèles
Qu’est-ce qu’un méta-modèle ?
Modèle d’un ensemble de modèles
' Grammaire décrivant un langage de modélisation
; Définit la syntaxe abstraite des modèles

Pourquoi des méta-modèles ?


Pour éditer et valider les modèles
Pour transformer des modèles
; Règles de transformation entre méta-modèles

9/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Exemple : Méta modèle des diagrammes de classes (simplifié)

; Définit la syntaxe abstraite (relations entre éléments du modèle),


mais pas la syntaxe concrête (représentation textuelle, graphique, ...)
10/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Méta-méta-modèles
Qu’est-ce qu’un méta-méta-modèle ?
Modèle d’un ensemble de méta-modèles
' Grammaire décrivant les grammaires décrivant des lang. de modélisation
; Définit la syntaxe abstraite des méta-modèles

Comment faire pour ne pas entrer dans une boucle infinie ?


Définir le méta-méta-modèle à l’aide de lui-même
; Méta-circularité !

11/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

4 niveaux de (méta-)modélisation selon l’OMG


M3 : Méta-méta-modèle
des méta-modèles de
M2... et de M3

M2 : Méta-modèles des
modèles de M1

M1 : Modèles
(Diagrammes de classes,
de séquence, ...)

M0 : Instances des
modèles à l’exécution

[Image empruntée à www.omg.org]


12/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Méta-modélisation, XML Schemas, et Grammaires

13/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Le MOF (Meta Object Facilities)

Qu’est-ce que le MOF ?


Méta-méta-modèle défini par l’OMG
Utilisé pour définir la syntaxe abstraite des méta-modèles UML
Définit les éléments des méta-modèles et leurs relations
Méta-circulaire
Le MOF est défini en lui-même
Correspond au niveau M3 de (méta-)modélisation selon l’OMG

Pourquoi le MOF ?
Standardisation des langages de méta-modélisation
; Outils génériques pour la transformation de modèles

14/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Le MOF en version simplifiée

[Image empruntée à Eric Cariou]

15/47
Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

[Image empruntée à Eric Cariou] 16/47


Méta-modélisation, description et manipulation de modèles Méta-modélisation et MOF

Description de UML2.0 et MOF2.0 par l’OMG


Description d’UML2.0
UML2.0 Infrastructure
Méta-modèle commun à UML et MOF
; Méta-classes partagées : package, class, ...
Constitué d’une trentaine de packages “de base"
; Basic : décrit diagrammes de classes sans association
; Constructs : décrit diagrammes de classes avec associations
Utilisation de merge pour réutiliser les packages
UML2.0 Superstructure
Méta modèle d’UML
Intègration de packages de l’infrastructure par merge

Description de MOF2.0
Essential MOF (EMOF) : décrit méta-modèles sans association
; Intègre le package Basic de l’infrastructure
Complete MOF (CMOF) : décrit méta-modèles avec associations
; Intègre le package Constructs de l’infrastructure
17/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles


Méta-modélisation et MOF
Contraintes et OCL
XMI/JMI et la sérialisation/manipulation de modèles
Synthèse

3 Model-Driven Architecture

18/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Qu’est-ce qu’une contrainte ?


Une contrainte est une relation entre des objets qui doit être satisfaite
Elle peut être définie :
En extension, en énumérant tous les tuples de la relation
(ex : (x, y ) ∈ {(1, 4), (2, 3), ...})
En intention, à l’aide d’un langage formel (ex : x < y + 2 ∗ z)
En langue naturelle (ex : x est au dessus de y )
Une contrainte n’a pas d’effet de bord
; Ne modifie pas l’état des objets
; Décrit le “quoi", pas le “comment"

Pourquoi des contraintes ?


Description de règles métier
Spécification de la sémantique des méthodes
... et plein d’autres choses que l’on ne peut exprimer dans un diag. UML

La vérification de contraintes est un problème difficile...


La difficulté dépend du langage utilisé pour exprimer les contraintes
Généralement N P-complet... parfois indécidable !
19/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Object Constraint Language (OCL)


Qu’est-ce que OCL ?
Langage formel normalisé par l’OMG pour définir des contraintes
; Peut être utilisé pour compléter des diagrammes UML ou MOF

Qu’est-ce qu’une contrainte OCL ?


Expression booléenne : Relation qui doit être vérifiée
3 types de contraintes :
pre : Précondition vérifiée à l’appel d’une méthode
post : Postcondition vérifiée au retour d’une méthode
; result = Objet retourné par la méthode
; x@pre = État de l’objet x avant l’appel de la méthode
inv : Invariant vérifié à tout moment
Contexte d’une contrainte : Classe ou Opération
Syntaxe : htypeContraintei hnomContraintei : hexprBooli

OCL et la programmation par contrat


Spécifier ce que doit faire la classe... mais pas comment le faire !
Utilisation (automatique ?) pour concevoir les tests unitaires 20/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Exemple 1 d’utilisation d’OCL : Modèle d’une pile


context Pile::depile(): Object
pre nonVide : not estVide()
post sommetRet : result = self@pre.sommet()
post tailleDec : taille() = self@pre.taille()-1

context Pile::sommet(): Object


pre nonVide : not estVide()

context Pile::empile(unObjet: Object): void


post LIFO : sommet() = unObjet

context Pile
inv : taille() >= 0
inv : taille() = 0 implies estVide()
inv : estVide() implies taille()=0)

...
21/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Exemple 2 d’utilisation d’OCL

[Image empruntée à Eric Cariou]

Commentaire ?
22/47
Méta-modélisation, description et manipulation de modèles Contraintes et OCL

Exemples extraits de UML Superstructure Specification

Utilisation d’OCL pour spécifier les méta modèles :


Contraintes sur Interface :
Les opérations doivent être publiques
inv:self.operation->forAll(f|f.visibility=#public)
Une interface n’a pas d’attribut
inv: self.attributes->isEmpty()
Contraintes sur Classifier : les hiérarchies d’héritage doivent être
acycliques
inv: not self.allParents()->includes(self)
Contrainte sur Constraint : une contrainte ne peut être appliquée à
elle-même
inv: not self.constrainedElement->includes(self)

Certaines contraintes ne peuvent être exprimées avec OCL :


L’évaluation d’une contrainte ne doit pas avoir d’effet de bord
L’évaluation d’une contrainte doit rendre une valeur booléenne
...
23/47
Méta-modélisation, description et manipulation de modèles XMI/JMI et la sérialisation/manipulation de modèles

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles


Méta-modélisation et MOF
Contraintes et OCL
XMI/JMI et la sérialisation/manipulation de modèles
Synthèse

3 Model-Driven Architecture

24/47
Méta-modélisation, description et manipulation de modèles XMI/JMI et la sérialisation/manipulation de modèles

Sérialisation de modèles et XMI


Objectifs :
Stocker et échanger des modèles (syntaxe abstraite et non concrête !)

Moyen : description de modèles avec XML


XML (eXtensible Markup Language) du W3C :
; Format pour la représentation textuelle de données struct.
; Utilisation de balises < xxx > ... < /xxx >
Grammaire définissant la validité d’un document XML :
DTD (Document Type Definition) :
; Relations d’inclusion entre balises
XML Schema :
; Doc XML définissant la structuration de documents XML
XMI (XML Metadata Interchange) de l’OMG :
Standard pour représenter des (meta-)modèles au format XML
; Sérialisation de modèles
Utilisation des métamodèles pour définir les DTD / Schema
; Génération automatique des DTD / Schema
25/47
Méta-modélisation, description et manipulation de modèles XMI/JMI et la sérialisation/manipulation de modèles

[Image empruntée à Xavier Blanc]

26/47
Méta-modélisation, description et manipulation de modèles XMI/JMI et la sérialisation/manipulation de modèles

Manipulation de modèles et JMI


Objectif :
Manipuler (transformer, valider, ...) les modèles avec un langage orienté objet

Moyen : API Java JMI (Java Metadata Interface)


Interfaces Java dédiées à un méta-modèle (taylored) : Manipulation
d’éléments des modèles (conformes au métamodèle)
Interfaces Java réflectives : Utilisables sur tout type de modèle

[Image empruntée à Xavier Blanc]27/47


Méta-modélisation, description et manipulation de modèles Synthèse

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles


Méta-modélisation et MOF
Contraintes et OCL
XMI/JMI et la sérialisation/manipulation de modèles
Synthèse

3 Model-Driven Architecture

28/47
Méta-modélisation, description et manipulation de modèles Synthèse

Synthèse des standards pour la description et la


manipulation de (méta-)modèles
Standards de l’OMG :
UML (Unified Modeling Language) :
; Langage pour décrire les modèles
MOF (Meta Object Facility) :
; Langage pour décrire les méta-modèles
XMI (XML Metadata Interchange) :
; Règles pour représenter tout (méta-)modèle au format XML
OCL (Object Constraint Language) :
; Expressions pour modéliser des propriétés (pré/post/inv)

Standard du Java Community Process :


JMI (Java Metadata Interface) :
; API pour manipuler des modèles en Java
29/47
Model-Driven Architecture Présentation générale

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles

3 Model-Driven Architecture
Présentation générale
MDA et les profils UML
Eclipse Modeling Framework

30/47
Model-Driven Architecture Présentation générale

Le processus de développement en Y relooké par le MDA

Processus centré sur les modèles


CIM (Computation Independent Model) : Modèle
des exigences ; Modèle pérenne du domaine
PIM (Plateform Independent Model) : Modèle
métier ; Modèle pérenne du système
indépendant de plateformes techniques
PDM (Plateform Description Model) :
; Modèle de plateforme technique
(ex. : EJB, PHP, .NET, CORBA, ...)

PSM (Plateform Specific Model) : Modèle


technique ; Modèle du système dépendant
d’une plateforme technique

31/47
Model-Driven Architecture Présentation générale

Transformation de modèles selon l’OMG


; Point déterminant et critique de l’approche MDA !

Exemples de
mise-en-œuvre :
Les profils UML
EMF (Eclipse
Modeling
Framework)

32/47
Model-Driven Architecture MDA et les profils UML

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles

3 Model-Driven Architecture
Présentation générale
MDA et les profils UML
Eclipse Modeling Framework

33/47
Model-Driven Architecture MDA et les profils UML

Profils UML

Qu’est-ce qu’un profil UML ?


Moyen simple pour définir de nouveaux méta-modèles par extension de
méta-modèles ou de profils existants

Pourquoi des profils UML ?


Définir des méta-modèles spécialisés pour :
Un domaine d’application particulier (finance, santé, tps réel, ...)
; Définition de PIM
Une plateforme technique particulière (.NET, J2EE, CORBA, ...)
; Définition de PSM
; Domain Specific Modeling Languages (DSL)
Permettre la transformation de modèles et la génération de code
; Interprétation sémantique par rapport à l’application/plateforme

34/47
Model-Driven Architecture MDA et les profils UML

Comment définir un profil UML ? (1/2)


Un profil est un package portant le stéréotype <<profile>>
Un profil contient la définition de nouveaux stéréotypes :
Définition par extension d’une méta-classe (—)
ou par spécialisation d’un autre stéréotype (—)
Possibilité de spécifier une réprésentation graphique (—)
Possibilité de spécifier des attributs (tagged values)

Image extraite de http ://www.uml-diagrams.org/profile-diagrams.html


35/47
Model-Driven Architecture MDA et les profils UML

Comment définir un profil UML ? (2/2)


Un stéréotype peut étendre plusieurs méta-classes
Un profil peut contenir des contraintes (OCL ou informelles)
; Conditions d’emploi des stéréotypes et tagged values
Exemple :

Contrainte en français :
Une association Coloured ne peut lier que
des classes Coloured de même couleur que
l’association
Contrainte en OCL :

Exemple extrait de An Introduction to UML Profiles de L. Fuentes-Fernández et A. Vallecillo-Moreno


36/47
Model-Driven Architecture MDA et les profils UML

Ex. de définition de profils [L. Fuentes-Fernández, A. Vallecillo-Moreno 2004]

Ex. d’utilisation de profils [L. Fuentes-Fernández, A. Vallecillo-Moreno 2004]

37/47
Model-Driven Architecture MDA et les profils UML

Exemple “réel” : Profil EJB (Enterprise JavaBean)

Tout composant doit etre associé à un stéréotype Bean


Extension

Contrainte

Propriété −> Tagged Value

[Image empruntée à www.omg.org]


38/47
Model-Driven Architecture Eclipse Modeling Framework

Plan du cours

1 Introduction

2 Méta-modélisation, description et manipulation de modèles

3 Model-Driven Architecture
Présentation générale
MDA et les profils UML
Eclipse Modeling Framework

39/47
Model-Driven Architecture Eclipse Modeling Framework

Eclipse ?
Une plateforme de développement “open source" :
Cadre extensible (plug-in) pour construire et maintenir des logiciels
Environnement de développement (IDE) construit à l’aide de ce cadre

Gérée par la “Eclipse Foundation" :


Organisation indépendante à but non lucratif créée en 2004
Regroupant plus de 100 entreprises (Ericsson, HP, IBM, Intel, SAP, ...) et
de nombreux développeurs indépendants

Structurée en projets :
JDT : Java development tools
PDE : Plugin Development Environment
GMF : Graphical Modeling Framework
...
EMF : Eclipse Modeling Framework
The EMF project is a modeling framework and code generation facility for
building tools and other applications based on a structured data model.
40/47
Model-Driven Architecture Eclipse Modeling Framework

UML, Java, et XML...


3 syntaxes concrêtes différentes pour une même syntaxe abstraite :

UML :

Java :

XML :

41/47
Model-Driven Architecture Eclipse Modeling Framework

Le Méta-modèle Ecore
Méta-modèle des modèles EMF
Choix délibéré d’un langage de modélisation très simple
; Sous-ensemble du MOF

Correspondances avec UML, Java et XML

Ecore UML Java XML


EClass Classe Interface Type complexe
EAttribute Attribut Getter/Setter Éléments imbriqués
EReference Extrémité d’assoc. Getter/Setter Type complexe imbriqué
42/47
Model-Driven Architecture Eclipse Modeling Framework

Ecore

[Image empruntée à Eric Cariou]


43/47
Model-Driven Architecture Eclipse Modeling Framework

Construction d’un modèle Ecore

Avec l’éditeur Ecore fourni dans Eclipse (construit en utilisant EMF !)


Ou à partir d’interfaces Java annotées
Ou à partir d’un diagramme de classes UML
Ou à partir d’un XML Schema

Exemple :

Modèle Ecore : Modèle UML correspondant :

44/47
Model-Driven Architecture Eclipse Modeling Framework

Génération de code
Modèle de génération (genModel)

Décoration du modèle Ecore par des propriétés / génération de code


; Utilisation du design pattern Decorator

45/47
Model-Driven Architecture Eclipse Modeling Framework

Génération de code (1/2)

Code généré pour le modèle :


Pour chaque EClass X :
Interface X
; étend EObject, qui étend Notifier
Classe d’implémentation XImpl
Classe Singleton Factory
; createX pour chaque classe X
Classe Singleton AdapterFactory : Fabrique
d’adaptateurs pour observer les classes du
modèle
Interface Ressource : Gestion de la persistence
...

Conservation des modifications de code :


Suppression de l’annotation @generated
46/47
Model-Driven Architecture Eclipse Modeling Framework

Génération de code (2/2)

Code généré pour l’édition et la manipulation :


Package .Edit : Classes Java pour construire des éditeurs/vues du
modèle
Utilise JFace pour l’affichage de modèles structurés
Design pattern Command ; execute/undo/redo
Design Pattern Observer ; les vues observent le modèle
Package .Editor : plug-in d’un éditeur
complet
; Visualisation/Modification des
instances du modèle

Code généré pour les tests :


Génération de classes de tests JUnit

47/47

Vous aimerez peut-être aussi