KhaoulaElmajni / Examen-Blanc-COO-et-Design-Pattern

Test Blanc COO et Design Pattern

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Examen Blanc COO et Design Pattern 🎓💻

1.Présentation de l'activité pratique

  • On souhaite concevoir et dĂ©velopper une application qui permet manipuler des dessins. Un Dessin contient un ensemble de figures gĂ©omĂ©triques qui peuvent ĂŞtre soit des rectangles ou des cercles. Pour chaque figure on souhaite calculer son pĂ©rimètre et sa surface et on souhaite dĂ©finir une mĂ©thode qui permet de dessiner la figure (Afficher l’état de la figure). Un cercle est dĂ©fini par son centre qui est un point et par son rayon R. Un rectangle est dĂ©fini par un point qui reprĂ©sente le coin supĂ©rieur gauche, sa largeur L et sa hauteur H. Un point est dĂ©finit par ses coordonnĂ©es X et Y. Pour le cercle, sa surface veut Ď€ * R^2 alors sa surface vaut 2 * Ď€ *R. Pour le rectangle, sa surface veut L * H alors sa surface vaut 2 *(L+H).

Entités et règles de gestion : 🏷️

L’application devra gérer 6 entités. Les entités utilisées dans l’application sont :


public class Dessin implements Serializable {
    private List<Figure> figures=new ArrayList<>();
    private transient IStrategy strategy=new StrategyImpl1();

    public Figure ajouterFigure(Figure figure){
        figures.add(figure);
        return figure;
    }

    public void supprimerFigure(Figure figure){
        figures.remove(figure);
    }

    public void serialiser(String fileName) throws Exception {
        File file=new File(fileName);
        FileOutputStream fileOutputStream=new FileOutputStream(file);
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
        objectOutputStream.writeObject(this);
        objectOutputStream.close();
    }
    public void effectuerStrategyTraitement(){
        this.strategy.traiter(figures);
    }

    public void setStrategy(IStrategy strategy) {
        this.strategy = strategy;
    }

    public void afficher(){
        for (Figure figure:figures){
            figure.afficher();
        }
    }

    public static Dessin desserialiser(String fileName) throws Exception {
        File file=new File(fileName);
        FileInputStream fileInputStream=new FileInputStream(file);
        ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
        Dessin dessin=(Dessin) objectInputStream.readObject();
        objectInputStream.close();
        return dessin;
    }
}
public abstract class Figure implements Serializable, Observer {
    protected int epaisseurContour;
    protected int couleurContour;
    protected int couleurRemplissage;
    protected int niveau;
    public abstract double calculSurface();
    public abstract double calculPerimetre();
    public abstract void afficher();

    @Override
    public String toString() {
        return
                "epaisseurContour = " + epaisseurContour +
                ", couleurContour = " + couleurContour +
                ", couleurRemplissage = " + couleurRemplissage ;
    }

    public int getEpaisseurContour() {
        return epaisseurContour;
    }

    public void setEpaisseurContour(int epaisseurContour) {
        this.epaisseurContour = epaisseurContour;
    }

    public int getCouleurContour() {
        return couleurContour;
    }

    public void setCouleurContour(int couleurContour) {
        this.couleurContour = couleurContour;
    }

    public int getCouleurRemplissage() {
        return couleurRemplissage;
    }

    public void setCouleurRemplissage(int couleurRemplissage) {
        this.couleurRemplissage = couleurRemplissage;
    }

    @Override
    public void update(Parametrage parametrage) {
        this.epaisseurContour =parametrage.getEpaisseurContour();
        this.couleurContour=parametrage.getCouleurContour();
        this.couleurRemplissage=parametrage.getCouleurRemplissage();
    }
    protected String tabs(){
        String tabs="";
        for (int i = 0; i <niveau ; i++) {
            tabs+="\t";
        }
        return tabs;
    }
}
public abstract class Figure implements Serializable, Observer {
    protected int epaisseurContour;
    protected int couleurContour;
    protected int couleurRemplissage;
    protected int niveau;
    public abstract double calculSurface();
    public abstract double calculPerimetre();
    public abstract void afficher();

    @Override
    public String toString() {
        return
                "epaisseurContour = " + epaisseurContour +
                ", couleurContour = " + couleurContour +
                ", couleurRemplissage = " + couleurRemplissage ;
    }

    public int getEpaisseurContour() {
        return epaisseurContour;
    }

    public void setEpaisseurContour(int epaisseurContour) {
        this.epaisseurContour = epaisseurContour;
    }

    public int getCouleurContour() {
        return couleurContour;
    }

    public void setCouleurContour(int couleurContour) {
        this.couleurContour = couleurContour;
    }

    public int getCouleurRemplissage() {
        return couleurRemplissage;
    }

    public void setCouleurRemplissage(int couleurRemplissage) {
        this.couleurRemplissage = couleurRemplissage;
    }

