Vous êtes sur la page 1sur 4

Université des sciences et de la technologie Houari Boumediene (USTHB) 

Master 2 ‐ Ingénierie Logiciel ‐ Année 2010‐2011 
Méthodologie et Processus de Développement de Logiciels (MPD LOG) 
 
TD n°1 
Design Pattern 
Exercice1 ­ Le Design Pattern singleton 

1 Rappel  
Intention 
• Garantir qu’une classe n’a qu’une seule instance et fournir un point d’accès global 
à cette instance. 
 
Indications d’utilisation 
• Il doit y avoir exactement une instance d’une classe ; 
• cette instance est accessible globalement ; 
 
Exemple : 
• Fenêtre principale d’une IHM 
• Accès à un fichier de configuration 
• Accès à une base de données 
 
Pattern :
• Constructeur privé 
• Instance en tant qu’attribut statique de la classe 
• Méthode statique d’accès à l’instance 
 
Voici  une  solution  écrite  en  Java  (il  faut  écrire  un  code  similaire  pour  chaque  classe‐
singleton): 
 
public class Singleton {
private static Singleton instance = null;

/**
* La présence d'un constructeur privé supprime
* le constructeur public par défaut.
*/
private Singleton() {}

/**
* Le mot-clé synchronized sur la méthode de création
* empêche toute instanciation multiple même par
* différents threads.
* Retourne l'instance du singleton.
*/
public final synchronized static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}

 
Université des sciences et de la technologie Houari Boumediene (USTHB) 
Master 2 ‐ Ingénierie Logiciel ‐ Année 2010‐2011 
Méthodologie et Processus de Développement de Logiciels (MPD LOG) 
 
2 Utilisation de ce pattern 
Proposez une implémentation d'une application qui veut créer un seul point au pilote de 
la carte son,  en se basant sur le patron singleton.  

Exercice2 ­ Le Design Pattern Composite 

1 Rappel  
Intention 
• Représenter une hiérarchie d’objets en permettant à un objet client de traiter de 
manière unique les objets élémentaires et les combinaisons de ceux‐ci. 
Indications d’utilisation 
• Représentation de structures récursives ; 
•  traitement uniforme de tous les objets du composite, qu’ils soient terminaux ou 
non. 
 
La figure suivante montre le diagramme de classe du Design Pattern Composite : 

 
2 Utilisation de ce pattern 

1.1. Système de gestion de fichiers 

Soit  le  système  de  gestion  de  fichiers  suivant  :  Les  fichiers,  les  raccourcis  et  les 
répertoires sont contenus dans des répertoires et possèdent un nom. Un raccourci 
peut concerner un fichier ou un répertoire. Au sein d'un répertoire donné, un nom 
ne peut identifier qu'un seul élément (fichier, sous‐répertoire ou raccourci)  
 
Question  
Proposez une modélisation de ce système de gestion de fichiers. 

 
Université des sciences et de la technologie Houari Boumediene (USTHB) 
Master 2 ‐ Ingénierie Logiciel ‐ Année 2010‐2011 
Méthodologie et Processus de Développement de Logiciels (MPD LOG) 
 
1.2. Les listes d’entiers 

Soit  la  description  du  patron  composite  pour  des  listes  d’entiers  donnée  dans  la 
Figure 1. 

Figure 1 : Diagramme de classe pour les listes 

Questions: 

1. Faites  apparaître  et  justifiez  l’utilisation  du  patron  singleton  dans  votre 
implémentation. 
2. Implémentez  de  façon  récursive  les  fonctions  suivantes  :  append, putlast,
reverse.  

− append  :  ListeDEntier × ListeDEntier → ListeDEntier : 


concatène simplement deux listes en une seule. Par exemple soient L1 = 1
2 3 et L2 = 4 5 6 alors L1.append(L2) sera la liste 1 2 3 4 5 6. 
− putlast : ListeDEntier × int → ListeDEntier : ajoute l’entier 
à la fin de la liste. Par exemple L1.putlas(4) sera 1 2 3 4. 
− reverse : ListeDEntier → ListeDEntier : produit une nouvelle 
liste  inversée.  Par  exemple  L1.reverse()produira  une  nouvelle  liste 
représentant 3 2 1. 

1.3. Polynômes à une variable réelle  

L’objectif est d'élaborer un diagramme de classe permettant la représentation des 
polynômes à une variable réelle. 
Exemple :  0 − 100 − Z4 ; 3.5X2 + 2X ; Y3 + Y2 + Y

Hypothèse : nous considérerons le type float comme une bonne réalisation 


informatique des réels mathématiques, et supposons que les polynômes manipulés 
sont homogènes à une seule variable.  

 
Université des sciences et de la technologie Houari Boumediene (USTHB) 
Master 2 ‐ Ingénierie Logiciel ‐ Année 2010‐2011 
Méthodologie et Processus de Développement de Logiciels (MPD LOG) 
 
Question 1 : 

Définissez une classe de variable,  une classe de constante réduite au flottant,  une classe 
de monôme et une classe des polynômes.  

Il faudra munir cet ensemble de classes d’un minimum d’opération : 

z getZero : une référence sur le polynôme null crée suivant le principe du 
singleton. 
z sameVariable : teste si le polynôme à la même variable que le monôme 
argument. 
z degree : calcule le degré du polynôme.
z compute : calcule la valeur du polynôme pour une valeur donnée de la 
variable. 
z derivation : trouver un moyen de calculer une approximation raisonnable de 
la dérivée en un point d’un polynôme. Cette méthode aura le profil suivant : 
derivation : Polynome × float → float. 
 

Question 2 : 

Utiliser un patron composite pour organiser tout cela. Réfléchir et résoudre le problème 
suivant : un monôme seul peut‐être considéré comme le polynôme réduit à ce monôme 
et  c’est  également  le  cas  pour  une  constante.  Par  ailleurs  si  un  polynôme  à  plusieurs 
monômes ceux‐ci sont mémorisés en ordre strictement décroissant des puissances (ceci 
permet d’avoir une forme normale bien pratique pour comparer deux polynômes). Ces 
dernières conditions apparaîtront comme des contraintes dans un commentaire associé 
à  la  classe  polynôme.  Votre  première  tâche  est  donc  de  réfléchir  au  diagramme  des 
classes. 

Question 3 : 

Implémentez de façon récursive les fonctions suivantes : sameVariable, compute, et 
derivation