- 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).
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;
}
}
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.
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.
- 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đź”—
- 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 đź”—
- 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 🔗
- 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