Uploaded by zakiguelleh

C240-eMiage-juin-2022

advertisement
Consor um Interna onal e-Miage
Contrôle terminal
Session de décembre 2021
Nombre de pages : 3
Durée de l’épreuve : 2 heures
Code du Module : C240
In tulé du module : POO Avancée
Nom de l’enseignant : F. Fürst
Les documents papier sont autorisés.
[
Exercice 1 (6 points) : on veut développer un logiciel pour gérer des médicaments.
Deux interfaces ont déjà écrites (ci-dessous) pour représenter les molécules composant les
médicaments et les pa ents.
public interface Molecule{
public String getNom();
public String getFormule();
}
public interface Pa ent{
public float getPoids();
public int getAge();
}
Les médicaments peuvent être composés d’une molécule ou de plusieurs. S’ils sont
composés d’une seule molécule, ils portent le nom de ce e molécule, sinon ils ont une
dénomina on commune interna onale (DSI) donnée par l’OMS (Organisa on Mondiale de la
Santé). Parmi les médicaments, certains sont génériques (aucun brevet n’empêche de les
fabriquer) et d’autres non génériques. Les médicaments non génériques ont, en plus de la
DSI, un nom commercial, donné par l’entreprise qui les fabrique. Pour chaque médicament,
il faut pouvoir calculer la dose à fournir pour un pa ent, en fonc on de son âge et de son
poids.
En respectant au mieux les principes de la POO, écrivez du code perme ant de
représenter les médicaments dans le logiciel.
Exercice 2 (6 points) : Le patron de concep on Proxy vise à masquer un objet à un
autre objet qui l’u lise. Sur le diagramme suivant, l’objet client Customer
va u liser
RealSubject indirectement, en n’appelant que les méthodes d’un objet Proxy qui fait écran.
L’objet Proxy u lise un objet RealSubject qui implémente réellement l’interface Subject,
alors que le Proxy ne fait qu’appeler la méthode opera on du RealSubject après un prétraitement.
1
Plusieurs raisons peuvent rendre le patron Proxy u le. L’objet Proxy peut ainsi
réaliser divers traitements avant de lancer l’opéra on opera on(). Par exemple, si le
RealSubject est un programme qui donne accès à des pages Web, le Proxy peut contrôler
que les pages demandées ne sont pas bannies d’accès.
Dans cet exercice, on veut écrire un logiciel de ges on de fichier archive (du genre tar
ou zip), qui offrira plusieurs méthodes d’archivage. Il est nécessaire d’u liser l’interface
suivante pour représenter les différentes méthodes :
import java.io.File;
public interface Archivage{
/** return true si la décompression de l'archive dans le répertoire se passe bien, faux sinon
un échec peut venir d’un manque d'espace disque, de la présence d’un virus dans
l’archive, etc */
public boolean decompresse(File archive, File repertoire);
/** return true si la compression des fichiers dans l'archive réussit, faux sinon
un échec peut venir d’un manque d'espace disque, de fichiers contenant un virus, etc */
public boolean compresse(File[] fichiers, File archive);
}
Avant toute compression, il faut vérifier que les fichiers à archiver ne con ennent
aucun virus. Avant toute décompression, il faut vérifier que l’archive à décomprimer ne
con ent pas de virus. Différents programmes an virus sont disponibles, qui respectent tous
l’interface suivante :
import java.io.File;
public interface An virus{
/** renvoie null si le fichier f ne con ent aucun virus
ou un rapport textuel sinon */
public String scanne(File f);
}
D’autre part, on veut pouvoir changer d’an virus au cours de l’u lisa on du
programme d’archivage. U lisez le patron Proxy pour écrire le code correspondant, et
d’autres patrons si vous le jugez u le en expliquant la structura on de votre code avec un
schéma UML.
Exercice 3 (8 points) : le patron de concep on Chain of Responsability permet de lier
de façon modulaire et évolu ve des objets réalisant des traitements semblables ou
complétaires. Sur le schéma suivant, la classe Handler offre une méthode opera on qui
correspond à un traitement générique. Chaque Handler a un a ribut qui pointe vers le
Handler suivant et redéfinit la méthode opera on. En cas d’appel de la méthode opera on
d’un ConcreteHandler, le ConcreteHandler réalise le traitement s’il peut le faire, sinon, il fait
appel au Handler suivant. La chaine de responsabilité est cons tuée par tous les Handler qui
sont créés et chainés.
2
Voici deux classes qui offrent des méthodes d’affichage de la date courante selon le
calendrier grégorien et selon le calendrier romain qui commence à la fonda on de Rome
(753 avant JC).
public class AfficheurGregorien{
public void afficheDate(){
Calendar cal = Calendar.getInstance(); // on récupère la date courante
System.out.println(cal.get(Calendar.DAY_OF_MONTH)+"/"+
cal.get(Calendar.MONTH)+"/"+cal.get(Calendar.YEAR));
}
}
public class AfficheurRomain{
private String[] mois = {"Ianuarius","Februarius","Mar us","Aprilis",
"Maius","Iunius","Quin lis","Sex lis","September","October",
"November","December"};
public void affiche(int format){
Calendar cal = Calendar.getInstance(); // on récupère la date courante
System.out.println(cal.get(Calendar.DAY_OF_MONTH)+" "+
mois[cal.get(Calendar.MONTH)]+" "+(cal.get(Calendar.YEAR)+753));
}
}
3.1 Proposez du code objet correspondant au patron Chain of Responsability et
perme ant de faire afficher la date selon un format donné. (5 points)
3.2 On veut pouvoir u liser la chaine des objets affichant la date sans se soucier de la
façon dont ce e chaine doit être créée. Expliquez quel(s) patron(s) sont indiqués pour
résoudre ce problème et écrivez le code correspondant. (3 points)
3
Download