Eclipse Modeling Framework - Génie Logiciel SI5
Transcription
Eclipse Modeling Framework - Génie Logiciel SI5
Découverte EMF Un environnement Alban Gaignard Eclipse Modeling Framework Génie Logiciel SI5 Alban Gaignard [email protected] Alban Gaignard Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Modeling framework Un environnement intégré, dédié à la modélisation : I Définition de modèles I Création d’instances pour un modèle donné (réification) Création du modèle Ecore Laboratoire I3S (UMR 6070) - Equipe Rainbow Importation Edition Modèle de génération Code généré Un environnement de développement avec génération automatique de patrons de classes à partir de modèles. EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Méta-modèle Ecore Origine Eléments d’Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Public ciblé A l’origine destiné aux développeurs Java pour faciliter la construction d’applications à base de modèles structurés. Résumé Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Création du modèle Ecore Code generation facility Génération EMF 12 novembre 2007 Découverte EMF Persistance Réflexivité Dynamicité Notification Validation Résumé 1 / 39 Pour définir des modèles Découverte EMF 3 / 39 “Should I model or should I program ?” Alban Gaignard Alban Gaignard Survol Orientés données I I Spécification des données d’une application sous forme de modèle conceptuel “objet”. Manipulation des packages, classes, opérations, attributs, et relations entre ces entités. Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Orientés prototypage Lors de l’ébauche d’une application, à l’aide de diagrammes de classes “UML”, EMF est vu comme un atelier de génie logiciel (CASE Tool). Découverte EMF Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Compromis entre modélisation et programmation. I Sous ensemble d’UML. I Passage automatique modèles vers code Java. (et réciproquement via annotations). I Utiliser des modèles “opérationnels” dans le processus de développement logiciel. Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé Résumé 4 / 39 5 / 39 EMF peut être vu comme un pont entre plusieurs mondes “(très) proches”. Découverte EMF Découverte EMF Alban Gaignard Alban Gaignard Survol System - name : String + isValid() : Boolean 1..* Component - name : String + run() Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement apparents 1..* Port 1..* - name : String inners - exposed : Boolean Méta-modèle Ecore XML UML Origine Eléments d’Ecore Création du modèle Ecore EMF Importation Edition Un environnement “Low-cost” : I Libre et Open Source I Pas d’éditeur graphique I Intégré à Eclipse I Ancienneté : utilisation industrielle depuis 2002 Génération EMF Java Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré Modèle de génération Code généré EMF à l’exécution EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Persistance Réflexivité Dynamicité Notification Validation Résumé Résumé Fig.: Unification entre Uml, les technologies XML, et Java 6 / 39 Un ensemble d’outils pour : Découverte EMF 7 / 39 Quelques acronymes ... Alban Gaignard Spécifier des modèles I Gérer l’inter-opérabilité entre interfaces Java, UML et schémas XML (i.e. conversion de modèles) I Générer du code correcte, efficace, adaptable I I Générer un éditeur d’instances de modèles Faciliter le développement d’applications utilisant des modèles : I I I I réflexivité dynamicité persistance notification Tous ces outils sont intégrés à la plate-forme Eclipse (sous la forme de Plugins). Alban Gaignard OMG Survol I Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 8 / 39 Découverte EMF Object Management Group, association nord-américaine pour la standardisation et la promotion du paradigme “Objet”. UML Unified Modeling Language, très populaire pour les spécifications et la conception de logiciels. Vues multiples sur un système. EMF est une restriction à la vue statique “diagrammes de classes”. MDA démarche de réalisation de réalisation de logiciels proposée par l’OMG. Une partie de l’Ingénierie Dirigée par les Modèles (MDE). Raffinements successifs de modèles pour passer de modèles indépendants aux plate-formes (PIM) vers des modèles spécifiques (PSM). Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 9 / 39 Découverte EMF Découverte EMF Cycles de développement Alban Gaignard MOF Meta Object Facility, langage de méta-modélisation qui s’auto-définit. M3 M2 M1 MOF (E-MOF) Méta-Modèle Ecore Modèle EMF Ecore Méta-Modèle Ecore Ecore est un (méta-)méta-modèle très proche d’Essential-MOF (sous-ensemble dérivé de MOF avec quelques différences de nommage) XMI Alban Gaignard Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Méta-Modèle Ecore Import Création M2 Modélisation (UML, Java, XML Schemas) Méta-modèle Ecore JMerge Modèle de génération Origine Eléments d’Ecore M1 JET Importation Edition JET Génération EMF Persistance Réflexivité Dynamicité Notification Validation Création du modèle Ecore Importation Edition Génération EMF Editeur d'instances Modèle de génération Code généré Modèle de génération Code généré M0 EMF à l’exécution Xml Metadata Interchange, pour la représentation de modèles objets en XML. Côté EMF, sérialisation de méta-modèles ECore en XMI. Origine Eléments d’Ecore Code Java Généré Création du modèle Ecore Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Fig.: Itération sur un cycle de développement Résumé EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 11 / 39 10 / 39 Origine d’Ecore Découverte EMF Découverte EMF Eléments du méta-modèle 1/3 Alban Gaignard Basé sur MOF 2.0 et presque équivalent à Essential-MOF. Similarités I I Concepts communs : package, classes, opérations, attributs, références, annotations, datatypes . . . Sérialisation XMI Différences I I Pas d’associations au sens UML (pas de notions de navigabilité, rôle, directionnalité) Pas de contraintes I Ajout du concept Factory I Pas d’héritage entre packages Alban Gaignard Survol Survol EObject Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement EModelElement Méta-modèle Ecore EFactory Méta-modèle Ecore EAnnotation EModelElement Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Origine Eléments d’Ecore EPackage EClassifier EEnumLiteral Création du modèle Ecore ETypedElement Importation Edition Génération EMF Modèle de génération Code généré Génération EMF EClass EDataType EOperation EStructuralFeature EParameter EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation EMF à l’exécution EEnum Résumé EAttribute EReference L’éditeur intégré à Eclipse permet de réifier les éléments de cet arbre. 13 / 39 Modèle de génération Code généré Persistance Réflexivité Dynamicité Notification Validation Résumé 14 / 39 Découverte EMF Eléments du méta-modèle 2/3 Découverte EMF Eléments du méta-modèle 3/3 Alban Gaignard 1 eReferences 0..* eReferenceType EAttribute - name :String EDataType - name :String eAttributeType 1 EReference - name :String - containment : boolean - lowerBound : int - upperBound : int 0..1 eOpposite Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore components EClass name = ? Origine Eléments d’Ecore Création du modèle Ecore EAttribute name = ? System - name : String + isValid() : Boolean EPackage EOperation Modèle de génération Code généré 1..* Component - name : String + run() 1..* Link - name : String apparents 1..* Port <<abstract>> 1..* - name : String inners - exposed : Boolean EReference containment = ? eOpposite = ? Persistance Réflexivité Dynamicité Notification Validation InputPort Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré Type 1 - name : String EMF à l’exécution Quelques propriétés intéressantes pour les références : I Cardinalité : attributs lowerBound, upperBound. I Contenance : relations “tout-partie” (lié au comportements de l’éditeur et de la sérialisation). I Opposition : associations bi-directionnelles. Méta-modèle Ecore Origine Eléments d’Ecore Importation Edition Génération EMF Fig.: Extrait simplifié du méta-modèle Ecore Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement EClass abstract = ? interface = ? end 0..* EClass - name : String - abstract : boolean - interface : boolean eAttributes 0..* start eSuperType Alban Gaignard Illustration sur un méta-modèle support : OutputPort Résumé EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 15 / 39 Ecore : importation de modèles 1/2 Découverte EMF 16 / 39 Ecore : importation de modèles 2/2 Alban Gaignard Découverte EMF Alban Gaignard Eclipse propose des assistants d’importation pour : Survol UML I Rationnal Rose : fichiers .mdl I Eclipse UML2 : fichiers .uml2 XML XML Schema moins expressif que Ecore. Conversion des schémas XML en méta-modèles Ecore. Mapping simple et direct : I Un schema → EPackage I Un type complexe → EClass Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Java Création d’un méta-modèle Ecore à partir d’un modèle constitué d’interfaces Java annotées : Hiérarchie des packages Java contenant les interfaces → hiérarchie de EPackage. Méta-modèle Ecore I Interface Java taguée @model → EClass. Création du modèle Ecore I Les EReference, EAttributes sont générés pour chaque get*() d’une interface. I Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré I EMF à l’exécution I Un type simple → EDataType I Un attribut → EAttribut si son type correspondant est EDataType, EReference si EClass Persistance Réflexivité Dynamicité Notification Validation I Résumé Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Les EOperation sont générés pour n’importe qu’elle autre méthode. Ajout de propriétés @model [<property>=‘value’] (abstractness, interface, multiplicity . . . ) Origine Eléments d’Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 18 / 39 19 / 39 Ecore : édition de (méta-)modèles 1/2 Découverte EMF ECore : édition de (méta-)modèles 2/2 Alban Gaignard Editeur intégré Créer des éléments sous une forme arborescente : I I Menu contextuel pour la création de “fils/frères” d’une entité (packages, classes, . . . ). Vue properties pour l’édition des propriétés d’un élément (abstractness . . . ). Editeur graphique externe Alban Gaignard Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Méta-modèle Ecore Origine Eléments d’Ecore Origine Eléments d’Ecore Création du modèle Ecore Création du modèle Ecore Importation Edition Importation Edition Génération EMF I Omondo UML I TopCaseD I Rationnal Rose I ArgoUML, Poseidon (car sérialisation XMI) I ... Découverte EMF Génération EMF Modèle de génération Code généré Modèle de génération Code généré EMF à l’exécution EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Persistance Réflexivité Dynamicité Notification Validation Résumé Fig.: Editeur intégré Résumé 21 / 39 20 / 39 Modèle de génération 1/3 Découverte EMF Modèle de génération 2/3 Alban Gaignard Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement 1. Par le menu New→Other ... 2. On crée un nouveau modèle EMF 3. A partir d’un méta-modèle Ecore (ou autre via importation) Fichier .genmodel similaire au .ecore avec synchronisation automatique. On configure la phase de génération. Découverte EMF Alban Gaignard Menu contextuel pour génération du code Java : Méta-modèle Ecore Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Origine Eléments d’Ecore Création du modèle Ecore Création du modèle Ecore Importation Edition Importation Edition Génération EMF Génération EMF Modèle de génération Code généré Modèle de génération Code généré EMF à l’exécution EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Fig.: Génération de code pour l’entité Component Résumé Persistance Réflexivité Dynamicité Notification Validation Résumé 23 / 39 24 / 39 Modèle de génération 3/3 Découverte EMF Code généré 1/3 : des plugins éclipse Alban Gaignard Découverte EMF Alban Gaignard Les propriétés sont éditables dans la vue Properties Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Fig.: Propriétés globales du .genmodel Persistance Réflexivité Dynamicité Notification Validation .model Patrons de classes du modèle et factories permettant de construire des instances d’éléments de modèle dans du code Java. .edit Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Framework pour le développement d’éditeurs d’instances de modèle. Création du modèle Ecore .editor Génération EMF Exemple d’implémentation d’un éditeur d’instances pour le modèle générateur. .test Framework de tests unitaires (JUnit) pour permettre au développeur de tester ses éléments de modèle. Résumé Survol Importation Edition Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé “En général, on les laisse à leur valeur par défaut !” 26 / 39 25 / 39 Code généré 2/3 : patrons de classes Découverte EMF Code généré 3/3 Alban Gaignard Génération Ensemble de packages contenant classes et interfaces Java avec support de l’héritage multiple. Génération réalisée avec JET (Java Emitter Templates ) et configurable. Re-Génération I I Une nouvelle itération sur le modèle amène la fusion du code déjà généré avec les modifications du modèle de génération. Que se passe-t-il si le corps d’une opération a déjà été enrichi ? Annotation @generated NOT. I Si on supprime des entités dans le genModel ? I Attention : “bijection” modèle ECore ⇔ code .model augmenté “fragile” ! !. Découverte EMF Alban Gaignard Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Fonctionnalités additionnelles I Notification (patron de conception Observer) I Persistance (sérialisation XMI avec résolution des références) I Réflexivité I Contraintes de cardinalité Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé Résumé 27 / 39 28 / 39 Découverte EMF Persistance 1/3 Persistance 2/3 Alban Gaignard I I I I Une donnée sérialisée = Resource. Les Resources sont enregistrées dans un ResourceSet. Chargement explicite d’une resource par le “client”. Chargement “à la demande” des autres resources lors de la résolution des références. Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Création du modèle Ecore ResourceSet uri 1 Resource 1 uri 2 Resource 2 Alban Gaignard Survol Origine Eléments d’Ecore Load Resource 1 Importation Edition ResourceSet Contexte commun pour différentes ressources se référençant. Factory pour la création de ressources (+ autres utilitaires). ResourceSet rs = new ResourceSetImpl() ; URI uri = URI.createFileURI("/data/example.xmi") ; Resource resource = rs.createResource(uri) ; Génération EMF Modèle de génération Code généré Demand-load Resource 2 EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Resource Conteneur pour les objets persistés (save() et load()). Accès au contenu via getContents(). Sérialisation possible en Xml, Xmi, Ecore, Emof. Résumé Resource 1 Découverte EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé Resource 2 31 / 39 30 / 39 Persistance 3/3 Découverte EMF Réflexivité Alban Gaignard Sauvegarde URI fComp = URI.createFileURI("/data/MyNew.structure") ; Resource r = resourceSet.createResource(fComp) ; r.getContents().add(systeme) ; try { r.save(null) ; } catch (IOException e) { e.printStackTrace() ; } Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Création du modèle Ecore Chargement Alban Gaignard Similaire à l’introspection Java. Toutes les classes générées sont héritières d’EObject. Par exemple : avec l’API générée Méta-modèle Ecore Origine Eléments d’Ecore Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore StructureFactory fact = new StructureFactoryImpl() ; Component component = fact.createComponent() ; c.setName("NouveauComposant") ; Importation Edition Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF URI fComp = URI.createFileURI("/data/MyNew.structure") ; Resource r = resourceSet.createResource(fComp) ; try { r.load(null) ; } catch (IOException e) { e.printStackTrace() ; } if (resource.isLoaded() && resource.getContents().size() > 0) { systeme = (structure.System) resource.getContents().get(0) ; } Découverte EMF Modèle de génération Code généré Génération EMF avec l’API réflexive EMF à l’exécution EMF à l’exécution EObject component = ... ; EClass componentClass = component.eClass() ; componentClass.eSet(componentClass. getEStructuralFeature("name"),"NouveauComposant") ; Persistance Réflexivité Dynamicité Notification Validation Résumé 32 / 39 Modèle de génération Code généré Persistance Réflexivité Dynamicité Notification Validation Résumé 33 / 39 Dynamicité Découverte EMF Notification Alban Gaignard Création dynamique de modèles Ecore //création du modèle EPackage poPackage = EcoreFactory.eINSTANCE.createEPackage() ; poPackage.setName("po") ; poPackage.setNsURI("http ://www.example.com/PurchaseOrder") ; EClass poClass = EcoreFactory.eINSTANCE.createEClass() ; poClass.setName("PurchaseOrder") ; poPackage.getEClassifiers().add(poClass) ; EAttribute billTo = EcoreFactory.eINSTANCE.createEAttribute() ; billTo.setName("billTo") ; billTo.setEType(EcorePackage.eINSTANCE.getEString()) ; poClass.getEStructuralFeatures().add(billTo) ; Alban Gaignard Survol Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement I Un EObject est un sujet qui peut être observé par un Adapter. I Le code généré (getters, setters) contient les instruction de notification. Méta-modèle Ecore Origine Eléments d’Ecore I Création du modèle Ecore Importation Edition Modèle de génération Code généré En connaissant le modèle Ecore sans avoir l’API générée. //réification du modèle EObject po = EcoreUtil.create(poClass) ; po.eSet(billTo,"123 Elm St.") ; EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Possibilité d’enregistrer les changements d’états par l’objet ChangeRecorder ChangeRecorder recorder = new ChangeRecorder() ; recorder.beginRecording(Collections.singleton(order)) ; order.setBillTo("456 Cherry St.") ; ChangeDescription change = recorder.endRecording() ; Génération EMF Instanciation dynamique Découverte EMF I I Do/Undo : ChangeDescription.apply() et ChangeDescription.applyAndReverse() Transactions sur des instances/modèles ? Résumé Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Résumé 34 / 39 Validation Découverte EMF 35 / 39 Résumé Alban Gaignard Alban Gaignard Survol I Génération d’interfaces : code de validation à la charge du programmeur. public interface SystemValidator { boolean validate() ; boolean validateComponents(EList<Component> value) ; boolean validateConnections(EList<Link> value) ; boolean validateApparentPorts(EList<Port> value) ; } I EMF Validation Framework : sous-projet d’EMF permettant la définition de contraintes et offrant des services de vérification. Découverte EMF Survol Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement 1. Tour d’horizon de l’environnement 2. Méta-modèle Ecore 3. Edition Ecore 4. Génération EMF Importation Edition Génération EMF 5. Lors de l’exécution, et quelques fonctionnalités avancées Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré Modèle de génération Code généré EMF à l’exécution EMF à l’exécution Persistance Réflexivité Dynamicité Notification Validation Persistance Réflexivité Dynamicité Notification Validation Résumé Résumé 36 / 39 38 / 39 Pointeurs Découverte EMF Alban Gaignard Survol Web : I http ://www.eclipse.org/modeling/emf/ I http ://wiki.eclipse.org/EMF I http ://www.eclipse.org/modeling/emf/docs Livre : Eclipse Modeling Framework , aux éditions Addison Wesley Ce qu’est EMF Pourquoi EMF Outils proposés Standardisation Cycles de développement Méta-modèle Ecore Origine Eléments d’Ecore Création du modèle Ecore Importation Edition Génération EMF Modèle de génération Code généré EMF à l’exécution Des questions avant de passer à la pratique ? Persistance Réflexivité Dynamicité Notification Validation Résumé 39 / 39