Agenda hospitalier
TD/TP programmation Java ESSI1
(6 semaines)



L'objectif essentiel de ces  6 semaines est d'approfondir  sur un sujet fil rouge les points présentés au premier trimestre, d'utiliser des bibliothèques java existantes.
Vous travaillerez en binôme.
Les différents points doivent être abordés dans l'ordre donné. Les sujets des semaines postérieures à la semaine en cours sont succeptibles d'être amendés si besoin est.
La dernière semaine vous ferez à vos encadreurs une présentation de l'ensemble de ces TPs afin de faire un bilan de vos connaissances et de vos difficultés.

Objectif de l'application finale

Votre application doit permettre à une standardiste de l'hopital de
saisir de nouveau Rendez Vous dans les différents services de l'hopital
lister les Rendez Vous d'un service ou pour un patient donné
annuler un Rendez Vous


Un peu de révisions : héritage, variables statiques, etc.
(1ère semaine)

Les rendez-vous

 
Un rendez-vous a lieu à une heure, un jour donné pour un patient donné.
Chaque fois qu'un nouveau rendez-vous est créé, un message nous confirme la date et l'heure du rendez-vous pris.
Redéfinir l'affichage d'un RendezVous afin d'obtenir la représentation suivante :Patient jean : le 11 Decembre 2000 a 1:59:30.
Nous vous suggérons d'utiliser et de bien regarder les classes Date et Calendar en Java.
Question 1 : définir la classe RendezVous
Des rendez-vous plus spécifiques
On voudrait associer à tout rendez-vous, un service de consultation (pédiatrie, cardiologie, ...) ce qui détermine alors la durée du rendez-vous et son lieu.
Par exemple une consultation en pédiatrie dure 20 minutes et a lieu dans une salle adaptée aux enfants, une consultation en radiologie est de 30 minutes et se pratique en salle de radiologie.
Pour ce faire vous devez répondre au minimum aux exigences suivantes :
    La durée et le type de salle d'une sorte de rendez-vous sont alors fixés pour toutes les instances de la classe.
    Chaque fois qu'un rendez-vous est créé, il est ajouté à la liste des instances de cette classe.
    Une méthode prendreRendezVous qui adressée à une sous-classe de RendezVous avec pour paramètre une date, une heure et un patient, n'en retourne une instance que si un rendez-vous n'a pas déja été pris à cette même heure dans le service concerné. On ne veut pas que quiconque puisse créer un RendezVous par new. On passera nécessairement par prendreRendezVous.
Utilisez correctement l'héritage, le mode des variables et des méthodes, les variables statiques et n'oubliez pas les règles de base de la programmation Java

Remarques

Si  vous avez une autre architecture à  proposer qui réponde aux fonctionnalités requises, libre à vous de l'implémenter et de la justifier lors de la démo.

La classe Calendar est une classe standard de Java qui permet de gérer des dates complexes, utilisez la de façon simple pour faciliter le formattage de l'affichage d'une date. si vous choisissez une autre représentation des dates, à vous de la justifier lors de la démo.
 


Un peu d’algorithmique
(2ème semaine)

Les agendas

Un agenda Hospitalier contient les rendez-vous par service.
Il est nécessaire d'accéder rapidement à un rendez-vous donné
De plus l’hopital souhaite avoir un suivi des rendez-vous annulés.
Dans ce contexte nous vous demandons de regarder au moins  les classes et interfaces Java suivantes : HashTable, Stack, List, Collection, SortedMap, TreeMap afin de vous faire un avis précis sur les apports de chaque type de données.
Vous choisirez le type de données qui vous parait le plus adapté à vos besoins et justifierez votre choix.

Remarques

Cette partie doit vous permettre de vous familiariser avec les classes de structure de données proposées dans Java.
Si vous avez terminé une implémentation des rendez vous pris lors de la première selmaine, à vous de choisir la structure de  données adaptée aux rendez vous annulés.
Cette partie n'implique pas la création d'une classe Agenda, à vous de déterminer où les structures de données doivent être placées au mieux.


Les entrées/sorties Java : le package java.io
(3ème semaine)

L’hopital souhaite sauvegarder sur Fichier les rendez vous annulés ou enregistrés à votre guise

Les Classes standards à manipuler :

Pour la sauvegarde sur fichier : Regarder les classes File, FileReader, FileWriter, FileInputStream, FileOutputStream

