Bonjour,
j'étudie actuellement les patrons de conception et j'essaie d'implémenter les exemples du cours en java pour mieux comprendre
par exemple, nous avons étudié le patron composite/composant sur les arbres synthétiques abstraits
et je n'obtient pas le résultat attendu
par exemple, (2+4)/3+8 devrait me donner 10 et moi j'obtiens 17
le Noeud N11 ne se calcule pas (résultat = 0 au lieu de 2)
le problème se situe probablement dans la classe Operation car nous n'avons pas vu le code en cours
jtout ce que l'on avait, c'est le diagramme de classe qui nous indiquait :
- 2 attributs :
private nomOP : String
private mesOp : Map<String,Operation>
3 méthodes :
private Operation()
public getInstance(String) : Operation
public evaluation(int,int) : int
ce que j'ai compris (mais je me trompe peut-être) c'est que Map permets de définir la liste des opérations essentielles (addition, soustraction, multiplication et division)
d'avance merci pour votre aide
interface Noeud
classe NoeudValeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface Noeud { public int evaluation(); }
classe NoeudBinaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class NoeudValeur implements Noeud{ private int valeur; public NoeudValeur(int valeur){ this.valeur=valeur; } @Override public int evaluation() { return this.valeur; } public String toString(){ return ""+this.valeur; } }
classe Operation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class NoeudBinaire implements Noeud { public Noeud n1; public Noeud n2; public Operation monOp; private NoeudBinaire(){} public NoeudBinaire(Noeud n1, Noeud n2, Operation o){ this.n1=n1; this.n2=n2; this.monOp=o; } @Override public int evaluation() { int v1 = n1.evaluation(); int v2 = n2.evaluation(); return monOp.evaluation(v1, v2); } @Override public String toString() { return ""+this.evaluation(); } }
code application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class Operation { private static String nomOP; private static Map<String,Operation> mesOP = new HashMap<String,Operation>(); //on créé une Map qui contient les opérations élémentaires private Operation(){ mesOP.put("opAdd", this); mesOP.put("opSou", this); mesOP.put("opMul", this); mesOP.put("opDiv", this); } //constructeur public qui permet de créé un objet Operation //appel à la methode getInstance(String) qui créé l'objet à l'aide //du constructeur privé public Operation(String operation){ this.getInstance(operation); this.nomOP=operation; } //on définit les opérations élémentaires public int evaluation(int v1, int v2){ if(nomOP=="addition") return (v1+v2); if(nomOP=="soustraction") return (v1-v2); if(nomOP=="division") return (v1/v2); if(nomOP=="multiplication") return (v1*v2); return 0; } //retourne une opération public static Operation getInstance(String operation){ return new Operation(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 NoeudValeur N1111 = new NoeudValeur(2); NoeudValeur N1112 = new NoeudValeur(4); Operation opAdd1 = new Operation("addition"); NoeudBinaire N111 = new NoeudBinaire(N1111,N1112,opAdd1); NoeudValeur N112 = new NoeudValeur(3); Operation opDiv1 = new Operation("division"); NoeudBinaire N11 = new NoeudBinaire(N111,N112,opDiv1); NoeudValeur N12 = new NoeudValeur(8); Operation opAdd2 = new Operation("addition"); NoeudBinaire N1 = new NoeudBinaire(N11,N12,opAdd2);
Partager