Vous êtes sur la page 1sur 5

ETS – Département de Génie Logiciel et TI

Cours : LOG120 Automne 2010 Groupe 01 – Prof : Abdelouahed Gherbi


Exercices pour la séance de cours 07
Exercice 01
On veut concevoir et implémenter en java une application qui permet d’afficher et d’évaluer des
expressions booléennes simples. Ces expressions peuvent être
• La constantes T (pour true)
• La constante F (pour false)
• Le cas générale une expression booléenne binaire de la forme Exp1 op Exp2 où op est l’un des
opérateurs booléens AND, OR ou XOR.
• Les expressions non constantes doivent être affichées avec des parenthèses
1. Identifier et utiliser un patron de conception convenable pour ce problème
2. Donne un diagramme de classes UML correspondant à ce patron pour le problème
3. 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
4. Proposer une implémentation en Java de cette conception

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()

AndExpr OrExpr XorExpr

+afficher() +afficher() +afficher()


+evaluer() +evaluer() +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 :

a. Le patron de conception convenable pour cette situation est le patron Stratégie


b. Les classes diagramme UML sont comme suit :

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

public class MessageQueue public class Message {


{
private Message[] elements; private String text;
private int head;
private int tail; public Message(String messageText){
private int count;
public MessageQueue(int capacity) text = messageText;
{
elements = new Message[capacity]; }
count = 0;
head = 0; public String getText(){
tail = 0;
} return text;

public Message remove() }


{
Message r = elements[head];
head = (head + 1) % elements.length;
count--; }
return r;
}

public void add(Message aMessage)


{
elements[tail] = aMessage;
tail = (tail + 1) % elements.length; Solution:
count++;
} Voir le code dans le projet Eclipse
disponible dans le site Web du cours
public int size()
{
return count;
}

public boolean isFull()


{
return count == elements.length;
}

public Message peek()


{
return elements[head];
}
}

Vous aimerez peut-être aussi