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 :
![Image non disponible](./images/10000000000001C600000126AC1F3174.png)
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 »▲
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 :
![Image non disponible](./images/image02.png)
Éditer les propriétés de la « EClass0 » :
Faire une sauvegarde.
Créer de même les « Eclass »: « Noeud » et « Arc ».
![Image non disponible](./images/image03.png)
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 :
![Image non disponible](./images/10000000000000710000003E143F8042.png)
Éditer les « Properties » de cet attribut (en particulier pour « EType » utiliser le bouton « ... » pour sélectionner « EString ») :
on obtient :
![Image non disponible](./images/10000000000000760000004298E6A2BC.png)
procéder de même avec « Arc » :
![Image non disponible](./images/10000000000000790000003F295E426D.png)
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 :
![Image non disponible](./images/10000000000000E2000000AFF1E7AEE0.png)
Éditer les « properties » de la référence :
Après déplacement des informations associées à la référence on obtient :
![Image non disponible](./images/10000000000000CE000000B315C17687.png)
Créer de même une référence vers les Arcs :
![Image non disponible](./images/1000000000000133000000B26967FBDE.png)
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 :
![Image non disponible](./images/100000000000016D0000004E80D35515.png)
Sélectionner l'arc, éditer ses « properties » :
On obtient :
![Image non disponible](./images/10000000000001670000004BA21A737E.png)
Créer de même une référence « extremite ». Au final nous obtenons le modèle :
![Image non disponible](./images/100000000000016D000000A7F0A1FCA0.png)
Faire une sauvegarde.
II-F. Validation du modèle EMF▲
III. Création projet EMF▲
Faire :
![Image non disponible](./images/10000000000002150000006E0A56952D.png)
Sélectionner « EMF Project » :
Cliquer « Next > ».
Nommer le projet :
Cliquer « Next > » et sélectionner « Ecore model ».
![Image non disponible](./images/10000000000001FA0000012CBFD84FBE.png)
Cliquer « Next > ».
Dans « New EMF Project - Ecore Import » utiliser « Browse Workspace... » pour importer le modèle :
![Image non disponible](./images/1000000000000158000000C576FA723D.png)
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 » :
![Image non disponible](./images/10000000000001B400000117B11DE174.png)
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▲
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/.