    @Override
    public void update(Parametrage parametrage) {
        this.epaisseurContour =parametrage.getEpaisseurContour();
        this.couleurContour=parametrage.getCouleurContour();
        this.couleurRemplissage=parametrage.getCouleurRemplissage();
    }
    protected String tabs(){
        String tabs="";
        for (int i = 0; i <niveau ; i++) {
            tabs+="\t";
        }
        return tabs;
    }
}
public class Cercle extends Figure {
    private Point centre;
    private double rayon;

    public Cercle(Point centre, double rayon) {
        this.centre = centre;
        this.rayon = rayon;
    }

    @Override
    public double calculSurface() {
        return Math.PI*rayon*rayon;
    }

    @Override
    public double calculPerimetre() {
        return 2*Math.PI*rayon;
    }

    @Override
    public void afficher() {
        System.out.println(tabs()+"Cercle ==> ( X = "
                +centre.getX()+", Y = "+centre.getY()+", Rayon = "+rayon+","+super.toString()+")");
    }
}

public class GroupeFigures extends Figure{
    private List<Figure> figures=new ArrayList<>();

    public Figure ajouterFigure(Figure figure){
        figure.niveau=this.niveau+1;
        figures.add(figure);
        return figure;
    }


    @Override
    public double calculSurface() {
        double surfaceTotal = 0.0;

        for (Figure f : figures) {
            surfaceTotal+=f.calculSurface();
        }

        return surfaceTotal;
    }

    @Override
    public double calculPerimetre() {
        double perimetreTotal = 0.0;

        for (Figure f : figures) {
            perimetreTotal+=f.calculPerimetre();
        }

        return perimetreTotal;
    }

    @Override
    public void afficher() {
        System.out.println(tabs()+"Affichage du Groupe : ==> {");
        for (Figure figure :figures){
            figure.afficher();
        }
        System.out.println("}");
    }

    public List<Figure> getFigures() {
        return figures;
    }
}

public class Point implements Serializable {
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}


les fonctionnalités de l'application 🏷️

Chaque figure est définit également par des attributs de type entiers comme l’épaisseur du contour, la couleur du contour et la couleur de remplissage. Dans ce modèle, on voudrait aussi respecter les critères suivants :

1. Donner la possibilité de Créer un groupe de figures. Chaque groupe peut contenir d’autres groupes..

2. Nous introduisons un Objet Paramétrage dont l’état est défini par attributs par défaut comme l’épaisseur du contour, la couleur du contour et la couleur de remplissage. On voudrait qu’à chaque fois que l’état de cet objet change, toutes les figures doivent être notifiées pour ce mis à jour.

3. Pour l’objet dessin, on voudrait définir les opérations suivantes :

Une méthode « traiter » qui permet de traiter le contenu du dessin en utilisant une famille d’algorithmes qui sont interchangeables dynamiquement. Ce signifie qu’au moment de l’exécution, l’objet dessin pour changer d’algorithme avec un autre de la même famille. Chaque algorithme peut évoluer indépendamment de la classe dessin qui les utilise.
Les méthodes qui permettent d’ajouter et supprimer des figures du dessin.
Une méthode qui permet d’afficher toutes les figures du dessin.
Une méthode qui permet de sérialiser le dessin dans un fichier binaire.

3.Les Design Pattern utilisées

1 Composite

  • Organiser les objets en structure arborescente afin de reprĂ©senter une hiĂ©rarchie. Permettre Ă  la partie cliente de manipuler un objet unique et un objet composĂ© de la mĂŞme manière .

voir Ă©galement Ă  propos Compositeđź”—

2 Strategy

  • DĂ©finir une famille d’algorithmes, et encapsuler chacun et les rendre interchangeables tout en assurant que chaque algorithme puisse Ă©voluer indĂ©pendamment des clients qui l’utilisent.

*voir Ă©galement Ă  propos de Strategy đź”—

4 Observer.

  • Le pattern Observer dĂ©finit une relation entre les objets de type un Ă  plusieurs, de façon que, lorsqu’un objet change d’état, tous ce qui en dĂ©pendent en soient informĂ©s et soient mis Ă  jour automatiquement. voir Ă©galement Ă  propos Observer đź”—

4.Structure du projet

5.CONCEPTION & ANALYSES

  • Diagramme de classe

Diagramme de classe [color=#fd837b]


6.comment ça marche ?

  • Enfin nous tenons Ă  remercier le seul et unique, notre professeur Mr YOUSFI Mohamed Docteur & professeur Ă  l'ENSET MEDIA pour son soutien et son encouragement envers nous, aussi pour nous avoir donnĂ© cette opportunitĂ© d'amĂ©liorer nos compĂ©tences et de connaĂ®tre les nouvelles technologies comme celles qui nous avons travaillĂ©.

voir Ă©galement Ă  propos Mr YOUSSFI Mohamed

Created by :[name=ELMAJNI KHAOULA] [time=Mon,2022,10,20][color=#EF0101] voir Ă©galement Ă  propos de moi ELMAJNI Khaoula

About

Test Blanc COO et Design Pattern

License:MIT License


Languages

Language:Java 100.0%