TP : POO JAVA
On modélise une application devant servir à l’inventaire d’une bibliothèque. Elle devra traiter des
documents de nature diverse : des livres, des dictionnaires, et autres types de documents qu’on ne
connait pas encore précisément mais qu’il faudra certainement ajouter un jour (bandes dessinées,
dictionnaires bilingues, ...).
On d´définira une classe Bibliothèque réduite à la seule méthode main pour tester les différentes
classes de ce TP.
Exercice 1 Tous les documents possèdent un titre. Quand un document est créé, son titre est donné à
la création et par la suite, il ne change plus.
1. Définir la classe Document avec son constructeur public, et la propriété titre privée et son
accesseur.
2. On veut attribuer un numéro d’enregistrement unique dès que l’on crée un objet Document.
On veut que le premier document créé ait le numéro 0, et que ce numéro s’incrémente de 1 à
chaque création de document. Quelles propriétés faut-il ajouter à la classe Document ?
Lesquelles doivent-être static ? Les ajouter sans leurs accesseurs, et modifier le constructeur.
Puis ajouter une m´méthode getNumero renvoyant le numéro d’enregistrement du
document.
3. Ajouter un second constructeur public permettant de d´définir aussi, en plus du titre, le
numéro d’enregistrement (supposé positif ou nul) lors de la création d’un document. Quelles
restrictions peut-on prendre afin d’éviter que deux documents créés aient le même numéro ?
Dans les cas de restriction, on prendra le numéro suivant prévu, à la place du numéro indiqué
par l’utilisateur.
4. Redéfinir la méthode toString renvoyant la chaîne de caractères constituée du numéro
d’enregistrement et du titre du document.
Exercice 2 On veut implémenter une liste de documents dans laquelle on veut pouvoir ajouter des
documents petit à petit, et y accéder par leur numéro d’enregistrement. Mais plutôt que d’utiliser les
structures de collections Java (ArrayList, Vector, etc.), on veut programmer soi-même « en dur » une
structure de données.
Pour implémenter cette structure, on va créer une classe ListeDeDocuments avec un tableau de
documents tableau contenant les documents de la liste. Cependant, pour éviter d’avoir à
augmenter la taille du tableau à chaque ajout, on va fixer initialement sa taille à 1 et doubler sa
taille dès qu’on veut ajouter un document dont le numéro d’enregistrement est plus grand que la
taille du tableau.
1. Définir la classe ListeDeDocuments avec la propriété privée tableau et la méthode ajouter qui
ajoute un document à la place indiquée par son numéro d’enregistrement, ainsi qu’une
méthode getDocument qui prend en argument un numéro et renvoie le document de la liste
ayant ce numéro (null s’il n’est pas dans la liste).
2. Dans cette classe, redéfinir la méthode toString pour qu’elle renvoie les descriptions de tous
les documents de la liste, séparées par un saut de ligne "\n".
3. Modifier la classe Document pour faire en sorte que tous les documents créés puissent être
retrouvés en utilisant une méthode statique accesDocument dans la classe Document.
Exercice 3 La bibliothèque est appelée à traiter des documents de nature diverse : des livres, des
dictionnaires, et autres types de documents.
A chaque livre est associe, en plus, un auteur et un nombre de pages, les dictionnaires ont, eux,
pour attributs supplémentaires une langue et un nombre de tomes. On veut manipuler tous les
articles de la bibliothèque au travers de la même représentation : celle de document.
1. Définissez les classes Livre et Dictionnaire qui hérite de la classe Document. Définissez pour
chacune un constructeur permettant d’initialiser toutes ses variables d’instances respectives.
2. Redéfinissez la méthode toString() dans les classes Livre et Dictionnaire pour qu’elle renvoie
une chaîne de caractères décrivant un livre ou un dictionnaire, en plus de la description
normale d’un document.
3. Dans la classe ListeDeDocuments, définissez une méthode tousLesAuteurs qui renvoie la
chaîne des auteurs de tous les livres de la liste.
4. Dans la classe ListeDeDocuments définissez une méthode tousLesDicos qui renvoie une liste
de documents (sous la forme d’une nouvelle instance de la classe ListeDeDocuments)
contenant tous les dictionnaires de la liste.
5. Définissez ensuite quelques classes supplémentaires, par exemple BandeDessinee, Manga,
DictionnaireBilingue, etc. avec des propriétés en plus. Pour chacune de ces nouvelles classes,
quelle classe étend-elle ?
Exercice 4 Dans l’exercice suivant nous allons utiliser la classe FileWriter pour générer un
fichier. Pour l’utiliser il faut l’importer import [Link];. D’autre part, l’utilisation des
constructeurs de cette classe, peuvent générer des exceptions du type IOException. Il convient
donc :
- D’importer la classe IOException avec import [Link];
- D’ajouter throws IOException à la déclaration des méthodes dans lesquelles nous utilisons
FileWriter.
Enfin différents constructeurs existent pour FileWriter. Nous allons utiliser le constructeur
prenant en argument une chaine de caractères. Notez que cette chaîne de caractères peut
spécifier le chemin vers le dossier dans lequel nous voulons générer nos fichiers. Par exemple :
FileWriter w = new FileWriter(‘‘/local/home/monom/file’’); génère
un fichier [Link] vide dans mon dossier /local/home/monom/. Pour
écrire dans un tel fichier, on utilise entre autres les m´méthodes :
- write(String s) qui écrit la chaîne s dans le fichier, - close() pour mettre fin à l’écriture
dans ce fichier.
Si vous utilisez write(String s), il est n´nécessaire de terminer l’écriture du fichier en utilisant close().
- Dans la classe ListeDeDocuments, définissez une fonction sauvegarde permettant d’écrire la
liste des documents dans un fichier.