Académique Documents
Professionnel Documents
Culture Documents
Solution :
1. Le patron convenable pour cette situation est le patron Composite car une expression (ayant le
comportement afficher et evaluer) est elle-même composée d’expression ayant ce même
comportement. Les objets primitifs sont les expressions de base qui sont les deux constantes
booléennes True et False.
2.
<<Interface>>
IBoolExp 2
+afficher()
+evaluer()
ConstBool {abstract}
BinaryBoolExpr
+afficher()
BinaryBoolExpr()
+evaluer()
3.
Nom réel
Nom dans le patron de conception
Primitive IBoolExp
Composite AndExpr, OrExpr et XorExpr
Leaf ConstBool
Method() afficher() et evaluer()
4. Voir code dans le projet Eclipse disponible au site Web du cours.
Exercice 02
On peut donner un titre à une bordure en utilisant la classe TitleBorder comme dans l’exemple suivant :
JPanel panel = new JPanel();
…
Panel.setBorder(new TitleBorder(new EtchedBorder(),
“Sélectioner une option”); // (1)
• Les classes TitleBorder et EtchedBorder sont définies dans le package javax.swing.border.
• Les deux classes implémentent l’interface Border définie dans le même package.
• L’interface Border définie la méthode paintBorder()
• La méthode setBorder() est définie dans la classe JCompnent : void
setBorder(Border border)
a. Quel est le patron de conception mis en œuvre dans le code (1).
b. Dessiner le diagramme de classes UML représentant le patron dans cette situation
c. Dresser un tableau montrant la correspondance entre les éléments de la structure générale du
patron avec les éléments de cette situation
Solution :
a. Le patron utilisé dans le code (1) est patron décorateur. La classe EtchedBorder qui implémente
l’interface Border est décoré par la classe TitleBorder pour permettre d’assigner un titre à la
bordure (deuxième paramètre du constructeur de TitleBorder
b.
d.
Nom dans le patron Nom réel (dans la situation)
Component Border
ConcreteComponent EtchedBorder
Decorator TitleBorder
Method() paintBorder()
Exercice 03
On considère les classes abstraites Writer et Reader définies dans la package java.io. Ces deux
classes permettant (entre autres) d’écrire (respectivement lire) un tableau de caractères utilisant les
méthodes :
void write(char[] cbuf, int off, int len);
int read(char[] cbuf, int off, int len);
On veut étendre la fonctionnalité de ces deux classes pour encrypter (respectivement décrypter) les
caractères écrites par Writer (respectivement lus par Reader).
a. Quel est le patron de conception qui convient à cette solution
b. Dessiner le diagramme de classes UML correspondant.
c. Écrire le code des deux classes EncryptingWriter et DecyptingReader utilisant la méthode de
chiffrement de Caesar
Solution :
a. Le patron de conception convenable pour cette situation est le patron Décorateur car les classe
EncryptingWriter et DecryptingReader ajoutent une fonctionalité respectivement aux classes
Writer et Reader tout en préservant le comportement de ces classes
b.
{abstract}
Reader 1
+read()
FileReader DecryptingReader
+read() +read()
{abstract}
Writer 1
+write()
FileWriter DecryptingWriter
+write() +write()
c. Voir le code dans le projet Eclipse disponible dans le site Web du cours
Exercice 04
On veut améliorer cette conception de l’exercice 03 afin de pouvoir varier les algorithmes de cryptage et
décryptage.
a. Quel patron de conception il faut utiliser?
b. Dessiner le diagramme de classes UML correspondant
c. Réécrire le code en conséquence.
Solution :
c. Voir le code dans le projet Eclipse disponible sur le site Web du cours.
Exercice 05
On considère le code suivant de la classe MessageQueue implémentant une file FIFO
Concevoir une classe de test unitaire utilisant le framework JUnit pour la classe MessageQueue