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
2015_2016:s3:concprogobjet:td:td2 [2015/09/16 15:02]
blay
2015_2016:s3:concprogobjet:td:td2 [2018/09/16 23:08] (current)
blay [Architecture : Persistance simplifiée]
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"​.+      - 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"​
       -  J'​attends 2s (Thread.sleep(2000));​       -  J'​attends 2s (Thread.sleep(2000));​
Line 52: Line 52:
       -  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 sur le bus "​NiceInformation"​       - <​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 {{:2018_2019:​s3:​concprogobjet:​memoire.java|le code suivant}}. Pour l'​utiliser il suffit que **vos classes "​implements Serializable'​**.
  
 **Exemple de sauvegarde :** **Exemple de sauvegarde :**
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 ​
2015_2016/s3/concprogobjet/td/td2.1442408560.txt.gz · Last modified: 2015/09/16 15:02 by blay