Академический Документы
Профессиональный Документы
Культура Документы
Le pattern Visitor, dfini dans le schma ci-dessous, permet de dfinir, pour diffrents
objets, diffrentes oprations mener sur ces objets, en dcouplant la reprsentation des
objets et les opraitions mener dessus. Chaque visiteur dfinit la faon dont il visite les
diffrents objets, et les diffrents objets peuvent accepter ou non la visite. La visite d'un
objet o par un visiteur v est dclenche par l'appel o.accept(v), appel qui doit dclencher
celui de la mthode de visite correspondante.
// Renvoie vrai si une maladie est diagnostiquee, faux sinon (maladie inconnue ou bonne sante)
public boolean diagnostic(){
double diag = Math.random();
if(diag > 0.5){
System.out.println("Maladie diagnostique chez le patient" + this.numSecu);
return true;
}
else{
System.out.println("Maladie non diagnostique chez le patient " + this.numSecu);
return false;
}
}
Les codes des classes correspondant aux professionnels de sant sont donns ci-aprs :
Sans modifier les classes prcdentes, crire les codes des classes Credule, Confiant et
Mefiant, sous-classes de Patient. Un patient crdule accepte toutes les visites, un patient
confiant accepte uniquement les visites des mdecins qui respectent le serment
d'Hippocrate et les visites des infirmires et un patient mfiant refuse la vaccination et
n'accepte que les visites des mdecins qui respectent le serment d'Hippocrate. Un refus
de visite doit entrainer le lancement d'une exception RefusDeVisiteException, qui doit
permettre de savoir quel patient a refus une visite et quel professionnel a t refus.
Ecrire galement la classe RefusDeVisiteException.
Le pattern Visitor complet permet de visiter des structures, selon le schma suivant :
Ecrire la classe EnsemblePatients qui encapsule un ensemble de patients stocks dans une
liste (la liste doit tre une liste gnrique instancie!) et implmente les mthodes
suivantes :
public void addPatient(Patient p) // ajoute un patient dans la liste
public void visite(ProfessionnelSante p) // fait visiter par p tous les patients de la liste
Correction
public class Credule extends Patient{
private ProfessionnelSante p;
private Patient pa;
private LinkedList<Patient> l;
public EnsemblePatients(){
this.l = new LinkedList<Patient>();
}