:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Programmation Orientée Objet ::
[LOGO]

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.

  1. À 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

  1. 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é.
  2. 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.

  1. 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;
        
  2. Faites en sorte que l'on puisse chaîner les requêtes :
         new Query().select("user.id").select("user.name").toSQL();
        
  3. 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
  4. Ajoutez la gestion des '<>', '<', '>'.