Programmation d'un modèle de graphe avec l'environnement de développement intégré Eclipse

Image non disponible

L'environnement de développement « Eclipse » est utilisé pour définir un modèle de graphe. Une instance de ce modèle est créée puis testée. Ce document donne quelques rudiments de l'utilisation de l'IDE. Pour plus de précisions, le lecteur se reportera à la littérature abondante sur le sujet.

Pour réagir à cet article, un espace de dialogue vous est proposé sur le forum Commentez Donner une note à l'article (5)

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

I-A. Spécification

À partir d'un modèle de graphe, nous allons créer une instance de graphe.

Un graphe est constitué d'un ensemble de Nœuds et d'Arcs. Chaque Arc est constitué d'un Nœud Origine et d'un Nœud Extrémité. Un nom est associé aux Nœuds et aux Arcs.

I-B. Lancement de la plate-forme Eclipse

Double-cliquer : Image non disponible 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

On sélectionne le « workspace » :

Image non disponible

Cliquer « OK », le workspace est créé :

Image non disponible

La plateforme « Eclipse » s'affiche, fermer la fenêtre « Welcome » et quelques vues que nous n'utiliserons pas : Task List, Outline, Problems, Javadoc, Declaration.

On obtient un « Workbench » simplifié :

Image non disponible

I-C. Mise en place du projet

Sous « Eclipse » tout développement se fait sous un projet. Pour créer un « Java Project » faire :

Image non disponible

Dans la fenêtre « New Java Project » - Create a Java Project », nommer le projet :

Image non disponible

Cliquer « Finish ».

Le projet est créé :

Image non disponible

II. L'application

II-A. Création du modèle

Pour recevoir le modèle, on crée le « package » « modeleGraphe ». Faire un clic droit sur « src » et dans le menu contextuel désigner « New > Package »

Image non disponible

Dans « New Java Package - Java Package » nommer le « package » :

Image non disponible

Cliquer « Finish ». Le « package » est créé :

Image non disponible

Nous allons créer la classe « Noeud ». Faire un clic droit sur le « package » « modeleGraphe » et dans le menu contextuel désigner « New > Class »

Image non disponible

Dans la fenêtre « New Java Class - Java Class » nommer la classe, cliquer « Finish ».

Image non disponible

La classe est créée :

Image non disponible

On crée de même les classes « Arc » et « Graphe » :

Image non disponible

On édite ces classes :

La classe « Noeud » :

 
Sélectionnez
package modeleGraphe;

import java.util.LinkedList;
import java.util.ListIterator;

publicclass Noeud {
   String nom;
   public String getNom() {
    returnnom;
   }

   Graphe graphe;

   public Noeud (String nom, Graphe graphe){
    this.nom = nom;
    this.graphe = graphe;
    graphe.listeNoeuds.add(this);
   }

   public String toString(){
    returnnew String("   noeud: "+ this.getNom());
   }

   public Object[] getChildren( Noeud noeud){
    LinkedList<Noeud> children = new LinkedList<Noeud> ();
    ListIterator<Arc> liArc = graphe.listeArcs.listIterator();
    while (liArc.hasNext()){
       Arc arcCourant = liArc.next();
       if (arcCourant.getNoeudOrigine().getNom().equals(noeud.getNom())){
        children.add(arcCourant.getNoeudExtremite());
       }
    }
    return children.toArray();
   }

   public Boolean hasChildren(){
    return (getChildren(this).length != 0 );
   }
}

La classe « Arc » :

 
Sélectionnez
package modeleGraphe;

import java.util.ListIterator;

publicclass Arc {
   Noeud noeudOrigine;
   public Noeud getNoeudOrigine() {
    returnnoeudOrigine;
   }

   Noeud noeudExtremite;
   public Noeud getNoeudExtremite() {
    returnnoeudExtremite;
   }

   public Arc(String nomNoeudOrigine, String nomNoeudExtremite, Graphe graphe){

    // recherchenoeudorigine par son nom
    ListIterator<Noeud> liNoeuds = graphe.listeNoeuds.listIterator();
    Boolean trouveOrigine = false;
    while (liNoeuds.hasNext()&&!trouveOrigine) {
       Noeud noeudCourant = liNoeuds.next();
       if (nomNoeudOrigine.equals(noeudCourant.getNom())){
        noeudOrigine = noeudCourant;
        trouveOrigine = true;
       }
    }
    // recherchenoeudextremite par son nom
    liNoeuds = graphe.listeNoeuds.listIterator();
    Boolean trouveExtremite = false;
    while (liNoeuds.hasNext()&&!trouveExtremite) {
       Noeud noeudCourant = liNoeuds.next();
       if (nomNoeudExtremite.equals(noeudCourant.getNom())){
        noeudExtremite = noeudCourant;
        trouveExtremite = true;
       }        
    }
    if (trouveOrigine && trouveExtremite) {
       graphe.listeArcs.add(this);
    } else {
       // message d'erreur
       StringBuffer erreur = new StringBuffer("Erreur arc: ("+nomNoeudOrigine
           +" -> "+nomNoeudExtremite+")\n   ");
       if (!trouveOrigine ) erreur.append(nomNoeudOrigine + "? ");
       if (!trouveExtremite ) erreur.append(nomNoeudExtremite + "? ");
       System.out.println(erreur);
    }

   }

   public String toString(){
    returnnew String("   arc: ( "
        + this.getNoeudOrigine().getNom()
        + " -> "
        + this.getNoeudExtremite().getNom()
        + " )"
    );
   }

}

