Bonjour à tous,
Tout d'abord, j'espère ne pas avoir fait hurler avec ce titre, mais je ne vois pas comment l'exprimer :-)
J'essaie de coder une classe représentant le concept de graphe, à titre d'exercice.
J'ai une classe abstraite Graph comprenant des méthodes telles que vertices() renvoyant l'ensemble des sommets, edges() renvoyant les arcs/arêtes, etc. J'ai aussi des classes Vertex et Edge.
J'ai deux sous-classes abstraites DGraph et UGraph représentant respectivement les graphes dirigés et non-dirigés qui ne contiennent chacune
qu'une méthode
J'ai enfin des sous-classes concrètes de ces deux-là, avec lesquelles j'essaie diverses implémentation de la structure de graphe: liste d'adjacence, TreeMap, etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public abstract class DGraph extends Graph { public boolean isDirected () { return true; // pour DGraph, ou false pour UGraph } }
Ces classes concrètes comportent des constructeurs créant un nouveau graphe vide ainsi que des méthodes permettant d'ajouter ou détruire un sommet, d'en joindre en ajoutant une arête, etc.
Le problème est que je souhaite une méthode permettant de créer un graphe à partir de sa description dans un fichier. À la lecture de ce fichier, on peut construire le graphe en ajoutant des sommets et des arêtes au moyen de méthodes qui figurent dans les classes concrètes, ont la même signature, mais sont implémentées différemment:
J'aimerais donc avoir un constructeur à partir d'un fichier du style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public Vertex add (String id) { } public boolean add (Vertex v) { } public boolean remove (String id) { } public boolean remove (Vertex v) { } public Edge join (Vertex v0, Vertex v1) { } public boolean remove (Edge e) { }
mais sans avoir à le re-coder dans chaque sous-classe, puisqu'il fait appel à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public TreeMapDGraph (String fileName, int fileType) { // fileType représente le choix d'un format de fichier, texte, xml... }
des méthodes partagées.
Est-ce qu'il serait possible de la coder de façon unique dans la classe abstraite DGraph ou UGraph ? Je ne vois pas comment, car elle devrait sans doute avoir comme signature
alors qu'au sein de cette méthode, il faudrait commencer par créer un graphe vide dépendant du sous-type, avant de le peupler.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public DGraph (String fileName, int fileType) { }
Je m'étais demandé si une solution ne serait pas d'avoir une méthode statique
avec le graphe (vide) en argument:
Merci pour tout avis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public static void fillFromFile(DGraph G, String fileName, int fileType) { }
Cordialement,
G.
Partager