Pour les entrées sorties en général : DataInputSteam, DataOutputStream
Pour traiter les objets, regarder ObjectOutputStream et ObjectInputStream
Attention au traitement d'exceptions il est primordial : un fichier peut être vide, ne pas exister, il peut y avoir des problèmes pour sauvegarder un objets
N'hésitez pas à consulter le tutorial
 
Un premier exercice pour vous familiariser avec les fichiers : Faire un petit programme de test qui
crée un rendez vous,
l'affiche,
le sauvegarde dans un fichier,
le relis et
l'affiche à nouveau.
Expérimentez les 3 approches suivantes, sauvegarde de :
 une chaine de caractères : le "toString" du rendez vous
 un après l'autre les éléments de l'instance
 l'objet dans sa totalité
Dans le troisième cas, que se passe-t-il si la classe n'est pas Serializable ?
Comparer avantages et inconvénients des 3 cas.

Remarques

Cette partie doit vous permettre de vous familiariser avec les E/S fichiers, sacahant que tous les modèles d'entrées/sorties (réseau, écran) reposent sur le même principe.
Vous devez pouvoir recharger une liste de Rendez Vous.
 


Le graphique
(4ème semaine)



Faire une IHM simple qui permette la prise et l'annulation de rendez vous.
De plus  on souhaite à chaque prise de rdv ou annulation de rendez vous être automatiquement informé sur une interface graphique de suivi des rendez vous.

Pour faire des interfaces graphiques, il est important de bien utiliser :

la programmation par événements
la bibliothèque SWING
les applets et puis les beans

On va décomposer le problème en faisant de petits exercices. de chacun de ces points

Programmation par événements

Ce type de programmation permet de conserver une indépendance forte entre l'objet graphique et l'objet d'implémentation ce qui permet de facilement modifier la partie graphique sans remettre en cause la logique de l'application.

Exo 1 : mise en oeuvre du pattern Observer/Observable

Soit une classe qui observe un rendez vous et qui affiche en texte les changements d'horaire d'un rendez vous pris.
Grace à l'achitecture des observer/observables vous pourrez facilement ajouter de nouveaux observeurs pour signaler de façons différentes les mise à jour.

 

Exo 2 : mise en oeuvre du même pattern mais avec des Souces et des Listeners

Définir un bouton dont l'action du click entraîne l'affichage du rendez vous par défaut dans un label.

Soignez votre architecture vous devez avoir défini
une classe pour le bouton, une classe pour le label, une interface de BoutonListener, un évenement spécifique et une classe de Test.
Comme dans l'exercice précédent testez l'ajout de listeners.

Comparez la souplesse des deux solutions.



Bibliothèque SWING

Une bibliothèque ça ne s'apprend pas ça s'expérimente...

Juste un petit exercice et une référence précieuse le tutorial
Faites une petite IHM qui permette soit de saisir un nouveau rendez vous
soit de lister les rendez vous dans un service.
Il peut s'agir de 2 boutons (onglets) ou d'un menu.
Utiliser une check box pour le choix du service, un text field pour saisir le nom du patient, une liste déroulante pour les créneaux horaires.


Applets

Vous en avez déjà fait. Mais oui ! Mais oui ! Souvenez vous, il fallait remplir un drôle de fichier lors du TP sur les objets...

Regardez votre IHM sous netscape


Programmation par composants

La programmation par objets c'est bientôt dépassé la programmation par composants devient le top et tout ça à cause des Java Beans

Pour avoir une idée de ce qui vous attend lancez VisualAge et jouer avec le composer graphique.

Congés payés
(5ème semaine)

 

Cette semaine doit vous permettre de terminer l'application.

Vous aurez un encadrement faible (qui a dit comme d'habitude!).
Vous pourrez joindre vos encadreurs par email (pinna@essi.fr / lito@essi.fr)

Evaluation Croisée
(6ème semaine)

 
Par groupe de 2 binômes, vous devez remplir la fiche idoine pour évaluer le travail fourni par l'autre binôme.

Rendu du TP et de la fiche d'évaluation
Vous devrez déposer dans /net4/essi1/tp_fil_rouge/binome, où binome est le nom d'un des deux membres du binôme:
- une archive agenda.tar
- la fiche d'évaluation evalBinome.html faite par votre binôme sur le binôme binome

Ceci doit être déposé avant le lundi 25 mars 2002 à 24h.