User Tools

Site Tools


2015_2016:s3:concprogobjet:td:td2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
2015_2016:s3:concprogobjet:td:td2 [2015/09/15 22:24]
blay [Responsabilités : Analyse et développement de la partie Métier]
2015_2016:s3:concprogobjet:td:td2 [2018/09/16 23:06]
blay [Architecture : Persistance simplifiée]
Line 13: Line 13:
    * Un agent peut demander s'il existe un bus de nom donné.    * Un agent peut demander s'il existe un bus de nom donné.
    * Un agent peut lister les noms des bus existants.    * Un agent peut lister les noms des bus existants.
-   * Un agent demande à créer une boîte à messages associée à un bus en précisant de la boite. Si la boite existe déjà, il ne se passe rien. +   * Un agent demande à créer une boîte à messages associée à un bus en précisant ​le nom de la boite. Si la boite existe déjà, il ne se passe rien. 
-   * Un producteur envoie un message vers un bus et éventuellement vers  une boîte de messages spécifique du bus, en précisant leurs noms et le contenu du message.+   * Un producteur envoie un message vers un bus et éventuellement vers  une boîte de messages spécifique du bus, en précisant leurs noms et le contenu du message. En l'​absence de boîte de message, le message est posté dans la boite par défaut.
    * Un consommateur peut demander à lire des messages qui se trouvent dans une boîte sur un 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.    * Un consommateur peut demander à lire tous les messages qui se trouvent sur le bus.
Line 44: Line 44:
       - Je crée une  boite "​Circulation"​ sur le bus "​NiceInformation"​       - Je crée une  boite "​Circulation"​ sur le bus "​NiceInformation"​
       - Je poste un message "​Embouteillage"​ dans la boite "​Circulation"​ du bus "​NiceInformation"​       - Je poste un message "​Embouteillage"​ dans la boite "​Circulation"​ du bus "​NiceInformation"​
-      - Je poste un message "​Nouveau rond point" dans la boite "​Circulation"​.+      - Je poste un message "​Nouveau rond point" dans la boite "​Circulation" ​du bus  "​NiceInformation"​ ((pareil pour le bus "​AntibesInformation",​ ça passe? ))
       - Je lis les messages qui se trouvent dans la boite "​Circulation",​ i.e. je récupère les messages.       - Je lis les messages qui se trouvent dans la boite "​Circulation",​ i.e. je récupère les messages.
 +      - Je demande à effacer les messages de la boite  "​Circulation"​ du bus  "​NiceInformation"​ ((pareil pour le bus "​AntibesInformation",​ ça passe? ))
       - Je poste un message "​SoireeIUT"​ sur le bus "​NiceInformation"​       - Je poste un message "​SoireeIUT"​ sur le bus "​NiceInformation"​
-      - je demande à effacer le message "​Embouteillage"​. 
       -  J'​attends 2s (Thread.sleep(2000));​       -  J'​attends 2s (Thread.sleep(2000));​
       - Je poste un message "​SoireeIntegrationIUT"​ sur le bus "​NiceInformation"​       - Je poste un message "​SoireeIntegrationIUT"​ sur le bus "​NiceInformation"​
       -  J'​attends 2s (Thread.sleep(2000));​       -  J'​attends 2s (Thread.sleep(2000));​
