Bonjour tristan
Merci pour ton aide
Voir ci dessous
[quote=tristan_m;6968432]Bonjour,
Merci pour les explications.
Si j'ai bien compris :
- Au démarrage de votre application, vous récupérez dans la base de données toutes les correspondances 'réponse' -> 'question suivante'.
- A partir de ces correspondances, vous créez un arbre
- Ensuite, votre application se déplace dans l'arbre en fonction des réponses données.
Oui c'est bien cela
Mais je ne saisis pas où il y a besoin de recherche et d'échange de noeud ou branche.
Pour moi, l'arbre est créé une fois pour toute, pas besoin d'échanger des noeuds.
En fait l,admin doit d'abord créer l'arbre, le tester, et pouvoir le modifier comme bon lui semble et entres autres échanger deux noeuds, y insérer une nouvelle aborescence, supprimer , ajouter un noeud, recherche un noeur.
Donc des opérations qui vont se faire au préalable par le biais d'une interface en asp.net.
Concernant la recherche, chaque noeud contient une référence vers chacun de ses fils, il n'y a pas de recherche à faire normalement.
Comme peut il trouver sans recherche récursive?
Je vais quand même essayer de répondre à vos questions concernant le design pattern composite.
L'arborescence est principalement gérée par la classe Composite. En particulier parce qu'elle gère la liste des noeuds fils.
Pour insérer une branche fille, il suffit donc de rajouter un objet de type Composite dans cette liste.
Pour insérer un noeud fils, il faut ajouter un objet de type feuille dans la liste.
L'échange de noeud se fait également via cette liste.
Voici comment TrouverNoeud doit être implémenté :
- Votre fonction TrouverNoeud(nomDuNoeud) doit en premier lieu être déclarée dans la classe Component.
- Dans la classe feuille, cette fonction doit juste vérifier si 'nomDuNoeud' correspond au nom de l'objet feuille et retourner 'this' si c'est le cas.
- Dans la classe composite, cette fonction doit faire le même traitement que la classe feuille, sauf qu'en plus, la fonction doit appeler pour chacun de ses fils :
unFils.TrouverNoeud(nomDuNoeud)
Si un des fils retourne un noeud, la fonction doit retourner ce noeud.
Merci
Évidemment trouver un noeud est primordial pour effectuer les autres activités ci haut mentionnées ( interchanger 2 noeuds , etc.. )
J'ai fait un code pour trouverNoeud mais je pense qu'il y a quelque chose pas dans ma logique car il va toujours le trouver même si c'est pas dans la bonne arbo; c'est à dire ex :
En fait voici comment j'ai fait ... finalement ex:
si par exemple j'appelle
1 2 3 4 5 6
|
// le add est une méthode crée par moi
// et qui fait simplement uneListe.Add(e);
uneArboA.add(sousArboA) ;
Composant unC = uneArboA.trouverNoeud();
Console.WriteLine("lenom est : " + unC.Nom); |
Et que j'appelle ensuite
1 2 3
| uneArboB.add(sousArboB) ;
Composant und = uneArboB.trouverNoeud(sousArboB);
Console.WriteLine("lenom est : " + und.Nom); |
Alors il le trouve mais il le trouve aussi si je fais
Composant und= uneArboB.trouverNoeud(sousArboA);
C'est illogique qu'il le trouvre puisque sousArboA est rattaché
à uneArboA..
======================================
Voici comment j'ai écrit la méthode trouveNoeud:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
//Dans la classe Composant:
public abstract Composant trouverNoeud(Composant e);
//Dans la classe Question la feuille
public override Composant trouverNoeud(Composant e)
{
return e;
}
Dans la classe ArboQuestion // composite
public override Composant trouverNoeud(Composant e)
{
// LISTE qui est dans la Classe ArboQuestion
foreach (Composant f in uneListe)
{
if (f.getNom() == e.getNom())
return f;
return f.trouverNoeud(e); // récursivité
}
return null;
} |
==================================
Qu'est ce qui cloche (sans doute une erreur de débutant)?
Merci d'avance pour l'aide
Partager