Ingénierie Dirigée par les Modèles (IDM)
Didacticiel ( tutoriel ) Eclipse Sirius ( Obeo Designer Community ) : le digne successeur de GMF le framework le plus complexe du monde !
Dans le précédent épisode nous avons pu voir le métamodèle et le modèle utilisé pour la conception d'un éditeur de diagramme.
- Clic droit sur basicfamily.sample - New -Other - Viewpoint Specification Project - "basicfamily.design"
- Ouvrez l'éditeur de viewpoint en double cliquant sur le ficier basicfamily.odesign. Ce fichier contient les "viewpoint" qui sont des représentations ( diagramme, table, arbre, ... )
- Dans l'éditeur, créez un viewpoint : clic droit sur basicfamily - New - Viewpoint
- Dans la vue Properties : Id = persons et Model file extension = basicfamily
- Clic droit sur le viewpoint "persons" - New Representation - Diagram Description -
- Dans la vue Properties : Id* = Persons diagram - Domain Class* = basicfamily.Family
- Ajoutez un noeud : Clic droit du default - New Diagram element - Node
- Sélectionnez Node - vue Properties - Id* = ManNode - Domain Class* = basicfamily.Man - Semantic Candidatse Expression = feature:members
- Clic droit sur ManNode - New Style - Square
- Dans Properties - Colors - light_blue ; chocolate ; light_blue
- C'est la où les Athéniens atteignirent, pour tester ce 1er diagramme : clic droit sur le projet basicfamily.sample - Viewpoints Selection - sélectionnez persons
- Clic droit sur Family - New Representation - new Persons diagram - laissez le nom "new Persons diagram" par défaut
Un nouveau diagramme apparaît avec des carrés au fond bleu clair avec les noms des hommes en marron.
Nous poursuivrons cette passionnante aventure dans un prochain billet.
"Refais chaque jour le serment d’être heureux."
Alain
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : fini Eclipse GMF, vive Eclipse Sirius ( didacticiel / tutoriel Sirius)
Dans nos 2 précédents articles :
https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-didacticiel-gmf-ca-marche-ce-truc
et
nous avons vu qu'Eclipse Graphical Modeling Framework est d'une complexité effroyable, le mode opératoire est aussi rebutant qu'une fiche de montage d'un meuble IKEA.
Et si seulement ça marchait, mais le pire c'est qu'ayant suivi scrupuleusement le processus des dernières versions, on tombe sur des erreurs de génération de code qui ne sont même pas "googlelisées" !
Heureusement, l'ennjeu de pouvoir concevoir des éditeurs de diagrammes avec ses propres DSL ( Domain Specific Language ) ou DSM ( Domain Specific Model ) est tellement important qu'Eclipse semble avoir mis le paquet sur un super plugin nommé "Sirius" digne successeur de GMF.
Les entreprises Obeo et Thales participent largement au projet ce qui un gage de sérieux, de qualité et de fiabilité.
Quand on installe Sirius à partir du site d'Eclipse Modeling Project, on télécharge directement la version complète "Obeo Designer Community".
Installer Sirius
https://www.eclipse.org/sirius/download.html
Vous êtes redirigé vers le site d'Obeo
http://www.obeodesigner.com/download
Téléchargez, installez et lancez.
Mais au fait quel est le but ?
On part d'un métamodèle conforme à Ecore et conçu avec le framwork EMF et ses outils.
Faisons "quick and dirty" et prenons celui de l'exemple fourni avec Sirius :
Comme à l'habiture : File - New - Example - Basic Family Metamodel Definition - sélectionnez le projet org.eclipse.sirius.sample.basicfamily
Résullats des courses : 3 projets sont créés :
- org.eclipse.sirius.sample.basicfamily
- org.eclipse.sirius.sample.basicfamily.edit ( 1er éditeur de modèle )
- org.eclipse.sirius.sample.basicfamily.editor( 2ème éditeur de modèle )
En fait c'est comme si on avait créé un métamodèle ecore "basicfamily.ecore" puis on avait généré le fichier "basicfamily.genmodel" puis dans l'éditeur du genmodel on avait fait clic doir sur la racine - Generate all pour générer le code des 3 projets.
Exécutez le 1er plugin : clic droit sur le projet - Run configuration - Eclipse Application - onglet arguments - VM arguments
- -Xms256m
- -Xmx768m
- -XX:MaxPermSize=256m
puis Run. Un nouvel Eclipse s'ouvre, attention avec un autre workspace "runtime-EclipseApplication" différent du premier ( par défaut =" workspace" ).
C'est moi qui ne l'ai pas fait ;-) le modèle à partir des plugins générés des éditeurs.
Le modèle est fourni dans les exemple, il suffit de faire File - New - Example - Basic Family Sample Model
Clic droit sur le fichier "example.basicfamily" - Open With - Basic Family Model Editor - un éditeur s'ouvre avec différents onglets correspondant à différentes représentations.
Dans un prochain billet on verra comment créer un éditeur de diagramme avec Sirius.
"Se réveiller, c’est se mettre à la recherche du monde."
Alain
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : didacticiel GMF, avec "Generate diagram code (Xtend2)" et suppression de quelques éléments ça marche !
Dans l'article précédent " https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-didacticiel-gmf-ca-marche-ce-truc", je présentais un tutoriel GMF qui ne marchais pas !
En tout cas la génération du diagramme avec l'option Generate diagram code conduisait à plusieurs erreurs probablement dues à des bogues.
Par contre l'option clic droit sur testgmf.gmfgen - Generate diagram code (Xtend2) générait qu'une seule erreur concernant l'appel d'une méthode qui n'est pas définie. A priori l'erreur est liée à l'entité Thread.
Qu'a cela me tienne, supprimons tout sauf testgmf.ecore et testgmf.genmodel.
Recommençons et lorsqu'on va créer "testgmf.gmfgraph" et "testgmf.gmftool" on désélectionne les Thread et ThreadItem.
Le clic droit sur testgmf.gmfgen - Generate diagram code (Xtend2) affiche cette fois-ci le message "Code generate successfully".
Un nouveau projet "testgmf.diagram" est créé, il correspond à un plugin Eclipse.
Pour l'exécuter : clic droit sur le projet testgmf.diagram - Run As - Eclipse Application - un nouvel Eclipse se lance - créez un projet vide "mindmap" - clic droit sur le projet - New - Example - sélectionnez le nouveau plugin qui a été généré : Testgmf Diagram - nommez votre diagramme "cartementale".
2 fichiers sont créés : cartementale.mindmap et cartementale.mindmap_diagram.
Ouvrez cartementale.mindmap_diagram - la palette sur la droite permet de créer des Topics, de les relier et de mettre des ressources.
On peut bien sur embellir avec de la couleur, des formes spécifiques, ... mais le principal est fait.
Un clic droit sur cartementale.mindmap - Open With - Text Editor - on a le source XMI du modèle, les entités "carte mentale", "qualités" et "titres" de types Topic.
Un clic droit sur cartementale.mindmap_diagram - Open With - Text Editor - on a le source XMI de la représentation du diagramme.
On voit donc que la sémantique ( les entités et leurs relations ) et la représentation du diagramme sont représentées distinctement.
Une sémantique pouvant avoir plusieurs représentations différentes.
"La peine et le plaisir passent comme une ombre : la vie s'écoule en un instant ; elle n'est rien par elle-même ; son prix dépend de son emploi. Le bien seul qu'on a fait demeure, et c'est par lui qu'elle est quelque chose."
Jean-Jacques Rousseau
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : didacticiel GMF, ça marche ce truc ?
Eclipse GMF ( Graphical Modeling Framework ) permet en théorie de réaliser des diagrammes personnaliser à partir d'un métamodèle (DSL Domain Specific Language ou DSM Domain Specifc Model).
Je dis bien en théorie car j'y ai consacré une semaine (j'ai aussi eu d'autres occupations) et ça n'a jamais marché malgré tous mes essais avec toutes les dernières versions, mises à jour et recherches sur google sur les différents problèmes que je rencontrais.
Installez la dernière version d'Eclipse Mars Modeling Tools :
Comme dit l'homme tombant du 20 ème étage et arrivant au 19 ème :"jusqu'ici tout va bien !". Cette nouvelle mouture contient entre autre EMF et Sirius, qui a mon avis remplace avantageusement GMF.
La documentation de GMF nous dit d'installer dans l'ordre QVTO ( Query View Transformation Operational, le langage impératif de transformation de modèles normalisé par l'OMG)
Installation locale : http://www.eclipse.org/mmt/downloads/?project=qvto
Et oui, vous l'avez deviné à un moment donné il faut bien installer GMF
Insstallation par update :
Vérifier les mises à jour : Help - Check for Updates
Des nouvelles mises à jour vous sont proposées, acceptez-les !
Pour démontrer que ça ne marche pas il nous faut un métamodèle. Prenons celui de la documentation comme ça on ne pourra mettre en cause notre modèle !
Il s'agit du métamodèle de mindmap vu dans un préédent article :
Créer un projet GMF : File - New - Other - Graphical Modeling Framework - Graphical editor project - "testgmf" - Finish
Créez le modèle Ecore à partir du source XMI founi par l'article
Clic droit sur Model - New - Other - Eclipse Modeling Framework - Ecore Model - testgmf.ecore - finish
Clic droit sur testgmf.ecore - Open with- Text editor - remplacer le contenu par celui du source XMI du métamodèle de mindmap mentionné dans l'article cité précédemment
Double cliquer sur testgmf pour vérifier que l'on a bien les classe "Map", "Topic", ... Sauvegarder régulièrement à chaque étape successive.
Générer le fichier genmodel : Clic droit sur Model - New - Other - Eclipse Modeling Framework - EMF Generator Model - "testgmf.genmodel" - cliquez sur load pour le fichier ecore - laissez toutes les valeurs par défaut - Finish
Générer le code : double cliquez sur testgmf.genmodel pour ouvrir l'éditeur, clic droit dans l'éditeur sur Testgmf - Generate all - vérifiez dans src que les classes Map, Topic, ... sont bien créées.
Créer le graphe : Clic droit sur Model - New - Other - Graphical Modeling Framework - Simple Graphical Definition Model - "testgmf.gmfgraph" - laissez toutes les valeurs par défaut.
Crèez les tools ( palette, ...) : Clic droit sur Model - New - Other - Graphical Modeling Framework - Simple Tooling Definition Model - "testgmf.gmftool" - laissez toutes les valeurs par défaut.
Créez le mapping : Clic droit sur Model - New - Other - Graphical Modeling Framework - Guide Mapping Model Creation - "testgmf.gmfmap" - laissez toutes les valeurs par défaut.
Double cliquez sur testgmf.gmfmap - ouvrez l'arborescence jusqu'à Mapping - Link Mapping <Thread ...> - Feature Label Mapping [Thread.subject:EString] - View Onglet Properties - Misc - Diagram Label - Diagram Label Thread Subject
Générer le code : Clic droit sur testgmf.gmfmap - Create generator model - "testgmf.gmfgen" - cliquez sur load - laissez toutes les valeurs par défaut. - Finish
Générer le diagramme : clic droit sur testgmf.gmfgen - Generate diagram code
On arrive quoiqu'on fasse à l'erreur :
Exception (Boolean expected (was: org.eclipse.ocl.ecore.internal.OCLStandardLibraryImpl$1)!:in CodeStyle, line 18) while generating code
Boolean expected (was: org.eclipse.ocl.ecore.internal.OCLStandardLibraryImpl$1)!:in CodeStyle, line 18
Malgré tous mes essais d'installation, de réinstallation, de recherches sur Google de l'exception, des problèmes similaires, de simplification du métamodèle ( une seule classe avec un seul attribut ! ), de "post" sur les différents spécialisés, rien n'y fait, je m'avoue vaincu.
Du reste c'est peut être un bien et je me tourne maintenant vers Sirius qui permet de concevoir ses propres diagrammes à partir de ses métamodèles.
Par contre : clic droit sur testgmf.gmfgen - Generate diagram code (Xtend2) à l'air de mieux fonctionner, puisqu'il n'y a qu'une erreur dans un source facilement corrigeable.
"Tout changement est difficile au début, compliqué au milieu et magnifique à la fin."
Robin Sharma
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : métamodèle de mindmap, un petit dernier pour la route
Pour compléter les métamodèles de mindmap déjà vus dans les articles :
- https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-les-metamodeles-mindmap-l-embarras-du-choix
- https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-metamodele-simplifie-de-mindmap
- https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-metamodele-de-mindmap-en-veux-tu-en-voila
en voici un petit dernier.
La sémantique est similaire seul les noms changent.
Dans un prochain article je vous livrerais le source XMI du fichier ecore.
"La différence entre l'amour et l'argent, c'est que si on partage son argent, il diminue, tandis que si on partage son amour, il augmente. L'idéal étant d'arriver à partager son amour avec quelqu'un qui a du pognon."
Philippe Geluck
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : métamodèle de mindmap, en veux tu en voilà
Mes 2 derniers articles :
et https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-metamodele-simplifie-de-mindmap
a permis de présenter 2 exemples de métamodèle de mindmap.
En voici un autre utilisant l'héritage.
Voici comme à notre habitude le source XMI du fichier Ecore :
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="mindmap" nsURI="http://www.eclipse.org/2008/mindmap" nsPrefix="mindmap">
<eClassifiers xsi:type="ecore:EClass" name="Map">
<eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
eType="#//MapElement" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="created" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="rootTopics" upperBound="-1"
eType="#//Topic" volatile="true" transient="true" derived="true">
<eAnnotations source="http://www.eclipse.org/2007/OCL">
<details key="derive" value="let topics : Set(mindmap::Topic) = self.elements->select(oclIsKindOf(mindmap::Topic))->collect(oclAsType(mindmap::Topic))->asSet() in topics->symmetricDifference(topics.subtopics->asSet())"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="MapElement" abstract="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
defaultValueLiteral="Element"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Topic" eSuperTypes="#//MapElement">
<eOperations name="allSubtopics" upperBound="-1" eType="#//Topic">
<eAnnotations source="http://www.eclipse.org/2007/OCL">
<details key="body" value="self->closure(subtopics)"/>
</eAnnotations>
</eOperations>
<eStructuralFeatures xsi:type="ecore:EReference" name="subtopics" upperBound="-1"
eType="#//Topic" eOpposite="#//Topic/parent"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="description" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="start" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="end" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="#//Priority"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//Topic"
eOpposite="#//Topic/subtopics"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Relationship" eSuperTypes="#//MapElement">
<eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
eType="#//Topic"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//Topic"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//Type"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="Type">
<eLiterals name="DEPENDENCY" literal="d"/>
<eLiterals name="INCLUDE" value="1" literal="i"/>
<eLiterals name="EXTEND" value="2" literal="e"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="Priority">
<eLiterals name="HIGH"/>
<eLiterals name="MEDIUM" value="1"/>
<eLiterals name="LOW" value="2"/>
</eClassifiers>
</ecore:EPackage>
Il nous restera un petit dernier pour un prochain article.
"Les grands principes participants du bonheur sont : quelque chose à faire, quelque chose à aimer, et quelque chose à espérer."
Allan K. Chalmers
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : métamodèle simplifié de mindmap
Dans l'article précédent https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-les-metamodeles-mindmap-l-embarras-du-choix nous avons vu un métamodèle complet de mindmap.
En voici un autre quasiment identique mais auquel on a retiré des classes qui ne sont pas primordiales et qui peut être utilisé pour des mises au point de transformation vers d'autres modèles.
Voici le source XMI du fichier Ecore :
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="mindmap" nsURI="mindmap" nsPrefix="mindmap">
<eClassifiers xsi:type="ecore:EClass" name="Topic">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="subtopics" upperBound="-1"
eType="#//Topic"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="resources" upperBound="-1"
eType="#//Resource" eOpposite="#//Resource/topics"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="percentComplete" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloatObject"
defaultValueLiteral="0"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" eType="#//Priority"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="startDate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="endDate" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloatObject"
defaultValueLiteral="0"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="comments" upperBound="-1"
eType="#//Thread" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Map">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="rootTopics" upperBound="-1"
eType="#//Topic" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="relations" upperBound="-1"
eType="#//Relationship" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="resources" upperBound="-1"
eType="#//Resource" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Resource">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="topics" upperBound="-1"
eType="#//Topic" eOpposite="#//Topic/resources"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="email" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="comments" upperBound="-1"
eType="#//Thread" eOpposite="#//Thread/author"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Relationship">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
eType="#//Topic"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//Topic"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="#//RelationshipType"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="RelationshipType">
<eLiterals name="DEPENDENCY"/>
<eLiterals name="INCLUDES" value="1"/>
<eLiterals name="EXTENDS" value="2"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="Priority">
<eLiterals name="ONE" value="1"/>
<eLiterals name="TWO" value="2"/>
<eLiterals name="ZERO"/>
<eLiterals name="THREE" value="3"/>
<eLiterals name="FOUR" value="4"/>
<eLiterals name="FIVE" value="5"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Thread">
<eStructuralFeatures xsi:type="ecore:EReference" name="author" eType="#//Resource"
eOpposite="#//Resource/comments"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="subject" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="items" upperBound="-1"
eType="#//ThreadItem" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="postDate" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ThreadItem">
<eStructuralFeatures xsi:type="ecore:EReference" name="author" eType="#//Resource"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="body" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="itemPostDate" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate"/>
</eClassifiers>
</ecore:EPackage>
Il nous reste encore 2 métamodèles de mindmap à voir qui sont cette fois-ci différents et qui feront l'objet des 2 prochains articles.
"Les gens qui arrivent à quelque chose dans ce monde sont ceux qui se lèvent , qui recherchent les circonstances qu’ils désirent et qui, s’ils ne les trouvent pas, les créent."
George Bernard Shaw
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Ingénierie Dirigée par les Modèles : les métamodèles mindmap, l'embarras du choix !
Dans les articles précédents, j'ai présenté les raisons ( https://www.urbanisation-si.com/modelisation-metier-mindmap-ne-vous-perdez-plus-dans-votre-cheminement-de-pensee-mettez-de-l-ordre-dans-vos-idees ) pour utiliser les mindmap ainsi que mes outils préférés gratuits bien évidemment ( https://www.urbanisation-si.com/modelisation-metier-outils-mindmap ).
Il serait intéressant d'industrialiser l'intégration des informations contenues dans les mindmap des modéles métier utilisant KAOS, SysML ou bien encore UML.
Pour transformer un modèle mindmap dans un autre modèle, il nous faut son métamodèle ( https://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-idm-tutoriel-atl-atlas-transformation-language-concevez-les-metamodeles-avant-de-passer-aux-choses-serieuses ).
Plutôt que de me faire des noeuds au cerveau pour concevoir un métamodèle de mindmap, j'ai cherché sur internet. Heureusement ou malheureusement, j'en ai trouvé plusieurs.
Un premier métamodéle de mindmap a été récupéré sur le site d'Eclipse.
La racine est constituée de l'entité "DocumentRoot" qui sert de conteneur et qui n'est pas vraiment utile, du reste on verra dans le prochain article un métamodèle de mindmap simplifié dans lequel cette entité a été supprimée.
L'entité "Map" représente le mindmap qui est un composite de "Topic" (Sujet) à leur tour lié par une composition de "Thread" (ou fil de discussion) composée de "ThreadItem".
Toutes ces entités (Map, topic, Thread, ThreadItem) sont liées à des "Resource" (auteur, ...).
On peut aussi établir des relations ("Relationship") entre 2 sujets ("Topic") source et cible.
Voici le source XMI du fichier Ecore :
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="mindmap" nsURI="http://www.example.org/mindmap" nsPrefix="mindmap">
<eClassifiers xsi:type="ecore:EClass" name="DocumentRoot">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value=""/>
<details key="kind" value="mixed"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="elementWildcard"/>
<details key="name" value=":mixed"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="xMLNSPrefixMap" upperBound="-1"
eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"
transient="true" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="xmlns:prefix"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="xSISchemaLocation" upperBound="-1"
eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EStringToStringMapEntry"
transient="true" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="xsi:schemaLocation"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="map" upperBound="-2" eType="#//Map"
volatile="true" transient="true" derived="true" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="map"/>
<details key="namespace" value="##targetNamespace"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Map">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Map"/>
<details key="kind" value="elementOnly"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="rootTopics" upperBound="-1"
eType="#//Topic" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="rootTopics"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="relations" upperBound="-1"
eType="#//Relationship" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="relations"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="resources" upperBound="-1"
eType="#//Resource" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="resources"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="title" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="title"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="Priority">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Priority"/>
</eAnnotations>
<eLiterals name="ZERO"/>
<eLiterals name="ONE" value="1"/>
<eLiterals name="TWO" value="2"/>
<eLiterals name="THREE" value="3"/>
<eLiterals name="FOUR" value="4"/>
<eLiterals name="FIVE" value="5"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EDataType" name="PriorityObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Priority:Object"/>
<details key="baseType" value="Priority"/>
</eAnnotations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Relationship">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Relationship"/>
<details key="kind" value="empty"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="label" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="label"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//Topic">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="source"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="target" eType="#//Topic">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="target"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="type" unique="false" eType="#//RelationshipType"
defaultValueLiteral="DEPENDENCY" unsettable="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="type"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="RelationshipType">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="RelationshipType"/>
</eAnnotations>
<eLiterals name="DEPENDENCY"/>
<eLiterals name="INCLUDES" value="1"/>
<eLiterals name="EXTENDS" value="2"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EDataType" name="RelationshipTypeObject" instanceClassName="org.eclipse.emf.common.util.Enumerator">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="RelationshipType:Object"/>
<details key="baseType" value="RelationshipType"/>
</eAnnotations>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Resource" abstract="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Resource"/>
<details key="kind" value="empty"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="comments" upperBound="-1"
eType="#//Thread" eOpposite="#//Thread/author">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="comments"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="email" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="email"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="name"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="topics" upperBound="-1"
eType="#//Topic" eOpposite="#//Topic/resources">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="topics"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Thread">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Thread"/>
<details key="kind" value="elementOnly"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="items" upperBound="-1"
eType="#//ThreadItem" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="items"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="author" eType="#//Resource"
eOpposite="#//Resource/comments">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="author"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="postDate" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="postDate"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="subject" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="subject"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ThreadItem">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="ThreadItem"/>
<details key="kind" value="empty"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="author" eType="#//Resource">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="author"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="body" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="body"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="itemPostDate" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="itemPostDate"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Topic">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="name" value="Topic"/>
<details key="kind" value="elementOnly"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="comments" upperBound="-1"
eType="#//Thread" containment="true" resolveProxies="false">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="element"/>
<details key="name" value="comments"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="duration" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Float" defaultValueLiteral="0"
unsettable="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="duration"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="endDate" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="endDate"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="name"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="percentComplete" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Float" unsettable="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="percentComplete"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" unique="false"
eType="#//Priority" defaultValueLiteral="ZERO" unsettable="true">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="priority"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="resources" upperBound="-1"
eType="#//Resource" eOpposite="#//Resource/topics">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="resources"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="startDate" unique="false"
eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Date">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="startDate"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EReference" name="subtopics" upperBound="-1"
eType="#//Topic">
<eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
<details key="kind" value="attribute"/>
<details key="name" value="subtopics"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
</ecore:EPackage>
Nous verrons dans le prochain article un métamodèle de mindmap simplifié.
"Lire c’est recréer l’âme des choses, écrire c’est fabriquer un nid pour les oeufs de la mémoire."
Ernest Pépin
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Eclipse Modeling Framework (EMF) : revoyons les fondamentaux
L'OMG nous a promis MDA (Model Driven Architecture). Ce framework permet de spécifier des applications avec un haut niveau d'abstraction appelé PIM (Platform Independent Model).
Les technologies de transformation comme on en a vu un exemple dans notre article "Tutoriel de transformation de modèles avec ATL (ATLAS Transformation Language)" permettent de convertir un PIM en PSM (Platform Specific Model) c'est à dire en modèle propre au choix d'implémentation de code.
MDA inclu plusieurs normes :
- UML(Unified Modeling Language)
- MOF (Meta-Object Facility)
- XMI (XML Metadata Interchange)
- QVT (Query View Transform)
Tout cela est bien beau mais malheureusement cela reste à l'état de rêve, car la réalité est tout autre.
En effet, quand on regarde d'un peu plus près, on s'aperçoit que le MOF (métamétamodèle), l'infrastructure d'UML 2 entièrement spécifiée en OCL (Object Constraint Language) sont d'une extrême complexité.
D'autre part il n'existe aucun outil supportant entièrement la norme QVT, le langages de transformation de l'OMG. Il existe bien par exemple un plugin pour Eclipse QVTO (QVT Operational) mais encore rien ou presque pour QVTD (QVT Declarative) qui est le plus intéressant.
Bref, l'OMG a eu les yeux plus gros que le ventre et a été pris d'ambitions démesurées. Ce qui a eu pour résultats des normes trop complexes à réaliser et au final aucun outil réellement opérationnel.
EMF est au contraire, un cadre de pensée simple et pragmatique ayant pour objectifs la génération de code et les manipulations de modèles avec de nombreux retours d'expérience positifs.
EMF contribue largement aujourd'hui à l'Ingénierie Dirigée par les Modèles (IDM ou MDE Model Driven Engineering).
Contrairement à ce que pense de nombreux développeurs, les modèles ne servent pas seulement à la documentation, mais permettent de générer des applications.
Tous les programmes manipulent des modèles de données en UML, XML Schema, ...
Le projet "Eclipe Modeling Project" regroupe :
- EMF
- CDO (Connected Data Objects),
- Sirius qui vous permet de créer facilement votre propre environnement de modélisation graphique,
- GMF,
- Graphiti pour réaliser rapidement des éditeurs de diagrammes,
- Ecore Tools pour concevoir des modèles Ecore,
- OCL,
- Papyrus un environnement permettant d'éditer tous les types de modèles EMF et supporte tout particulièrment UML et SysML.
- XML Schema Definition (XSD)
- ATL (ATLAS Transformation Language)
- MMT (Model-to-Model Transformation) avec ATL, QVT Operational (Impératif) et QVTd (Declarative) à l'état embryonnaire
- ...
EMF est un métamétamodèle définissant les concepts d'objets, d'attributs, d'opérations, de relations entre les objets et des contraintes qui sont représentés par un diagramme de classe UML 2.
EMF peut définir :
- des interfaces Java
- des diagrammes de classe UML 2
- des XSD
A vous de choisir une de ces 3 représentaions et EMF vous donne les 2 autres ainsi que le code Java implémenté.
Tous les modèles sont donc des instances d'Ecore.
Ecore dispose d'un format de persistance XMI avec les fichiers ".ecore".
Il existe une alternative en utilisant une partie du MOF : EMOF Essential MOF avec les fichiers ".emof"
Toutes les méta classes (EObject, ...) ont une implémentation Java avec leurs attributs et méthodes (voir la javadoc Ecore).
"La prière est le plus grand rempart de l'âme."
Saint Augustin
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
Tutoriel Papyrus : vos diagrammes UML 2 comme à l'époque des manuscrits de l'antiquité !
Papyrus est un ensemble de plugins Eclipse faisant partie du projet Eclipse Modeling Project.
Il s'agit d'un nouvel environnement pour éditer tout type de modèle EMF (Eclipse Modeling Framework) et tout particulièrment UML 2 (Unified Modeling Language la norme de l'OMG).
La version supportée 2.4.1 est presque la dernière (2.5). Cela nous satisferait déjà, mais cerise sur le gateau, Papyus supporte SysML (System Modeling Language), ce qui est particulièrement intéressant pour les diagrammes d'exigences et les diagrammes paramétrés. MARTE (Modeling and Analysis of Real-Time and Embedded systems) est aussi intégré.
Papyrus offre des fonctions avancées pour créer des profils UML afin de définir des éditeurs DSL (Domain Specific Language).
Une manière d'installer Papyrus a été vue lors de notre article "Ingénierie Dirigée par les Modèles (IDM) : tutoriel ATL (ATLAS Transformation Language) pour voir la vraie vie".
- Ouvrez la perspective Papyrus.
- File - New - Papyrus Project - nommez le projet : PapyrusFamilies - Next - choisissez UML - Next - Cochez UML Diagram (vous pourriez sélectionner les 13 diagrammes UML 2) - Sélectionnez A UML model with primitive types (ModelWithBasicTypes) - Finish
- Dans la vue Project Explorer, double cliquez sur di (model.di), l'éditeur Papyrus Editor Core s'ouvre avec la palette, permettant de créer des packages, classes, attributs, relations, opérations, ...
- Pour créer un élément il suffit de faire un drag&drop.
- Le bandeau d'Eclipse contient un bouton proposant des options d'alignement.
- La vue Model Explorer permet avec les menus contextuels d'ajouter des nouveaux diagrammes.
- La partie Edges de la palette permet de créer tous les types de relations.
- Un clic droit sur une relation - Format -Line Style permet de choisir des styles de trait.
Le framework EMF permet d'importer des métamodèle Ecore (voir article "Ingénierie Dirigée par les Modèles (IDM) : tutoriel Eclipse Ecore, le corps à corps avec les méta modèles"), des métamodéles UML, ...
Pour créer des modèles UML instances de métamodèles UML, on utilisera donc les outils EMF.
Nous reviendrons sur les 13 diagrammes UML 2 avec Papyrus, sur la création de profils UML, nous aborderons SysML, l'utilisation de Papyrus avec ATL et QVTO (Query View Transform Operational le langage de transformation de modèles normalisé OMG et concurrent d'ATL) et en déssert un comparatif entre ATL et QVTO mais cela est une autre histoire.
"Les gagnants ne lâchent jamais et les lâcheurs ne gagnent jamais."
Vince Lombardi
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/