Ingénierie des modèles b. Exploiter et produire Raphaël Marvie LIFL - IRCICA Université de Lille I marvie@lifl.fr http://www.lifl.fr/~marvie 1
Menu Introduction Model Driven Architecture PIM, PAM, POUM Transformations de modèles Récupération et innovations Mise en œuvre D un modèle de composants au code Java Conclusion 2
Introduction 3
Problème (rappel) La logique métier est mélangée avec le code technique Vrai pour toutes les technologies L évolution des applications n est pas simple Garder la logique métier Jeter le code technique Nécessite de s abstraire des technologies 4
Une solution Séparation des préoccupations Préoccupations métier Préoccupations techniques Modélisation des systèmes Description abstraite des préoccupations métiers Réutilisation dans différentes contextes (technologies) Comment automatiser l utilisation (et réutilisation) des modèles abstraits de systèmes 5
Des modèles aux systèmes Passer du modèle contemplatif Utilisation informelle (documentation) Définition manuelle de projections (idl -> java) au modèle productif Production automatisée de code Définition de projections standardisées 6
Model Driven Architecture 7
Model Driven Architecture Définition de méta-modèles Standardisation d un domaine d activité Standardisation des technologies Définition d une méthodologie Démarche à suivre pour produire une application, dans une technologie, à partir d un modèle abstrait Il existe différents types de modèles 8
Model Driven Architecture PIM: Platform Independant Model Définit la structure et les fonctions d un système Indépendant des détails technologiques PSM: Platform Specific Model Définit la mise en œuvre de la structure et des fonctions dans une technologie particulière PDM: Platform Definition Model Définit une technologie particulière 9
Model Once Generate Everywhere Modèle indépendant de toute technologie System PIM Génération de code pour plusieurs paltes-formes CCM.Net WS 10
Un processus logiciel naïf Raffinement Raffinement PIM Projection PSM Projection Système Rétro-ingénierie Rétro-ingénierie 11
Exemple de processus MDA Définition d une application à base de composants Définition de la structure de l application Raffinement pour spécifier les fonctions Mise en œuvre dans un langage orienté objets Définition des correspondances (projections) Évaluation des projections Production de code Génération du code Java correspondant au modèle 12
Méta-modèle simple de composants ComponentXXS provides Component uses Port * * Provided Required 1 to Connection from 1 13
D un PIM de composants (base) Application «Component» Notifier «uses» obs «provides» itf «Component» Observer Structure du système 14
A un PIM (raffiné) Application «Interface» INotify + notify (String) type «Component» Notifier «uses» obs «provides» itf «Component» Observer Fonctions du système 15
Méta-modèle simple de Java JavaXXS super type Class attributes Attribute methods Method type Parameter 16
A un PSM pour Java Application «Class» Observer - itf «Class» INotify + provides_itf () + notify (String) «Class» Notifier + connect_obs (INotify) + disconnect_obs () - obs 17
Au code Java class INotify { void notify (String s) { // write code } } class Notifier { private INotify _obs ; void connect_obs (INotify o) { // this._obs = o ; } void disconnect_obs () { // this._obs = null ; } } class Observer { private INotify _itf ; INotify provides_itf () { // return this._itf ; } } 18
Transformations de modèles 19
Pourquoi des transformations? Raffinement Un modèle A1 devient un modèle A2 Même méta-modèle pour les deux [Structure puis fonctions] Projection Un modèle A1 devient un modèle B1 Méta-modèles distincts [Composants -> Java] Représente la base Production de systèmes dirigée par les modèles Support de l interopérabilité entre les systèmes 20
Définition de transformations Transformation = ensemble de règles Correspondances entre éléments du modèle source et éléments du modèle cible Exemple: projection d un composant vers Java Une interface de port devient une classe Java Un composant devient une classe Java Provide devient attribut privé Provide devient méthode publique provides_* (<Itf>) 21
Exemple de transformation (*) transformation comp2java rule comp2clss forall Component cc make Class c, jc.name = cc.name linking cc to jc by comp2clss rule itf2clss forall Interface it make Class cl, cl.name = it.name linking it to cl by citf2jclss rule op2meth forall Operation op where itf2class links op.itf to Y make Method me, me.name = op.name, Y.methods += me linking op to me by cop2jmeth 22 rule provides2java forall Port p where p.kind == "provides" && citf2jclss links p.type to XX && comp2clss links p.owner to YY make Attribut a, a.name = "_" + p.name, Argument a1, a1.type = XX, Method m, m.name = "provide_" + p.name, m.returntype = a1, YY.method += m, YY.fields += a linking p to a by port2attr linking p to a1 by port2arg linking p to m by port2meth (*) Syntaxe définie et proposée lors de la première soumission de MOF QVT à l OMG (M. Lawley, R. Marvie et J. Steel)
Modèle de transformations Modélisation d une transformation Définition d une transformation Utilisation des concepts de transformations Méta-modèle de transformation Définit les concepts relatifs aux transformations Parallèle: syntaxe du langage Java pour écrire des programmes 23
Transformation dirigée par les M2 MOF Component Metamodel Transformation Metamodel Java Metamodel Comp. based Model Comp2java Trans. Model 24 Java based Model
Moyens et standards Langages de (méta-)modélisation MOF, UML, OCL Un langage de transformation unifié MOF 2.0 QVT RFP Un standard de sérialisation de modèles MOF XMI (XML Metadata Interchange) Des définition de M2, PDM, Trans Pour chaque domaine d activité 25
Mise en œuvre 26
Réaliser des transformations Exemple Composant -> Java Utilisation des deux méta-modèles Plusieurs mises en œuvres possibles Utiliser un formalisme de description MOF QVT en cours de définition Utilisation d XSLT sur des modèles en XMI «Coder» la transformation Langage de programmation Utilisation de référentiels MOF pour les modèles 27
Mise en œuvre avec XSLT Langage de transformation de documents XML Projection vers HTML ou XHTML Application de feuilles de styles XSL Une transformation XSLT Ensemble de pattern à rechercher Structure des éléments à produire Utilisation avec des modèles écrits en XML Version très light de XMI pour dérouler l exemple 28
XSLT: Une transformation Une transformation est définie par une feuille de style XSL qui Contient un certain nombre de templates <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <!-- définition des templates --> </xsl:stylesheet> 29
XSLT: Un template Un template définit une règle de transformation Pattern dans le document source Texte à produire dans le document cible / templates à appliquer (sous-templates) <xsl:template match="compmodel"> <javamodel> <xsl:apply-templates /> </javamodel> </xsl:template> 30
XSLT: Accéder aux valeurs Un nœud XML Contient du texte -> récupérer la valeur Contient un sous-nœud -> récupérer sa valeur <xsl:template match= "name"> <name> <xsl:value-of select= ". " /> </name> </xsl:template> <xsl:template match= "Port"> <class><name> <xsl:value-of select= "name" /> </name></class> </xsl:template> 31
Modèle de l application (comp. i) <?xml version="1.0"?> <compmodel> <basetype> <bname>string</bname> </basetype> <basetype> <bname>void</bname> </basetype> <port> <name>inotify</name> <operation> <return>void</return> <name>notify</name> <parameter> <name>msg</name> <type>string</type> </parameter> </operation> </port> 32
Modèle de l application (comp. ii) <component> <name>observer</name> <provides> <type>inotify</type> <name>itf</name> </provides> </component> <component> <name>notifier</name> <uses> <type>inotify</type> <name>obs</name> </uses> </component> </compmodel> 33
Modèle de l application (java i) <?xml version="1.0" encoding="utf-8"?> <javamodel> <class> <name>inotify</name> <method> <return>void</return> <name>notify</name> <parameter> <name>msg</name> <type>string</type> </parameter> </method> </class> <class> <name>observer</name> <attribute> <type>inotify</type> <name>_itf</name> </attribute> <method> <name>provide_itf</name> <return>inotify</return> </method> </class> 34
Modèle de l application (java ii) <class> <name>notifier</name> <attribute> <type>inotify</type> <name>_obs</name> </attribute> <method> <name>connect_obs</name> <parameter> <type>inotify</type> <name>obs_</name> </parameter> <return>void</return> </method> <method> <name>disconnect_obs</name> <return>void</return> </method> </class> </javamodel> 35
Mise en œuvre «codage» Référentiels de modèles Produit à partir des M2 Règles de projections MOF Programme Parcours du référentiel source (Exemple: pattern visiteur) Production d éléments dans référentiel destination Référentiel Modèles Comp. Transformation codée Référentiel Modèles Java 36
Extrait de transformation (python) def itf2clss (input, output): for itf in input.interface: clss = output.create_jclass () ; clss.name = itf.name ; for op in itf.operation: meth = clss.create_method () ; meth.name = op.name ; meth.type = op.type ; for arg in op.parameter: param = meth.create_parameter () ; param.name = arg.name ; param.type = arg.type ; 37
Remarques XSLT Peut paraître plus simple à mettre en œuvre Limité dans les capacités de transformation Ne permet pas de produire le code «Codage» Plus technique à mettre en œuvre Aucune limite en terme de transformation Implique de disposer de référentiels (ModFact) -> Nécessité de disposer d un langage adapté 38
Exercices Définir complètement en XSLT la transformation du modèle de Composants au modèle Java et l exécuter avec le support d exécution Xalan. Faire la même chose avec un script Python et l environnement fourni (référentiel de modèles de composants, référentiel de modèles Java, extrait de transformation). 39
Conclusion 40
Conclusion Principaux paradigmes de l ingénierie logicielle Raffinement de procédures Composition d objets Transformations de modèles Ingénierie dirigée par les modèles Approche innovante et prometteuse Beaucoup de travail (chantier ~10 ans) Une nouvelle évolution de l ingénierie logicielle Qui était dans l air depuis quelque temps 41
Perspectives Définir un méta-modèle de transformations Comprendre les mécanismes sous-jacents Définir le standard MOF 2.0 QVT On y travaille :o) Outillage pour processus logiciels «MDA» Produire un environnement adapté (depuis M2) Disposer de moteurs de transformations Définir des méthodologie de spécification de processus On y travaille aussi :o)) 42
Références Les spécifications de l OMG UML, MOF, OCL, QVT Les travaux des projets ou labos Triskel (Rennes), Atlas (Nantes) DSTC (Brisbane,.au) Les techniques de compilations Une transformation est au bout du compte une forme de compilation Un petit coup de Google :o) 43