[CULS 10/10][AIDE] Exercice PATRON COMPOSITE JAVA

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 :ok:

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 :up: 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

SangreLatino
2021-09-29 13:34:09

:up: a l'aide

SangreLatino
2021-09-29 13:37:14

:up:

SangreLatino
2021-09-29 13:42:46

S'il vous plaît :)

SangreLatino
2021-09-29 13:44:38

Bide même avec des culs :)

blaskovitch
2021-09-29 13:46:30

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

SangreLatino
2021-09-29 13:48:44

Le 29 septembre 2021 à 13:46:30 :
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

Ça me rassure parce que l'usage du singleton ici me pose vraiment problème et j'aurai plus jamais affaire à des design patterns :ok:

SangreLatino
2021-09-29 13:52:40

Oui je continue les :up:

SangreLatino
2021-09-29 13:59:15

Uppercut :up:

SangreLatino
2021-09-29 14:05:05

:up:

LinesInWax
2021-09-29 14:06:05

[13:59:15] <SangreLatino>
Uppercut :up:

Je up pour la ref

SangreLatino
2021-09-29 14:07:09

Le 29 septembre 2021 à 14:06:05 :

[13:59:15] <SangreLatino>
Uppercut :up:

Je up pour la ref

Merci kheyou :ange:

SangreLatino
2021-09-29 14:11:43

J'espère que vous cherchez :hap:

Et merci si c'est le cas :ok:

SangreLatino
2021-09-29 14:16:46

En uppant :up:

SangreLatino
2021-09-29 14:21:09

:up:

SangreLatino
2021-09-29 14:27:37

:up: svp

SangreLatino
2021-09-29 14:30:53

:-(

BnJi47
2021-09-29 14:31:52

Je peux pas t’aider mais je te :up: pour les culs

SangreLatino
2021-09-29 14:32:50

Le 29 septembre 2021 à 14:31:52 :
Je peux pas t’aider mais je te :up: pour les culs

C'est très gentil khey, merci à toi :ok:

1m63maisdeter
2021-09-29 14:34:08

Il est privé pour qu'on ne l'utilise pas et qu'on utilise uniquement celui qui est public.

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.