User Tools

Site Tools


2018_2019: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
2018_2019:s3:concprogobjet:td:td2 [2018/09/18 08:50]
blay [Tuyaux]
2018_2019:s3:concprogobjet:td:td2 [2018/10/05 10:57] (current)
blay [Rendus]
Line 23: Line 23:
  
  
-<note tip>Les questions ci-après sont là pour vous guider dans le développement. Il n'est pas demandé d'y répondre par écrit. </​note>​+<note tip>Les questions ci-après sont là pour vous guider dans le développement. Il n'est pas demandé d'y répondre par écrit. 
 + 
 +Utilisez **SonarLint** pour vous aider à améliorer vos codes, [[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=2018_2019:​s3:​methodo:​td:​env1|vous l'avez installé en 1e semaine]] !  
 + 
 +Pour les S3A :​[[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=2018_2019:​s3:​concprogobjet:​td:​s3atd1#​generation_des_codes_10_mn| Utiliser la génération de code.]] 
 + 
 +A la fin de cette page, vous avez des "​tuyaux"​ pour manipuler des listes et des HashMap ​</​note>​
 **Dans ce qui suit //​responsable//​ est utilisé au sens de GRASP.** **Dans ce qui suit //​responsable//​ est utilisé au sens de GRASP.**
  
   - Quels modèles utilisez-vous pour analyser le problème ?   - Quels modèles utilisez-vous pour analyser le problème ?
-  - 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.  ​+  - 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. Cela ne signifie pas que vous devez modéliser tous les diagrammes de séquences.  ​
   - Qui est responsable de retrouver à partir de son nom un forum? un canal de messages? (Pattern expert)   - Qui est responsable de retrouver à partir de son nom un forum? un canal de messages? (Pattern expert)
   - Qui est responsable de créer un forum? un canal de message? pourquoi? ​ (Pattern créateur)   - Qui est responsable de créer un forum? un canal de message? pourquoi? ​ (Pattern créateur)
Line 118: Line 124:
   - Quel type de contrôleur avez-vous défini en respectant les directives données? ​   - 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.   - 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 (et uniquement ​cette partie) sous la forme d'un diagramme de séquences.\\ ​''​Outils => Code => Instant Reverse to sequence diagram''​ {{ :​2015_2016:​s3:​concprogobjet:​td:​tosequencediagram.png?​300 |}}+  - Visualisez votre code correspondant à la création d'un forum (et uniquement ​cela) sous la forme d'un diagramme de séquences.\\ ​
   - 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.
  
Line 139: Line 145:
     }     }
 </​code>​ </​code>​
- 
- 
-==== 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> 
-public class Controleur { 
-    RegistreDeforum registre = new RegistreDeforum();​ 
-    UI ui = new UI(); 
- 
-    public void start() { 
-        String commande = ui.lireCommande();​ 
-        switch (commande.charAt(0)) { 
-        case '​c':​ 
-            creerforum();​ 
-            start(); 
-            break; 
-        case '​b':​ 
-            creerBoite();​ 
-            start(); 
-            break; 
-..... 
- 
-private void creerforum() { 
-        String nomDuforum = ui.getNomDuforum(registre.getNomsforum());​ 
-        boolean reussi = registre.creerforum(nomDuforum);​ 
-        if (!reussi) 
-            ui.afficher("​Erreur le forum existe déjà"​);​ 
-        else 
-            ui.afficher("​forum " + nomDuforum + " créé"​);​ 
-    } 
-</​code>​ 
- 
  
  
Line 189: Line 157:
 ===== Rendus ===== ===== Rendus =====
  
-<box round rgb(150,​290,​190) rgb(198,​226,​150) 75%| Le 17 octobre à minuit ​>+<box round rgb(150,​290,​190) rgb(198,​226,​150) 75%| Le octobre à 19h , le 18 octobre à 17h pour les S3A>
  
-  * Utilisez la [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20150930110658584420|boite de dépôt]] pavec date limite : le 17 octobre à minuit.+  * Utilisez la [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20150930110658584420|boite de dépôt]] pavec date limite : le octobre à 19h pour les S3T, le 18 octobre à 17h pour les S3A
   * Le rendu consiste en :   * Le rendu consiste en :
-      - Un document contenant +      - Un **document** contenant 
-        ​votre modèle((Modèle = diagrammes UML)) final (Tout le monde n'​aboutit pas au même modèle, c'est certain, bien mettre des diagrammes pas le projet Modelio) +        ​votre modèle((Modèle = diagrammes UML)) final (Tout le monde n'​aboutit pas au même modèle, c'est certain, bien mettre des diagrammes pas le projet Modelio) 
-        ​des explications sur les raisons de ce modèle, les choix que vous avez faits et les leçons apprises. +        ​des explications sur les raisons de ce modèle, les choix que vous avez faits et les leçons apprises. ​((Si c'est bien fait vous commencez votre carnet de bord! )) dont, 
-      Les codes et les tests en particulier les tests JUNIT; +               ​Explications sur le couplage 
-      Il est préférable que les codes soient commentés en respectant les consignes ​d'une javadoc mais ce n'est pas essentiel (([[https://​www.jetbrains.com/​help/​idea/​2016.2/​creating-documentation-comments.html|Utiliser IntelliJ pour vous aider à commenter ​les méthodes]]))+               ​Le rôle du contrôleur 
 +        - La couverture de tests (copie(s) ​d'écran par exemple), elle n'est pas forcément excellente, mais expliquez, si vous le pouvez, les choix que vous avez faits. 
 +      ​Les codes et les tests.
  
 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. 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.
Line 214: Line 184:
      //​Ajout d'un object dans la hasmap      //​Ajout d'un object dans la hasmap
      ​canaux.put(c.getNom(),​ c);      ​canaux.put(c.getNom(),​ c);
-     // obtenir les objets qui se trouvent dans la hashmap et les parcourir+     
      ​ArrayList<​Message>​ messageList = new ArrayList<>​();​      ​ArrayList<​Message>​ messageList = new ArrayList<>​();​
-     for (Canal c : canaux.values())+     // obtenir les objets qui se trouvent dans la hashmap (.values) ​ et les parcourir (for) 
 +    ​for (Canal c : canaux.values())
  messageList.addAll(c.getMessages());​  messageList.addAll(c.getMessages());​
 +
     // retrouver un objet de nom donné     // retrouver un objet de nom donné
     Canal c = canaux.get(nom);​     Canal c = canaux.get(nom);​
 +
     //Obtenir toutes les clefs (ici le nom des canaux)     //Obtenir toutes les clefs (ici le nom des canaux)
     Set<​String> ​ noms = canaux.keySet();​     Set<​String> ​ noms = canaux.keySet();​
Line 225: Line 198:
  
  
- +=== Pour manipuler des collections ===
- +
-   ​* ​Pour parcourir une ArrayList (le for qui suit)+
    * Pour effacer un element dans une liste si une condition est vérifiée :    * Pour effacer un element dans une liste si une condition est vérifiée :
 <code java> <code java>
Line 235: Line 206:
 </​code>​ </​code>​
  
-   ​* ​Pour pouvoir effacer dans une liste que l'on parcourt, il faut d'​abord en faire une copie +=== Pour gérer les dates ===
-<code Java> +
-ArrayList<​Message>​ messagesContenus ​new ArrayList<​Message>​(messages);​ +
-        for (Message m : messagesContenus) { +
-            if (m.perime(i)) { +
-                m.detruire();​ +
-                messages.remove(m);​ +
-            } +
-</​code>​+
    * Une manière "​facile"​ pour savoir si un message est périmé de plus de x secondes (utilisation de ''​java.util.Date''​): ​    * Une manière "​facile"​ pour savoir si un message est périmé de plus de x secondes (utilisation de ''​java.util.Date''​): ​
 <code java> <code java>
Line 254: Line 217:
     }     }
 </​code>​ </​code>​
-    * Si vous avez utilisé des HashMap vous avez peut être besoin de récupérer la liste des objets contenus comme par exemple :  +
-<code java> +
-    public void detruireMessages(int i) { +
-       for (Boite b : boites.values()) { +
-           ​b.detruire(i);​ +
-       } +
-</​code>​+
  
2018_2019/s3/concprogobjet/td/td2.1537253442.txt.gz · Last modified: 2018/09/18 08:50 by blay