SangreLatino
2021-09-29 13:29:31
Salut les kheys,
J'ai des problèmes de compréhension évidents sur cet exercice sur le patron Composite
Des Culs sont disponibles en dessous pour vous récompenser, je vous remercie pour votre aide
Le but étant de faire le code fonctionnel du diagramme ci-dessous :
Diagramme :
https://image.noelshack.com/fichiers/2021/39/2/1632862737-u.png
Par rapport au diagramme, déjà j'ai des questions :
- Pourquoi il y a un constructeur privé de NoeudBinaire ?
- À quoi sert evaluation(int, int) : int dans le programme ?
Et j'ai un problème dans mon programme : en gros mon Operation.getInstance(String) ne varie pas dans mes tests et reste à add et du coup je me retrouve avec ça... 18 au lieu de 2 pour la dernière opération.
NB : le tableau associatif de Operation.java est privé mais je l'ai passé en public pour pouvoir effectuer mes tests
Donc le problème doit sans doute venir de ma classe Operation (et de getInstance(String) ?) mais je sais pas comment le régler
Le putain de Singleton pose problème à coup sur
Output du Main.java
NoeudValeur = 4
Résultat 5+3 : 8
Résultat (10+2)/6 : 18
Main.java (mes tests)
package patroncompositeexercice;
public class Main {
public static void main(String[] args) {
// Test NoeudValeur
Noeud n = new NoeudValeur(4);
System.out.println("NoeudValeur = " + n.evaluation());
// Test NoeudBinaire (5+3)
Noeud expression1 = new NoeudBinaire(new NoeudValeur(3), new NoeudValeur(5), Operation.getInstance("add"));
System.out.println("Résultat 5+3 : " + expression1.evaluation());
// Test NoeudBinaire (10+2)/6
Noeud expression2
= new NoeudBinaire(
new NoeudBinaire(
new NoeudValeur(10),
new NoeudValeur(2),
Operation.getInstance("add")
),
new NoeudValeur(6),
Operation.getInstance("diff")
);
System.out.println("Résultat (10+2)/6 : " + expression2.evaluation());
}
}
NoeudBinaire.java
package patroncompositeexercice;
import java.util.Map;
import java.util.Map.Entry;
public class NoeudBinaire implements Noeud {
private Noeud n1;
private Noeud n2;
private Operation monOP;
public NoeudBinaire(Noeud n1, Noeud n2, Operation op) {
this.n1 = n1;
this.n2 = n2;
this.monOP = op;
}
private NoeudBinaire() {
}
@Override
public int evaluation() {
Integer resultat = null;
switch (getKey(Operation.mesOP, monOP)) {
case "add":
resultat = n1.evaluation() + n2.evaluation();
break;
case "minus":
resultat = n1.evaluation() - n2.evaluation();
break;
case "mult":
resultat = n1.evaluation() * n2.evaluation();
break;
case "diff":
resultat = n1.evaluation() / n2.evaluation();
break;
default:
break;
}
return resultat;
}
private <K, V> K getKey(Map<K, V> map, V value) {
for (Entry<K, V> entry : map.entrySet()) {
if (entry.getValue().equals(value)) {
return entry.getKey();
}
}
return null;
}
}
Operation.java
package patroncompositeexercice;
import java.util.HashMap;
import java.util.Map;
public class Operation {
private static Operation instance;
private String nomOP;
public static Map<String, Operation> mesOP = new HashMap<>();
public int evaluation(int i1, int i2) {
Integer resultat = null;
switch (nomOP) {
case "+":
resultat = i1 + i2;
break;
case "-":
resultat = i1 - i2;
break;
case "*":
resultat = i1 * i2;
break;
case "/":
resultat = i1 / i2;
break;
default:
break;
}
return resultat;
}
public static Operation getInstance(String nomOP) {
if (instance == null) {
instance = new Operation(nomOP);
ajouterOperation(nomOP);
}
return instance;
}
private Operation(String nomOP) {
this.nomOP = nomOP;
}
private static void ajouterOperation(String nomOP) {
mesOP.put(nomOP, getInstance(nomOP));
}
}
NoeudValeur.java
package patroncompositeexercice;
public class NoeudValeur implements Noeud {
private int valeur;
public NoeudValeur(int v) {
this.valeur = v;
}
@Override
public int evaluation() {
return this.valeur;
}
}
Les Culs (si vous voulez le topic en échange, c'est possible ) :
https://image.noelshack.com/fichiers/2021/39/3/1632914848-1602108343-1.jpeghttps://image.noelshack.com/fichiers/2021/39/3/1632914855-1603585766-bikini.jpghttps://image.noelshack.com/fichiers/2021/39/3/1632914861-1603585772-cul1.jpeghttps://image.noelshack.com/fichiers/2021/39/3/1632914870-1603585778-cul2.jpeghttps://image.noelshack.com/fichiers/2021/39/3/1632914877-1602108375-fetichistes.jpghttps://image.noelshack.com/fichiers/2021/39/3/1632914943-1602108362-3.jpg