[CULS 10/10][AIDE] Exercice PATRON COMPOSITE JAVA
SuppriméLe 29 septembre 2021 à 16:47:30 :
Aidez ce pauvre homme
Cet exercice me donne des frissons
Le 29 septembre 2021 Ă 16:49:16 :
je up pour l'effort
Merci clé ! Sympa !
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.
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
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 ?
public static Operation getInstance(String nomOP) {
if (instance == null) {
instance = new Operation(nomOP);
ajouterOperation(nomOP);
}
return instance;
}
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);
}
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 Ă 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 Ă 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 donnefinal 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).
[13:46:30] <blaskovitch>
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
Les DP je sais pas mais ce gendre d'UML a part pour faire de la doc que personne ne lit tu l'utiliseras jamais.
Le 29 septembre 2021 Ă 17:09:12 :
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
On a pas besoin d'avoir une variable instance dans ta classe. C'est un Singleton assez particulier dans notre cas.
Chaque Operation a son propre nom (nomOP) donc non statique, mais toutes les opérations partagent la même Map (mesOp) qui est donc statique, c'est à dire que quand tu veux faire un getInstance(String), tu vas regarder dans ta Map si elle possède déjà une classe Operation avec ce nom, si ce n'est pas le cas tu la créer, l'ajoute à la Map et tu renvoies cette instance.
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
public class NoeudBinaire implements Noeud {
[...]
@Override
public int evaluation() {
return this.monOP.evaluation(n1.evaluation(), n2.evaluation());
}
Ce sera déjà mieux comme ça
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: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
public static Operation getInstance(String nomOP) {
if (!mesOP.containsKey(nomOP)) {
final Operation newOP = new Operation(nomOP);
mesOP.put(nomOP, newOP);
}
return mesOP.get(nomOP);
}
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