Date de première publication : 2026/09/30
Dans ce TP, nous voulons illustrer les notions vues dans le dernier cours magistral.
On veut créer un logiciel pour une animalerie qui place les animaux en vente dans des enclos.
Créer les classes Animal, Chat, Chien et Nourriture.
Aucun animal n'a été maltraité pour l'écriture de ce TP
D'après le dictionnaire Le Robert, on appelle cri le son des animaux. Par exemple, le cri du chat est le miaulement, celui du chien l'aboiement.
Premier enclos
- Créer la classe
Enclosqui peut contenir au plusMAXéléments avec un tableau d'Object. On peut ajouter ou enlever des éléments (le dernier placé dans l'enclos par exemple) et on peut lister les élements de l'enclos. - Ajouter à un enclos un chien, un chat, de la nourriture et terminer par un chat
- Afficher le contenu de l'enclos
- Enlever le dernier élément de l'enclos, le faire
crier!
Deuxième enclos
- Écrire une nouvelle classe
Enclos2qui au lieu de stocker desObjectstocke desAnimal(sans faute de français :-) !) - Ajouter quelques animaux et terminer par un
Chat - Que se passe-t-il lorsque l'on essaie d'ajouter de la nourriture ?
- Est-il facile de faire crier le dernier animal placé dans l'enclos ?
- Est-il facile de faire
ronronner()le chat ?
Troisième enclos
Écrire maintenant une classe générique Enclos3 qui est paramétré sur la classe des éléments de la caisse.
class Enclos3<A> {
}
Il y a une petite subtitilité pour la construction du tableau qui est donnée ci-dessous :
@SuppressWarnings("unchecked")
public Enclos3() {
// on ne peut pas créer directement un tableau de A[]
tab = (A[]) new Object[MAX];
elem = 0;
}
Il est de bon ton de connaître le message d'erreur qui peut apparaitre le cas échéant
- Instancier cet enclos sur la classe
Animal, ajouter nourriture, chien et chat et faire crier le dernier élément ajouté. - Instancier cet enclos sur la classe
Chat, ajouter chien et chat et faire crier le dernier élément ajouté. - Instancier un enclos sur des
intet voir ce que cela donne.
Enclos exceptionnel
Vous pouvez créer trois exceptions :
EnclosPleinException qui est levée quand on essaie de mettre un animal
dans un enclos et que celui-ci est déjà plein,IncompatibleException quand on essaie de mettre un animal qui n'est pas de même type
que le premier animal placé en cage et
OperationImpossibleException quand on essaie d'enlever quelque chose à l'enclos et que cela n'est pas possible.Bien entendu, il faut tester le code pour vérifier que les exceptions sont bien lancées et surtout bien attrapées. Vous pouvez utiliser JUnit pour cela ou une simple méthode main()
Il faut utiliser le concept de réflexion pour savoir si deux objets sont de même classe.
Pour rappel, la classe Object définit une méthode getClass().
Enclos collecté
Si vous utilisez une collection, il n'y a plus vraiment besoin de la classe Enclos. Remplacez tout même le tableau par
une collection comme List et utilisez une implémentation possible...
Enclos sérialisé
La dernière chose à faire pour ce TP est d'écrire dans un fichier un enclos et de vérifier que lorsque le fichier est relu, l'enclos est recréé à l'identique. Voici les bouts de code donnés en cours; pour l'écriture :
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("fichier.dat");
oos = new ObjectOutputStream(fos);
oos.writeObject(objects);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (oos!=null) oos.close();
if (fos!=null) fos.close();
}
pour la lecture :
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("fichier.dat");
ois = new ObjectInputStream(fis);
objects = (Composite) ois.readObject(); // type de retour à adapter
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ois!=null) ois.close();
if (fis!=null) fis.close();
}
Vous pouvez utiliser un try-with-resources si vous le désirez.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8



