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 [2018/09/16 22:44]
blay [Architecture : Interface graphique et contrôleur]
2015_2016:s3:concprogobjet:td:td2 [2018/09/16 23:08] (current)
blay [Architecture : Persistance simplifiée]
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. 
 +<code java> 
 + public static void main(String[] args) throws Exception { 
 + Controleur c = new Controleur();​ 
 + c.start();​ 
 +
 + 
 +</​code>​ 
 +   * L'**interface** n'​interagit jamais directement avec le métier. ​
        * Elle ne connait pas non plus le contrôleur dans cet exercice. ​        * Elle ne connait pas non plus le contrôleur dans cet exercice. ​
-       * Voici 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. +       * 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. ​+   * 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 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'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.        * 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.        * Voici des extraits de code pour vous aider ci-après.
- 
-  - 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>​ 
- 
-Et pour le contrôleur :  
 <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>​
2015_2016/s3/concprogobjet/td/td2.1537130679.txt.gz · Last modified: 2018/09/16 22:44 by blay