User Tools

Site Tools


2014_2015:s3:concprogobjet:td:td3

TD3 : Soyons Pragmatique !

Objectifs : Travailler sur de petits exemples différents points d'un développement pragmatique.

Responsabilités

Le bus est maintenant composé de boîtes à messages.

  • Un agent peut créer un bus.
  • Un agent peut créer des boîtes à messages associées à un bus.
  • Des producteurs envoient des messages vers un bus et éventuellement vers une boîte de messages spécifique du bus.
  • Un consommateur peut demander à lire des messages qui se trouvent dans une boîte sur un bus
  • Un consommateur peut demander à lire tous les messages qui se trouvent sur le bus.
  • Une boîte ne peut pas être associée à plusieurs bus. Un bus peut évidemment avoir plusieurs boîtes.

Voici les interfaces graphiques telles que le maitre d'ouvrage les a imaginées. Vous pouvez proposer une autre approche de l'interface mais l'essentiel pour ce TD est que les interfaces soient couvertes et que vous puissiez “prouver” à votre “client” que vous avez bien compris son problème et que vous allez y répondre.

Pour vous aider vous pouvez dans un premier temps, ne pas tenir compte de la boîte de messages par défaut et n'en tenir compte qu'à la fin du TD en identifiant bien les impacts sur le modèle et sur le code, en particulier avec les responsabilités qui en résultent.
  1. Quels modèles utilisez-vous pour analyser le problème ?
  2. Dans vos diagrammes de séquences, faîtes bien apparaître les interfaces graphiques et les contrôleurs mais dans les diagrammes de classe concentrez vous uniquement sur la partie métier dans un premier temps.
  3. Qui est capable de retrouver un bus à partir de son nom ? une boite de messages? (pattern expert)
  4. Qui est responsable de créer un bus? une boite de message? pourquoi? (Pattern créateur)
  5. Qui est responsable de créer un message ? pourquoi? (Pattern créateur)
  6. Avez-vous des relations bi-directionnelles? Si oui, avez-vous décidé de qui est le “maître” et de qui est l'“esclave”?
  7. A partir de maintenant, on s'intéresse au scénario suivant, sans tenir compte de l'interface graphique, est-ce que vous pouvez l'implémenter, revenez sur votre code si besoin (Vous pouvez vous aider des tuyaux donnés plus bas si besoin):
    1. Je crée un bus “NiceInformation”, et une boite “Circulation” sur ce bus.
    2. Je poste un message “Embouteillage” dans la boite Circulation.
    3. Je poste un message “Nouveau rond point” dans la boite Circulation.
    4. Je lis les messages qui se trouvent dans la boite circulation, i.e. je récupère les messages puis je les affiche.
    5. Je pose un message “SoireeIUT” sur le bus “NiceInformation”
    6. je demande à effacer le message “Embouteillage”.
    7. J'attends 2s (Thread.sleep(2000));
    8. Je pose un message “SoireeIntegrationIUT” sur le bus “NiceInformation”
    9. J'attends 2s (Thread.sleep(2000));
    10. Je demande à effacer tous les messages postés depuis plus de 4s.
  8. Regardez vos codes, et vérifiez que vous avez bien respecté la loi de Demeter. Si ce n'est pas le cas, corrigez vos codes.
  9. Comment avez-vous géré la boîte par défaut? (Avez-vous pensé à définir des constantes?)
  10. On tient compte de l'interface à présent. Schématisez en particulier dans un diagramme de séquence, le ou les contrôleurs mis en place en fonction de vos choix et mettez à jour si besoin la partie métier de votre code. On ne vous demande pas d'implémenter l'interface graphique.
    1. Quel objet peut jouer le rôle de contrôleur “Facade” éventuellement?
    2. Quels contrôleurs “cas d'utilisation” créeriez sinon?
    3. Utilisez-vous bien le principe de délégation?
  11. Et si maintenant, on veut afficher les messages en fonction de l'ordre d'arrivée? Que modifiez-vous? Est-ce que vous auriez pu éviter certains changements si vous aviez utilisé des interfaces?

A la fin de cette séance (au plus tard en fin de semaine) (S3D : 20/2 à 23h59)

  • Mettez un mail à votre encadreur avec soit l'adresse où récupérer le TD soit le TD lui-même, dans le sujet du mail [S3D][TD3] Noms des participants au rendu :
  • Le rendu consiste en :
    1. Un document contenant
      • votre modèle final (Tout le monde n'aboutit pas au même modèle, c'est certain)
      • des explications sur les raisons de ce modèle, les choix que vous avez faits et les leçons apprises.
    2. Les codes et les tests.
    3. Il est préférable que les codes soient commentés en respectant les consignes d'une javadoc 1)

Dans cet exercice nous évaluons votre capacité à concevoir les bons modèles et la “bonne” architecture relativement à vos objectifs. Des modèles incomplets sont évidemment considérés comme faux au regard de ces objectifs.

Tuyaux

Vous avez besoin dans ce TD de manipuler des collections et des dates, voici quelques tuyaux que vous pourriez retrouver sur le Web et qui sont extraits des codes que nous avons mis en oeuvre pour ce TD. Vous pouvez évidemment avoir d'autres solutions :

  • Pour parcourir une ArrayList (le for qui suit)
  • Pour pouvoir effacer dans une liste que l'on parcourt, il faut d'abord en faire une copie
ArrayList<Message> messagesContenus = new ArrayList<Message>(messages);
        for (Message m : messagesContenus) {
            if (m.perime(i)) {
                m.detruire();
                messages.remove(m);
            }
  • Une manière “facile” pour savoir si un message est périmé de plus de x secondes :
  public boolean estPerime(int second){
        Date d = new Date();
        long ms = d.getTime();
        ms = ms - second*1000;
        d.setTime(ms);
        return this.dateEmission.before(d);
    }
  • Si vous avez utilisé des HashMap vous avez peut être besoin de récupérer la liste des objets contenus comme par exemple :
    public void detruireMessages(int i) {
       for (Boite b : boites.values()) {
           b.detruire(i);
       }

Responsabilités et Couplages

Déplacé dans td4 !

1)
utilisez simplement eclipse pour générer la stucture des commentaires par exemple
2014_2015/s3/concprogobjet/td/td3.txt · Last modified: 2015/02/16 08:45 by blay