This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2015_2016:s3:concprogobjet:td:td2 [2015/09/30 11:13] blay [Rendus] |
2015_2016:s3:concprogobjet:td:td2 [2018/09/16 23:08] 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. |
- | * 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 boite de dépôt pour Mme Blay avec date limite : le 6 octobre à minuit. | + | * 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 |