La classe « Graphe » :

 
Sélectionnez
package modeleGraphe;

import java.util.LinkedList;
import java.util.ListIterator;

publicclass Graphe {
   LinkedList<Noeud> listeNoeuds = new LinkedList<Noeud> ();
   LinkedList<Arc> listeArcs = new LinkedList<Arc> ();

   public Object[] getNoeuds(){
    returnlisteNoeuds.toArray();
   }

   public Object[] getArcs(){
    returnlisteArcs.toArray();
   }

   public String toString(){
    StringBuffer texte = new StringBuffer("*** graphe ***\n");
    ListIterator<Noeud> liNoeud = this.listeNoeuds.listIterator();
    while (liNoeud.hasNext()){
       Noeud noeudCourant = liNoeud.next();
       texte.append(noeudCourant.toString()+"\n" );
    }
    ListIterator<Arc> liArc = this.listeArcs.listIterator();
    while (liArc.hasNext()){
       Arc arcCourant = liArc.next();
       texte.append(arcCourant.toString()+"\n" );
    }
    return texte.toString();
   }
}

Faire une sauvegarde générale : Image non disponible.

On obtient dans le « package explorer » :

Image non disponible

II-A-1. Aide fournie par l'éditeur Java

Lors de l'édition en plaçant le curseur sur la méthode «toString() de la classe « Graphe » on obtient des renseignements sur le rôle de la méthode :

Image non disponible

Dans la classe « Noeud » méthode « getChildren(...). Lors de la saisie de la dernière ligne de la méthode, on tape « return child » puis « CTRL » + « Space » l'éditeur fait un ensemble de propositions :

Image non disponible

Dans la liste ci-dessus, on choisit la variable locale « children » on obtient :

Image non disponible

À la suite de « children » on tape « . » on obtient la liste des méthodes applicables à l'objet « children » ainsi que la documentation associée à la méthode sélectionnée :

Image non disponible

Faire un double-clic pour saisir la méthode sélectionnée.

Si le curseur alphanumérique désigne une méthode, on obtient des renseignements sur cette méthode :

Image non disponible

Dans le cas où, on référence une méthode que nous avons programmée, on obtient le nom complet de la méthode « package.classe.méthode » :

Image non disponible

Si la méthode est commentée par exemple :

 
Sélectionnez
    /**
    * rend lenomdunoeud.
    * @returnlenomdunoeud
    */
   public String getNom() {
    returnnom;
   }    

le commentaire est visualisé :

Image non disponible

II-B. Création d'un graphe

Un graphe est créé à partir du modèle précédemment défini.

On créé sous « src » un « package » « monGraphe » qui contient la classe « MonGraphe ». On édite la classe MonGraphe :

 
Sélectionnez
package monGraphe;

import modeleGraphe.Arc;
import modeleGraphe.Graphe;
import modeleGraphe.Noeud;

publicclass MonGraphe extends Graphe {

   public MonGraphe(){
    new Noeud("start", this);
    new Noeud("n1", this);
    new Noeud("n2", this);
    new Noeud("end",this);
    new Arc("start", "n1", this);
    new Arc("start", "n2", this);
    new Arc("n1", "end", this);
    new Arc("n2", "end", this);
    new Arc("end", "start", this);
   }

}

Faire une sauvegarde. On obtient :

Image non disponible

II-C. Test du graphe

On crée sous « src » le package « testMonGraphe » pour recevoir la classe « TestMonGraphe ». Lors de la création de la classe « TestMonGraphe » dans la fenêtre « New Java Class  - Java Class » cocher « public static void main(...) »

On crée une instance de la classe « MonGraphe ».

On édite la classe :

 
Sélectionnez
package testMonGraphe;

import monGraphe.MonGraphe;

publicclass TestMonGraphe {

   /**
    * @param args
    */
   publicstaticvoid main(String[] args) {
    MonGraphe monGraphe = new MonGraphe();
    System.out.println (monGraphe.toString());
   }

}

Faire une sauvegarde. On obtient :

Image non disponible

III. Test du code

Faire :

Image non disponible

Dans « Run Configuration Create, manage, and run configurations », double-cliquer « Java Application », nommer la configuration. Cliquer « Apply ». On obtient :

Image non disponible

Cliquer « Run » dans « Run configuration - Create, manage, and run configurations ».

La vue « Console » apparaît et affiche le graphe :

Image non disponible

IV. Conclusions

À travers cette simple application, nous avons vu quelques rudiments de l'usage de l'« IDE Eclipse » qui nous seront nécessaires dans les exemples que nous allons développer.

Il existe bien d'autres fonctionnalités ! Le lecteur peut se reporter au « Help » :

(Commande: « Help > Help Contents »)

Image non disponible

Globalement l'IDE étant intuitif, la pratique vous permettra de progresser rapidement.

Le modèle créé (Graphe, Nœud, Arc) est une solution que nous proposons, sa qualité dépend de notre maîtrise de la programmation objet !

V. 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/.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Serge Bachmann. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.