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
Bide même avec des culs :)

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
Voir le topic sur JVC

Afficher uniquement les messages de l'auteur du topic

En ligne sur JvArchive

JvArchive compagnon

Découvrez JvArchive compagnon , l'userscript combattant la censure abusive sur le 18-25 !