L3 MIME 2006 – Programmation Objets – partiel 1 Exercice 1. Définitions Question 1.1. Programmation objet Définir les mots ci-dessous. Justifiez votre réponse à l’aide d’un exemple. 1. objet 6. attribut 2. classe 7. interface 3. héritage 8. méthode statique 4. méthode 9. protection (public, privée, protégé, défaut) 5. méthode abstraite 3min/déf → 45min 5pts Question 1.2. UML Définir et illustrer par un diagramme UML les mots suivants : 1. classe, attribut, méthode 4. composition 2. héritage 5. multiplicité 3. agrégation 6. réalisation d’une interface Exercice 2. Java 20min Écrire, en langage Java, deux classes A et B telles que : 3pts – La classe B hérite de la classe A ; – la classe A possède : – un attribut entier x visible seulement par ses classes filles ; – un constructeur affectant une valeur à l’attribut x ; – une méthode triple renvoyant la valeur de x multipliée par 3 si x6= 0. – La classe B possède : – un attribut entier y visible que dans la classe B ; – un constructeur affectant une valeur aux attributs x et y ; – une méthode divise revoyant la valeur de y divisée par le triple de la valeur y quand cela est possible. Tous les choix seront justifiés à l’aide de commentaires Javadoc. Exercice 3. Dériveur symbolique Dans cet exercice, nous réalisons un dériveur symbolique pour la fonction puissance : (un )0 = nun−1 u0 avec u une fonction dérivable et n ∈ et n 6= 0. 6pts N 20min 1. Compléter le diagramme de classes UML (figure 1 sur la page 3). Justifier toutes les 3pts réponses. 30min 2. Écrire les classes Expression, Symbole et Puissance. Justifier les différents choix. 3pts 1pt/classe L3 MIME 2006 – Programmation Objets – partiel 2 Exercice 4. Factory Contexte 60min 6pts Une application de bureautique peut manipuler plusieurs formats de fichiers. Chaque format de fichier est décrit dans une classe distincte. Ces classes héritent toutes d’une classe Document. Par exemple, le format RTF est géré par une classe RtfDocument, le format MS Word est géré par une classe DocDocument. De plus, l’utilisateur peut installer de nouvelles classes de formats en faisant des mises à jour de l’application. Dans ce contexte, l’application ne peut connaı̂tre de façon définitive tous les formats disponibles. Se pose alors le problème suivant : Comment instancier la bonne classe lors du chargement d’un fichier sachant que l’on connaı̂t le nom de ce dernier ? Solution La solution au problème précédent est d’utiliser le design pattern Factory (Usine). Ce pattern permet fabriquer dynamiquement un objet implémentant une interface donnée en fonction d’un ou plusieurs paramètres. Par exemple, une DocumentFactory peut fabriquer un document du bon format si nous lui passons en paramètre le nom d’un fichier. Pour cela, la factory détecte l’extension du fichier puis tente d’instancier une classe dont le nom est construit en concaténant l’extension du fichier à la chaı̂ne ((Format)). Par exemple, si le nom du fichier donné en argument est ((unfichier.rtf)) alors la factory renvoie une instance de classe RtfFormat (((Rtf)) + ((Format))). Question 4.1. Conception Décrire complètement le design pattern Factory à l’aide de diagramme(s) UML. Ne pas oublier le cas où le format n’est pas disponible. Cette description sera justifiée. 30min Question 4.2. Programmation Programmer, en langage Java, une factory construisant des instances de l’interface DocumentFormat en fonction d’un chaı̂ne codant le format : DocDocument, RtfDocument, HtmlDocument, ... Votre programme sera justifié. 30min java.lang.Number 1 1 Nombre +deriver(Symbole variable) : Derivable 1 1 Puissance +deriver(Symbole variable) : Derivable 1 1 <<interface>> Derivable +deriver(Symbole variable) : Derivable Expression +deriver(Symbole variable) : Derivable OperationBinaire +deriver(Symbole variable) : Derivable 2 java.lang.String 1 1 Symbole +deriver(Symbole variable) : Derivable +estVariableDeDerivation() : boolean 1 Multiplication +deriver(Symbole variable) : Derivable L3 MIME 2006 – Programmation Objets – partiel 3 Fig. 1 – Diagramme de classes UML du dériveur à compléter. (Ajoutez vos nom, prénom et numéro d’étudiant)