I. Introduction▲
I-A. Spécification▲
Un modèle EMF d'un graphe est édité grâce à un éditeur graphique.
I-B. Lancement de la plateforme Eclipse▲
Double cliquer : ou le raccourci vers cet exécutable si vous l'avez créé dans le répertoire destiné à recevoir les « workspaces ». La plate-forme « Eclipse » est lancée :
On choisit le workspace :
« E:\FORMATION_Eclipse\modeling-indigo-SR1\EMT\WS\EditionGraphiqueModeleEcore » :
Cliquer « OK ».
Fermer la fenêtre « Welcome ».
I-C. Passage en perspective « Ecore »▲
Faire :
Sélectionner la perspective « Ecore » :
Faire « OK », on obtient :
II. Édition du modèle EMF▲
II-A. Création du projet▲
Faire :
Nommer le projet :
Cliquer « Finish », le projet est créé, si on sélectionne le projet ses « properties » sont affichées :
II-B. Ouverture de l'éditeur▲
Faire :
Initialiser « Domain file name » :
Cliquer « Finish ».
L'éditeur du modèle EMF apparaît, on ferme quelques vues, on obtient :
Nous allons créer un modèle de graphe très simple.
Remarque : Le modèle « ecore » est semblable au diagramme de classes UML.
II-C. Création des « EClass »▲
Sélectionner « EClass » dans la Palette (Objects), désigner l'emplacement dans la zone d'édition :
Éditer les propriétés de la « EClass0 » :
Faire une sauvegarde.
Créer de même les « Eclass »: « Noeud » et « Arc ».
II-D. Création des « EAttribute » des « EClass »▲
Sélectionner « EAttribute » dans la Palette (Objects), et désigner la deuxième case de « Noeud », on obtient :
Éditer les « Properties » de cet attribut (en particulier pour « EType » utiliser le bouton « ... » pour sélectionner « EString ») :
on obtient :
procéder de même avec « Arc » :
II-E. Mise en place des références▲
II-E-1. « Containment References »▲
Un graphe est constitué d'une liste de nœuds et d'une liste d'arcs. La disparition du graphe entraîne la disparition des nœuds et des arcs qui le constituent d'où le type de référence.
Sélectionner « EReference » dans la Palette (Connections), positionner le curseur sur « Graphe »,
enfoncer le bouton gauche, garder le bouton enfoncé, amener le curseur sur « Nœud » puis le relâcher,
On obtient :
Éditer les « properties » de la référence :
Après déplacement des informations associées à la référence on obtient :
Créer de même une référence vers les Arcs :
II-E-2. « One way reference »▲
Un arc fait référence à un nœud origine et un nœud extrémité. La destruction de l'arc n'entraîne pas la destruction des noeuds associés. Un nœud n'est pas un composant d'un arc, d'où le type de référence. Sélectionner « EReference » dans la Palette (Connections), et désigner «Arc» puis « Noeud », on obtient :
Sélectionner l'arc, éditer ses « properties » :
On obtient :
Créer de même une référence « extremite ». Au final nous obtenons le modèle :
Faire une sauvegarde.
II-F. Validation du modèle EMF▲
Sélectionner « Graphe.ecore » dans le « Project Explorer » et dans l'éditeur utiliser le menu contextuel pour valider le modèle :
on obtient :
III. Création projet EMF▲
Faire :
Sélectionner « EMF Project » :
Cliquer « Next > ».
Nommer le projet :
Cliquer « Next > » et sélectionner « Ecore model ».
Cliquer « Next > ».
Dans « New EMF Project - Ecore Import » utiliser « Browse Workspace... » pour importer le modèle :
Cliquer « OK » on obtient :
Cliquer « Load » puis « Next > ».
Ne pas modifier « New EMF Project - Package Selection ».
Cliquer « Finish ». Le projet « exemple.graphe.emf » est créé. Le répertoire « src » est vide. Le répertoire « model » est mis à jour.
Sélectionner dans le projet « exemple.graphe.emf » le fichier « model / Graphe.genmodel » (Double-clic).
Dans l'éditeur ouvrir « Graphe » et sélectionner .
Dans les « properties » initialiser « Base Package » avec « exemple.graphe ». Cliquer dans la vue « Graphe.genmodel », faire une sauvegarde.
IV. Génération du code associé au modèle▲
Faire une sauvegarde. Dans le menu contextuel de l'éditeur de « Graphe.genmodel » sélectionner « Generate Model Code ». Vérifier que le modèle est correct :
Le code est généré dans le projet « exemple.graphe.emf » :
V. Utilisation du code généré▲
Nous allons utiliser le code généré pour créer une instance de graphe très simple.
V-A. Mise en place du test▲
Dans « exemple.graphe.emf > src » on crée le « package » « test ».
Nommer le « package » :
Cliquer « Finish ».
Dans ce « package » créer la classe Test :
Définie par :
Cliquer « Finish ».
La classe est créée :
Créer, dans le même « package », la classe « MonGraphe » définie par :
Cliquer « Finish », la classe est créée :
V-B. Édition des classes « Test » et « MonGraphe »▲
Éditer la classe « Test » :
package
test;
public
class
Test {
/**
*
@param
args
*/
public
static
void
main
(
String[] args) {
System.out.println
(
"TEST CODE GENERE"
);
MonGraphe monGraphe =
new
MonGraphe
(
);
monGraphe.init
(
);
monGraphe.print
(
);
}
}
Éditer la classe « MonGraphe » :
package
test;
import
java.util.Iterator;
import
org.eclipse.emf.common.util.EList;
import
exemple.graphe.graphe.Arc;
import
exemple.graphe.graphe.Graphe;
import
exemple.graphe.graphe.Noeud;
import
exemple.graphe.graphe.impl.GrapheFactoryImpl;
public
class
MonGraphe {
private
Graphe graphe;
public
void
init
(
){
GrapheFactoryImpl factory =
new
GrapheFactoryImpl
(
);
graphe =
factory.createGraphe
(
);
Noeud n1 =
factory.createNoeud
(
);
n1.setNom
(
"N1"
);
graphe.getListeNoeuds
(
).add
(
n1);
Noeud n2 =
factory.createNoeud
(
);
n2.setNom
(
"N2"
);
graphe.getListeNoeuds
(
).add
(
n2);
Arc arc1 =
factory.createArc
(
);
arc1.setNom
(
"ARC1"
);
arc1.setOrigine
(
n1);
arc1.setExtremite
(
n2);
graphe.getListeArcs
(
).add
(
arc1);
}
public
void
print
(
){
EList<
Noeud>
listeNoeuds =
graphe.getListeNoeuds
(
);
Iterator<
Noeud>
in =
listeNoeuds.iterator
(
);
System.out.println
(
"Liste des noeuds:"
);
while
(
in.hasNext
(
)){
Noeud n =
in.next
(
);
System.out.print
(
n.getNom
(
)+
" "
);
}
EList<
Arc>
listeArcs =
graphe.getListeArcs
(
);
Iterator<
Arc>
ia =
listeArcs.iterator
(
);
System.out.println
(
"
\n
Liste des arcs:"
);
while
(
ia.hasNext
(
)){
Arc a =
ia.next
(
);
System.out.print
(
a.getNom
(
)+
"("
+
a.getOrigine
(
).getNom
(
)+
"->"
+
a.getExtremite
(
).getNom
(
)+
") "
);
}
}
}
Faire une sauvegarde générale.
V-C. Lancement du test▲
Faire :
La classe « Main » s'exécute. La structure du graphe s'affiche dans la vue « console » :
VI. Conclusions▲
Un modèle EMF a été édité. Le code associé à ce modèle a été généré puis testé. Le code généré répond aux bons critères de la programmation objet. On peut penser que ce code est de meilleure qualité que le code développé dans le document « Programmation d'un modèle de graphe avec l'environnement de développement intégré Eclipse ».
VII. Licence▲
La licence « Creative Commons » s'applique à ce document, veuillez-vous référer à ce site pour de plus amples informations : http://creativecommons.org/licenses/by-nc-nd/2.0/fr/.