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 revisionPrevious revision
Next revision
Previous revision
2015_2016:s3:concprogobjet:td:td2 [2015/09/16 14:21] – [Responsabilités : Analyse et développement de la partie Métier] blay2015_2016:s3:concprogobjet:td:td2 [2018/09/16 21:08] (current) – [Architecture : Persistance simplifiée] blay
Line 58: Line 58:
 ===== 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 121: 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 138: 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.1442413309.txt.gz · Last modified: 2015/09/16 14:21 by blay