Université de Nice Sophia-Antipolis

Examen Java du 14 septembre 2004– Licence informatique

Durée : 2h.

Seuls documents autorisés : photocopies des transparents distribués en cours ; en particulier, les énoncés et corrections des TP sont interdits. Éteignez les téléphones portables.

Important : la présentation et la lisibilité du code compteront dans la note finale. Vous êtes autorisé à écrire le code (et seulement le code) avec un crayon à papier si c'est parfaitement lisible (pas de crayon trop clair).

Ajoutez des commentaires quand vous pensez que ça peut être utile au correcteur. Ne mettez pas de commentaires évidents qui n'ajoutent rien à votre code.

Respectez le découpage en questions et l'ordre des questions. Les numéros des questions devront apparaître clairement sur votre feuille.

Thème du sujet : site Web des supports de cours et TP fournis avec un cours.

Un enseignant souhaite offrir ses supports de cours et ses énoncés de TP sur son site Web personnel. Les supports de cours contiennent les transparents qu'il a utilisé pendant ses cours. Tous ces documents (supports de cours et TPs) sont enregistrés dans des fichiers entreposés sur l'ordinateur qui héberge le serveur Web de son site Web personnel. Pour simplifier on supposera qu'un document correspond à un et un seul fichier sur le disque. Ces fichiers sont repérés par leur emplacement relatif par rapport à la racine du site Web (par exemple, "cours1/support2.ppt" ou "cours1/tp1/index.html"). La racine du site Web est un emplacement dans l'arborescence des fichiers qui est connu par le serveur Web. Vous rangerez le chemin de la racine dans une constante d'une des classes que vous allez écrire.

Voici les propriétés et contraintes que vous devrez prendre en compte :

Remarque importante : dans chaque classe, interface ou morceau de code que vous écrirez ne mettez que le code indispensable pour répondre à la question ; n'ajoutez pas des fonctionnalités ou des propriétés non demandées.

Question 1 : (1 point) Écrivez une classe Cours très simple qui représente le cours auquel un support de cours est attaché. Un cours possède un identifiant (par exemple "SILM2S" ), un titre (par exemple "Programmation objet Java"), et c'est tout. N'ajoutez rien d'autre ; par exemple, il n'existe pas de méthode pour savoir quels sont les supports de cours et les TPs associés à ce cours.

Question 2 : (2 points) Écrivez une interface Java nommée Document pour représenter un document en général (support de cours ou TP). L'interface, et toutes les interfaces et classes qui seront écrites dans cet examen appartiendront au paquetage fr.unice.document ou à un sous-paquetage. N'oubliez pas de donner le paquetage de chaque classe ou interface que vous écrirez.

Question 3 : (2 points) Écrivez une classe DocumentImpl qui implémente cette interface. Devez-vous la déclarer abstraite ? Pourquoi ?

Question 4 : (4 points) Écrivez les classes SupportCours et TP. Écrivez en particulier des méthodes pour avoir

Question 5 : Pour éviter un oubli : indiquez dans quelle classe vous avez rangé la racine du site Web.

Question 6 : (2 points) Ajoutez des méthodes pour enregistrer dans un fichier et recharger en mémoire la Map qui contient tous les documents, entre 2 sessions de travail. Vous indiquerez dans quelle(s) classe(s) vous mettez ces méthodes et vous n'oublierez pas les exceptions.

Question 7 : (2 points) Écrivez une classe GUI dont la méthode main afficher l'interface graphique ci-dessous. Cette interface permet à l'enseignant de donner l'identificateur et le titre d'un nouveau support de cours. Il est lancé sur la machine qui héberge le site Web. Il utilise la librairie Swing.

Si l'utilisateur élargit la fenêtre, voici comment elle devra s'afficher :

Question 8 : (2 points) Voici ci-dessous une interface plus complète pour ajouter un nouveau document. On ne vous demande pas d'écrire du code (mais vous pouvez en écrire si vous voulez). Cependant, indiquez comment vous allez faire ranger l'emplacement du fichier dans une variable d'instance emplacement (elle contiendra par exemple la valeur "/u/toto/cours/tp1.html". Voici les points principaux à donner :

Question 9 : (3 points) Voici un morceau de code :

// doc est un support de cours ou un TP, ou tout autre document
Document doc;
Cours cours;
...
// Si le document est associé au cours,...
if (doc.getCours() == cours) {
  . . .
}
 

Écrivez les méthodes nécessaires pour que ce schéma puisse fonctionner. Pour chaque méthode, indiquez à quelle classe ou interface elle appartient. Expliquez brièvement où le polymorphisme est utilisé.

Question 10 : ( 2 points) Écrivez une classe Main qui a une méthode principale qui crée un TP, ajoute 2 mots-clés à ce TP et affiche le titre du cours associé à ce TP et la liste des mots-clefs du TP.