Le 29 septembre 2021 à 17:30:17 :
Le 29 septembre 2021 à 17:28:02 :
Le 29 septembre 2021 à 17:24:18 :
<code> public class NoeudBinaire implements Noeud {[...]
@Override
public int evaluation() {
return this.monOP.evaluation(n1.evaluation(), n2.evaluation());
}</code>Ce sera déjà mieux comme ça
Merci clé
Me reste à gérer la StackOVerflow error et je pense que ça va fonctionner
https://image.noelshack.com/fichiers/2021/39/3/1632929279-capture-d-ecran-du-2021-09-29-17-27-49.png public static Operation getInstance(String nomOP) {
if (!mesOP.containsKey(nomOP)) {
final Operation newOP = new Operation(nomOP);
mesOP.put(nomOP, newOP);
}
return mesOP.get(nomOP);
}
J'ai réussi à fix la StackOverflow avant la réponse
Petit screen final !!! Merci beaucoup khey pour avoir pris de temps libre et pour tes explications !
Le 29 septembre 2021 à 17:24:18 :
<code> public class NoeudBinaire implements Noeud {[...]
@Override
public int evaluation() {
return this.monOP.evaluation(n1.evaluation(), n2.evaluation());
}</code>Ce sera déjà mieux comme ça
Merci clé
Me reste à gérer la StackOVerflow error et je pense que ça va fonctionner
Le 29 septembre 2021 à 17:16:54 :
Le 29 septembre 2021 à 17:01:13 :
Le 29 septembre 2021 à 16:55:48 :
Le 29 septembre 2021 à 13:29:31 :
- Pourquoi il y a un constructeur privé de NoeudBinaire ?
Ca signifie qu'il est désactivé
- À quoi sert evaluation(int, int) : int dans le programme ?
Une opération effectue un calcul entre 2 nombres, tu auras par exemple une opération "Addition" qui fera chiffre_gauche + chiffre_droit
Q1: Oui mais qu'elle est son utilité puisqu'on peut créer un NoeudBinaire(Noeud, Noeud, Operation) ?
Le constructeur privé dans le diagramme UML est là pour indiquer que le constructeur n'est pas accessible (il est privé). Sans ça, cela veut dire qu'on peut instancier une Operation sans arguments, ce qu'on ne veut pas.
Q2: Cela se réalise dans NoeudBinaire déjà, non ? Chiffre_gauche et chiffre_droit correspondent aux 2 NoeudValeur de NoeudBinaire du coup ? Evaluation(int,int) d'Operation fait clairement doublon avec Evaluation() de NoeudBinaire dans ce cas là
Non tu comprends mal le principe du pattern Composite, le but est de créer et d'empiler plein de noeuds pour réaliser des opérations, par exemple
(2+4)/3+8 ça donne
final Noeud noeud = new NoeudBinaire(
___new NoeudBinaire(new NoeudValeur(2), new NoeudValeur(4), Operation.getInstance("+")),
___new NoeudBinaire(new NoeudValeur(3), new NoeudValeur(8), Operation.getInstance("+")),
___new Operation.getInstance("/")
)Le fait d'appeler evaluation() sur un NoeudBinaire va appeler evaluation(int, int) de son Operation, les deux int qu'il passe sont récupéré en faisant un evaluation() des 2 noeuds qu'il stock, dans le cas où il possède des NoeudBinaire ça va refaire une boucle, jusqu'à arriver au cas où il y a 2 NoeudValeur, dans ce cas on se retrouve avec 2 int (car evaluation() de NoeudValeur renvoi sa propre valeur), ce qui permet de réaliser l'opération (dans la classe Opération), et on remonte toute la chaine jusqu'au 1er Noeud, ce qui nous renvoie le résultat (un int).
J'ai capté pour la Q1
D'accord, je vais réfléchir à refaire la méthode evaluation() parce que j'ai pas l'impression que ça appelle evaluation(int, int) d'Operation
Par contre en déboguant, la valeur est à null, bizarre
L'erreur :
Débogage:
Le 29 septembre 2021 à 17:00:02 :
<code> public static Operation getInstance(String nomOP) {
if (instance == null) {
instance = new Operation(nomOP);
ajouterOperation(nomOP);
}return instance;
}</code>C'est faux, c'est un singleton pour chaque type d'Operation, c'est à dire que quand tu veux appeler l'opération Soustraction, il faut regarder si cette opération existe bien.
Donc :
public static Operation getInstance(String nomOP) {
if (!mesOP.containsKey(nomOP)) {
final Operation newOp = new Operation(nomOP);
ajouterOperation(newOp );
}
return mesOP.get(nomOP);
}
De telle manière ?
J'ai gardé le instance == null sinon j'ai une StackOVerflow error
Le 29 septembre 2021 à 16:55:48 :
Le 29 septembre 2021 à 13:29:31 :
- Pourquoi il y a un constructeur privé de NoeudBinaire ?
Ca signifie qu'il est désactivé
- À quoi sert evaluation(int, int) : int dans le programme ?
Une opération effectue un calcul entre 2 nombres, tu auras par exemple une opération "Addition" qui fera chiffre_gauche + chiffre_droit
Q1: Oui mais qu'elle est son utilité puisqu'on peut créer un NoeudBinaire(Noeud, Noeud, Operation) ?
Q2: Cela se réalise dans NoeudBinaire déjà, non ? Chiffre_gauche et chiffre_droit correspondent aux 2 NoeudValeur de NoeudBinaire du coup ? Evaluation(int,int) d'Operation fait clairement doublon avec Evaluation() de NoeudBinaire dans ce cas là
Le 29 septembre 2021 à 16:55:33 :
Wah un diagramme.Je bosse depuis 2 ans et c'est la première fois que j'en revois un
Le monde pro est codé avec le cul, t'en fais pas.
Ayaaa, ça bosse pas sans diagramme dans le monde pro, si ?
Le 29 septembre 2021 à 16:53:25 :
Culs de qualitéhttps://image.noelshack.com/fichiers/2021/12/3/1616609713-pessisym1.png
De rien pour ça clé
Ravi que tu apprécies les culs
Le 29 septembre 2021 à 16:49:16 :
je up pour l'effort
Merci clé ! Sympa !
Le 29 septembre 2021 à 16:47:30 :
Aidez ce pauvre homme
Cet exercice me donne des frissons