Topic de SangreLatino :

[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 :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.jpeg https://image.noelshack.com/fichiers/2021/39/3/1632914855-1603585766-bikini.jpg https://image.noelshack.com/fichiers/2021/39/3/1632914861-1603585772-cul1.jpeg https://image.noelshack.com/fichiers/2021/39/3/1632914870-1603585778-cul2.jpeg https://image.noelshack.com/fichiers/2021/39/3/1632914877-1602108375-fetichistes.jpg https://image.noelshack.com/fichiers/2021/39/3/1632914943-1602108362-3.jpg

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

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

Je up pour la ref

Le 29 septembre 2021 à 14:06:05 :

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

Je up pour la ref

Merci kheyou :ange:

J'espère que vous cherchez :hap:

Et merci si c'est le cas :ok:

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

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:

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

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
En ligne sur JvArchive 304