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 bus logiciel est maintenant composé de boîtes à messages.
L'objectif est ici de décomposer l'application pour que :
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 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.
Pour vous aider voici un exemple possible du programme principal dont vous pouvez vous inspirer :
Controleur c = new Controleur(); c.start();
Et pour le contrôleur :
public class Controleur { RegistreDeBus registre = new RegistreDeBus(); UI ui = new UI(); public void start() { String commande = ui.lireCommande(); switch (commande.charAt(0)) { case 'c': creerBus(); start(); break; case 'b': creerBoite(); start(); break; ..... private void creerBus() { String nomDuBus = ui.getNomDuBus(registre.getNomsBus()); boolean reussi = registre.creerBus(nomDuBus); if (!reussi) ui.afficher("Erreur le bus existe déjà"); else ui.afficher("Bus " + nomDuBus + " créé"); }
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.
Vous pouvez utiliser le code suivant. Pour l'utiliser il suffit que vos classes “implements Serializable'.
Exemple de sauvegarde :
Memoire.save(registre, NomFichier);
Exemple de lecture :
Object o = Memoire.read(NomFichier); if (o != null) if (o instanceof RegistreDeBus) registre = (RegistreDeBus) o; }
Le 17 octobre à minuit
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 :
ArrayList<Message> messagesContenus = new ArrayList<Message>(messages); for (Message m : messagesContenus) { if (m.perime(i)) { m.detruire(); messages.remove(m); }
public boolean estPerime(int second){ Date d = new Date(); long ms = d.getTime(); ms = ms - second*1000; d.setTime(ms); return this.dateEmission.before(d); }
public void detruireMessages(int i) { for (Boite b : boites.values()) { b.detruire(i); }