[CULS 10/10][AIDE] Exercice PATRON COMPOSITE JAVA
Supprimé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 :
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 ) :
Tiens du design pattern, ça me rappelle mes études
Si ça peut te rassurer lop , c’est un truc que tu n’utiliseras plus jamais dans la vie active
Le 29 septembre 2021 à 13:46:30 :
Tiens du design pattern, ça me rappelle mes étudesSi ça peut te rassurer lop , c’est un truc que tu n’utiliseras plus jamais dans la vie active
Ça me rassure parce que l'usage du singleton ici me pose vraiment problème et j'aurai plus jamais affaire à des design patterns
[13:59:15] <SangreLatino>
Uppercut
Je up pour la ref
Le 29 septembre 2021 à 14:06:05 :
[13:59:15] <SangreLatino>
UppercutJe up pour la ref
Merci kheyou
J'espère que vous cherchez
Et merci si c'est le cas
Le 29 septembre 2021 à 14:31:52 :
Je peux pas t’aider mais je te pour les culs
C'est très gentil khey, merci à toi
Données du topic
- Auteur
- SangreLatino
- Date de création
- 29 septembre 2021 à 13:29:31
- Date de suppression
- 29 septembre 2021 à 17:53:57
- Supprimé par
- Auteur
- Nb. messages archivés
- 83
- Nb. messages JVC
- 83