:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Programmation Orientée Objet ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Diagramme de séquence, Injection de dépendance, Builder |
Exercice 1 - Diagramme de séquence
En reprenant les classes du premier td
td3convert.zip
sur les filtres d'images.
-
À partir du code écrit précédemment, modélisez le scénario
d'applications d'un ensemble de filtre avec une image
en utilisant un diagramme de séquence avec les classes
que vous avez écrites.
Sur le paquetage courant, créez un "Diagramme de séquence",
placez l'acteur utilisateur à gauche et indiquez
l'ensemble des méthodes qui sont appelées.
Exercice 2 - Injection de dépendance
-
Dans un souci d'internationalisation, on souhaite que le fichier des filtres
permette de définir plusieurs noms pour un même filtre
(rotation et rotate, par exemple).
L'idée consiste à permettre à chaque créateur de filtre de s'enregistrer
plusieurs fois avec des noms de filtre différents dans la table d'association.
Ajoutez une méthode permettant à chaque créateur de filtre d'indiquer l'ensemble
des noms pour lesquels il veut être enregistré.
-
De façon plus générale pour résoudre ce genre de problème, on utilise
le design-pattern Injection de dépendance (appelé aussi Inversion de contrôle):
au lieu d'enregistrer le créateur de filtre
pour un ensemble de nom dans un code externe,
on demande au créateur de filtre de s'enregistrer lui-même en lui
passant en paramètre une table d'association
ou plus exactement une abstraction
de table associative pour éviter un couplage trop fort.
Implantez ce design-pattern.
Exercice 3 - Requête SQL
On souhaite créer une classe Query permettant de créer des requêtes
SQL. Nous nous limiterons à des requêtes SELECT ... FROM ... WHERE ... AND ...
(avec autant de AND que l'on veut).
Pour créer la requête, on souhaite permettre à l'utilisateur de spécifier uniquement
des couples nom de table/champs soit en tant que clause SELECT soit en tant
que clause WHERE. Les valeurs du FROM seront calculées automatiquement.
-
Implantez la classe Query en utilisant le design-pattern builder :
Query query=new Query();
query.select("user.id");
query.select("user.name");
String sql=query.toSQL();
le code précédent doit générer la requête :
SELECT user.id,user.name FROM user;
-
Faites en sorte que l'on puisse chaîner les requêtes :
new Query().select("user.id").select("user.name").toSQL();
-
On souhaite de plus gérer les clauses WHERE sachant que l'on peut comparer la valeur
de deux champs avec '='.
La solution proposée ne devra pas utiliser de parseur d'expressions.
Modifiez votre code pour que l'on puisse créer une requête de ce type :
SELECT id,name,street FROM user, address WHERE user.id = address.user_id;
Attention à la gestion des constantes ... WHERE user.id=3
-
Ajoutez la gestion des '<>', '<', '>'.
© Université de Marne-la-Vallée