-      - <​Optionnel>​ Je demande à effacer tous les messages postés depuis plus de 4s. +      - <​Optionnel>​ Je demande à effacer tous les messages postés depuis plus de 4s sur le bus "​NiceInformation"​ 
-  - 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.+  - Regardez vos codes, et vérifiez que vous avez bien respecté la [[https://​fr.wikipedia.org/​wiki/​Loi_de_D%C3%A9m%C3%A9ter|loi de Demeter]]((Quand on l'aura vu en cours)). Si ce n'est pas le cas, corrigez vos codes.
   - Comment avez-vous géré la boîte par défaut? (Avez-vous pensé à définir des constantes?​)   - Comment avez-vous géré la boîte par défaut? (Avez-vous pensé à définir des constantes?​)
   - Pouvez-vous décrire chacune de vos classes avec une seule phrase? Faîtes-le dans les commentaires de vos classes.   - Pouvez-vous décrire chacune de vos classes avec une seule phrase? Faîtes-le dans les commentaires de vos classes.
- 
  
 ===== Architecture : Interface graphique et contrôleur ===== ===== Architecture : Interface graphique et contrôleur =====
 L'​objectif est ici de décomposer l'​application pour que :  L'​objectif est ici de décomposer l'​application pour que : 
-   * L'​interface n'​interagit jamais directement avec le métier +   * Le **programme principal** consiste à créer créer un controleur ​et à le démarrer. 
-   * Le contrôleur joue le rôle de chef d'​orchestre entre le métier ​et l'​interface.+<code java> 
 + public static void main(String[] args) throws Exception { 
 + Controleur c = new Controleur();​ 
 + c.start();​ 
 + }
  
-Pour se concentrer sur l'​architecture,​ l'​interface est une classe Java qui utilise ''​Scanner''​ pour lire au clavier et ''​System.out.print...''​ pour l'​affichage. 
-Vous pouvez vous inspirer du {{:​2015_2016:​s3:​concprogobjet:​td:​ui.java|code ci-joint}}. 
- 
-Le contrôleur n'a pas le droit de modifier la partie métier sans passer par des objets métiers. Il n'est pas autorisé à stocker la liste des bus etc. Pensez à utiliser le principe de délégation. 
- 
-  - Développez le code correspondant. **[[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=2015_2016:​s3:​concprogobjet:​td:​td2&#​aide|Utilisez les informations et codes donnés]]** ci-dessous. 
-  - Quel type de contrôleur avez-vous défini en respectant les directives données? Est-il "​bon"?​ Que feriez-vous sinon pour l'​améliorer?​ 
-  - Vous devez à présent pouvoir jouer le scénario précédent en utilisant votre interface graphique. 
-  - Visualisez vos codes sous la forme de diagrammes de séquences.\\ ''​Outils => Code => Instant Reverse to sequence diagram''​ {{ :​2015_2016:​s3:​concprogobjet:​td:​tosequencediagram.png?​300 |}} 
-  - Pouvez-vous décrire chacune de vos classes avec une seule phrase? Faîtes-le dans les commentaires de vos classes. 
-==== aide ==== 
-**Pour vous aider** voici un exemple possible du programme principal dont vous pouvez vous inspirer :  
-<code java> 
-    Controleur c = new Controleur();​ 
-    c.start(); 
 </​code>​ </​code>​
- +   * L'​**interface** n'​interagit jamais directement avec le métier. ​ 
-Et pour le contrôleur : +       * Elle ne connait pas non plus le contrôleur ​dans cet exercice.  
 +       * Voici{{:2015_2016:​s3:​concprogobjet:​td:​userconsole.java| un exemple de code pour l'​interface}}. Pour se concentrer sur l'​architecture,​ l'​interface est une classe Java qui utilise ''​Scanner''​ pour lire au clavier et ''​System.out.print...''​ pour l'​affichage. 
 +   * Le **contrôleur** joue le rôle de chef d'​orchestre entre le métier et l'​interface.  
 +       * Il ne peut pas utiliser System.out...;​ tout affichage passe par l'​interface. 
 +       * Il n'a pas le droit de modifier la partie métier sans passer par des objets métiers.  
 +       * Il n'est pas autorisé à stocker la liste des bus etc. Pensez à utiliser le principe de délégation. 
 +       * Voici des extraits de code pour vous aider ci-après.
 <code java> <code java>
 public class Controleur { public class Controleur {
-    ​RegistreDeBus ​registre = new RegistreDeBus(); +    ​ 
-    ​UI ​ui = new UI();+ private Gestionnaire ​registre = new Gestionnaire(); 
 + private UserConsole ​ui = new UserConsole();
  
-    public void start() {+    public void start() ​throws Exception ​{
         String commande = ui.lireCommande();​         String commande = ui.lireCommande();​
         switch (commande.charAt(0)) {         switch (commande.charAt(0)) {
-        ​case '​c'​+            ​case UserConsole.COM_CREER_FORUM
-            ​creerBus(); +                ​creerForum(); 
-            start(); +                start(); 
-            break; +                break; 
-        case '​b'​+            case UserConsole.COM_CREER_CANAL ​
-            ​creerBoite(); +                ​creerCanal(); 
-            start(); +                start(); 
-            break; +                break; 
-..... +            case UserConsole.COM_POSTER_MESSAGES:​ 
- +                ​posterMessage(); 
-private void creerBus() { +                start(); 
-        ​String nomDuBus = ui.getNomDuBus(registre.getNomsBus()); +                ​break;​ 
-        ​boolean reussi = registre.creerBus(nomDuBus); +            case UserConsole.COM_LIRE_MESSAGES:​ 
-        ​if ​(!reussi+                lireMessage(); 
-            ui.afficher("​Erreur le bus existe déjà"); +                start()
-        else +                break; 
-            ui.afficher("​Bus " + nomDuBus + " créé"); +            ​case UserConsole.COM_STOP:​ 
-    }+                ​ui.afficher("​Au revoir ​"); 
 +                ​Memoire.save(registre,​ "​sauvegarde.txt"​);​ 
 +                exit(0); 
 +                break; 
 +            ​default : 
 +                ​ui.afficher("​La commande spécifiée n'​existe pas\n"); 
 +                ​sleep(1000);​ 
 +                start(); 
 +        }}
 </​code>​ </​code>​
  
 +
 +  - Développez le code correspondant. ​
 +  - Quel type de contrôleur avez-vous défini en respectant les directives données? ​
 +  - Vous devez à présent pouvoir jouer le scénario précédent en utilisant votre interface graphique.
 +  - Visualisez votre code correspondant à la création d'un forum sous la forme d'un diagramme de séquences.\\ ''​Outils => Code => Instant Reverse to sequence diagram''​ {{ :​2015_2016:​s3:​concprogobjet:​td:​tosequencediagram.png?​300 |}}
 +  - Pouvez-vous décrire chacune de vos classes avec une seule phrase? Faîtes-le dans les commentaires de vos classes.
  
 ===== Architecture : Persistance simplifiée ===== ===== Architecture : Persistance simplifiée =====
-1- On désire sauvegarder l'​ensemble des bus à chaque fin d'​exécution du programme principal et recharger l'​état des bus à chaque lancement du programme principal.+1- On désire sauvegarder l'​ensemble des forums ​à chaque fin d'​exécution du programme principal et recharger l'​état des forums ​à chaque lancement du programme principal.
  
 Vous pouvez utiliser le {{:​2015_2016:​s3:​concprogobjet:​td:​memoire.java|code suivant}}. Pour l'​utiliser il suffit que vos classes "​implements Serializable'​. Vous pouvez utiliser le {{:​2015_2016:​s3:​concprogobjet:​td:​memoire.java|code suivant}}. Pour l'​utiliser il suffit que vos classes "​implements Serializable'​.
Line 122: Line 131:
 <code java> <code java>
         Object o  = Memoire.read(NomFichier);​         Object o  = Memoire.read(NomFichier);​
-        ​if (o != null) +        if (o instanceof ​Gestionnaire){ 
-            ​if (o instanceof ​RegistreDeBus+                registre = (Gestionnaire) o;}
-                registre = (RegistreDeBus) o;+
     }     }
 </​code>​ </​code>​
Line 139: Line 147:
 <box round rgb(150,​290,​190) rgb(198,​226,​150) 75%| Le ...  >  <box round rgb(150,​290,​190) rgb(198,​226,​150) 75%| Le ...  > 
   * 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 [S3T][TD3] Noms des participants au rendu :   * 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 [S3T][TD3] Noms des participants au rendu :
 +  * De préférence utilisez la [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20150930110658584420|boite de dépôt]] pour Mme Blay avec date limite :  le 6 octobre à minuit.
   * Le rendu consiste en :    * Le rendu consiste en : 
        - Un document contenant ​        - Un document contenant ​
Line 180: Line 189:
        }        }
 </​code>​ </​code>​
- 
  
2015_2016/s3/concprogobjet/td/td2.txt · Last modified: 2018/09/16 23:08 by blay