Projet récapitulatif

IFT 630
Présenté à
Gabriel Girard
Par
Ghyslain Champagne
[ 05 620 900 ]
et
Maxime Samuel
[ 05 651 948 ]

Université de Sherbrooke, 2008-04-25
Table des matières

Introduction
Mise en marche
Présentation du logiciel
Définition globale
Hôpital
Concierge
Patients
Infirmières
Médecins
Description du logiciel
Description techniques
Découpage et découplage
Patrons de conception
Difficultés rencontrées
Exemples d’événements
Extrait 1 : Un patient est soigné
Extrait 2 : Un patient meurt
Extrait 3 : Une infirmière stabilise l’état d’un patient
Extrait 4 : Un médecin soigne un patient
Extrait 5 : Le concierge nettoie une chambre
Conclusion
Annexe
Exemple de sortie

Introduction
Afin de développer un projet pour le cours IFT630 (Processus concurrents et parallélisme), nous avons d’abord voulu revoir toutes les notions acquises dans le cadre de ce cours. 
Les notions acquises sont donc le partage de ressources entre fils d’exécution concurrents et l’exécution en parallèle de plusieurs tâches. Pour réaliser ce dernier objectif, nous avons cru bon de faire fonctionner l’application sur deux ordinateurs différents, fonctionnalité qui peut toutefois être ignorée, permettant ainsi à l’application de ne fonctionner que sur un seul ordinateur dont les différents processus partagent le temps accordé sur l’unité central de traitement.
Enfin, nous avons trouvé une idée de projet en s’inspirant des premiers travaux dont le but, quoique seulement académique, couvrait l’ensemble de la matière observé dans le cours. Ainsi avons-nous décidé de simuler les déplacements et les opérations prenant lieu dans un hôpital. Le dynamisme du déplacement des patients, des infirmières et des médecins nous permettaient ainsi de gérer plusieurs fils d’exécution concurrents qui tentent d’accéder à des mêmes ressources.

Mise en marche
Afin de faire fonctionner l’application, il suffit de monter le dossier soumis lors de la remise dans un « workspace » de « ecplise », sous forme de projet. Il est également possible d’exécuter l’application. Il est ainsi possible de recompiler le projet.
Pour l’exécution, un fichier binaire a déjà été prévu dans le répertoire «bin». Il suffit donc de lancer cette application en utilisant la ligne de commande suivante :
java -jar Hopital.jar [adresse IP de la file d’attente] [port]
java –jar FileAttente.jar [adresse IP de l’hôpital] [port]
Le code ci-haut prévoit que les deux applications s’exécutent sur des ordinateurs différents, que l’on doit appeler en spécifiant l’adresse ip et le port. Voici un exemple :
	java –jar Hopital.jar 192.168.1.1 6666
Puis, sur l’autre machine:
	java –jar FileAttente.jar 192.168.1.2 6667
Ou alors exécuter les deux applications localement en utilisant le jar prévu à cet effet :
	java –jar HopitalComplet.jar
 Le projet a été développé sous une plateforme Windows XP avec Eclipse 3.3.
Un exemple de sortie est disponible en annexe.

Présentation du logiciel
Définition globale
Notre logiciel simule donc des actions prenant effet dans un hôpital. Des patients sont échangés entre un processus « File d’attente » et un processus « Hôpital ».
Hôpital
L’hôpital gère l’ensemble des opérations. Le concierge se promène d’une chambre à l’autre et indique à la file d’attente une chambre libérée. L’hôpital contient également des infirmières et des médecins qui se promènent de chambre à chambre afin de stabiliser ou soigner les patients respectivement.
L’hôpital contient également un dépôt de médicament infini à partir duquel les infirmières vont chercher des médicaments pour les remettre dans les chambres.
Concierge
Notre concierge se prénomme Georges. Sa tâche est plus importante que dans un hôpital normal, puisqu’il sert de sentinelle afin de déterminer si une chambre est libre. Ainsi, le concierge fait le tour de chacune des chambres. Si un patient se trouve à l’intérieur, il ne fait que s’en aller. Toutefois, si un cadavre repose sur le lit d’hôpital, c’est lui qui s’occupe de disposer du corps pour ensuite nettoyer la chambre et avertir la file d’attente de l’urgence qu’une chambre est libre.
Une fois que la file d’attente reçoit le signal du concierge qu’une chambre est libre, elle lui assigne le patient le plus malade. Le patient peut entrer dans l’hôpital et espérer se faire stabiliser par une infirmière avant que la mort ne l’emporte.
Patients
Les patients sont créés dans la file d’attente qui se trouve à l’extérieur de l’entité hôpital. Ils sont traités en ordre de priorité, à savoir du plus malade au moins malade. Le concierge indique à la file d’attente qu’une chambre est libre pour un patient et le plus malade s’y dirige.
Un patient est en proie à des battements de cœurs qui désagrègent sa santé à chaque itération. Si l’état du patient n’est pas stabilisé avant la visite d’une infirmière, il risque de mourir dans sa chambre d’hôpital.
Le cœur d’un patient stabilisé continue de battre mais sa santé n’en est pas affectée.
Un patient reçoit sporadiquement la visite d’un médecin qui pourra le soigner en fonction des médicaments disponible dans la chambre où se trouve ledit patient.
Un patient guérit retrouve une santé parfaite et libère la chambre. La chambre attend ensuite la visite du concierge qui ira en avertir la file d’attente.
Infirmières
Une infirmière visite une chambre au hasard. Elle stabilise l’état du patient si un patient s’y trouve. Ceci a pour effet de cesser la baisse de santé du patient. L’infirmière vérifie aussi si le dépôt de médicaments disponible pour la chambre n’est pas plein. Si tel est le cas, elle ira en chercher dans le dépôt central de l’hôpital qui en contient une quantité infinie.
En fonction du temps qui s’écoule, une infirmière a droit à une pause café.
Médecins
Un médecin visite une chambre au hasard. Si un patient s’y trouve, il prend une quantité suffisante de médicaments et lui administre pour améliorer sa santé. S’il n’y a pas suffisamment de médicament dans le dépôt de la chambre, le patient ne retrouvera pas une santé parfaite et continuera d’occuper la chambre jusqu’à une prochaine visite du médecin qui pourra, peut-être, le soigner complètement.
En fonction du temps qui s’écoule, un médecin a droit à une pause café.

Description du logiciel
Description techniques
Afin de faciliter l’implémentation de fils d’exécution, nous avons choisi de développer l’application en Java. Ce langage implante les fils d’exécution et les techniques de synchronisation de manière intuitive. Une implémentation objet a été choisie puisque cette technique rend justice au choix de différents rôles se tenant dans l’hôpital.
Découpage et découplage
Le code a été découpé en suivant les bonnes techniques de programmation objet. Les concepts d’héritage et de polymorphisme ont également été utilisés pour favoriser la conception des différents rôles (infirmières, médecins).
Le découplage logique des différents objets a été déterminé en fonction des rôles (objets vivants ou objets non vivants).
Patrons de conception
Dans le cadre du projet, nous avons utilisés différents patrons de conception (design patterns). Notamment le patron de conception « Object Actif » en implantant une file de message à toutes les entités dérivant de la classe « ObjetVivant ». Un patron de conception « Singleton » a