S3 : Conception et Programmation Objet Avancées
-
- Attention pensez au rendu de fin de module
Objectifs : Travailler, sur de petits exemples, différents points d'un développement pragmatique.
Le forum est maintenant composé de canaux.
Utilisez SonarLint pour vous aider à améliorer vos codes, vous l'avez installé en 1e semaine !
Pour les S3A : Utiliser la génération de code.
A la fin de cette page, vous avez des “tuyaux” pour manipuler des listes et des HashMap
Dans ce qui suit responsable est utilisé au sens de GRASP.
L'objectif est ici de décomposer l'application pour que :
public static void main(String[] args) throws Exception { Controleur c = new Controleur(); c.start(); }
Scanner
pour lire au clavier et System.out.print…
pour l'affichage.public class Controleur { private Gestionnaire registre = new Gestionnaire(); private UserConsole ui = new UserConsole(); public void start() throws Exception { String commande = ui.lireCommande(); switch (commande.charAt(0)) { case UserConsole.COM_CREER_FORUM: creerForum(); start(); break; case UserConsole.COM_CREER_CANAL : creerCanal(); start(); break; case UserConsole.COM_POSTER_MESSAGES: posterMessage(); start(); break; case UserConsole.COM_LIRE_MESSAGES: lireMessage(); start(); break; 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(); }}
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 code suivant. Pour l'utiliser il suffit que vos classes (gestionnaire, Message, Forum, …) implements Serializable.
Exemple de sauvegarde :
Memoire.save(registre, NomFichier);
Exemple de lecture :
Object o = Memoire.read(NomFichier); if (o instanceof Gestionnaire){ registre = (Gestionnaire) o;} }
Le 1 octobre à 19h , le 18 octobre à 17h pour les S3A
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.
Vous avez besoin dans ce TD de manipuler des collections et des dates, voici quelques tuyaux que vous pourriez retrouver sur le Web et qui sont extraits des codes que nous avons mis en oeuvre pour ce TD. Vous pouvez évidemment avoir d'autres solutions :
HashMap<String, Canal> canaux = new HashMap<>(); //Ajout d'un object dans la hasmap canaux.put(c.getNom(), c); ArrayList<Message> messageList = new ArrayList<>(); // obtenir les objets qui se trouvent dans la hashmap (.values) et les parcourir (for) for (Canal c : canaux.values()) messageList.addAll(c.getMessages()); // retrouver un objet de nom donné Canal c = canaux.get(nom); //Obtenir toutes les clefs (ici le nom des canaux) Set<String> noms = canaux.keySet();
public void detruireMessagePerime(int dureeEnSecondes) { messageList.removeIf(message -> message.estPerime(dureeEnSecondes)); }