TP noté Approche Objet
Remarques préliminaires :
- Lisez
d'abord toutes les questions. Beaucoup sont indépendantes et
peuvent donc être traitées dans l'ordre que vous souhaitez.
- Envoyer
le
résultat sous la forme d'un fichier zip contenant un ou
plusieurs projets Eclipse, à votre nom, par mail à olivier.baudon@labri ou marie-christine.counilh@labri.fr.
Pour créer le fichier zip, utiliser sous Eclipse la commande
Export > General > Archive File après un clic droit sur
un projet ou dans le menu File.
- Créer un projet Eclipse TP portant votre nom. Si vous le souhaitez,
vous pouvez entre deux questions dupliquer ce projet en
renommant la copie "votre nom" suivi du nouveau numéro de
version.
- Récupérer les fichiers des classes
Animal
, Espece
, Main
, Zoologie
,
ZoologieFrame
et ZoologieListener
,
et mettez-les dans un paquetage animal
à
l'exception de la classe Main
.
Vous pouvez aussi si vous préférez récupérer directement le
projet Eclipse dans l'archive TP_Animal.zip,
sans oublier de remplacer ensuite son nom par le vôtre !. Pour
cela :
- Sélectionner le menu "File" et l'item "Import".
- Dans le dialogue, choisir l'item "General" et le sous-item
"Projects from Folder or Archive".
- Dans le dialogue suivant, cliquer sur le bouton
"Archive..." (à droite) et sélectionner TP_Animal.zip.
- Décocher la case TP_Animal.zip_expanded (ne garder que
celle avec TP_Animal.zip_expanded/TP_Animal) et cliquer sur
Finish
- Sélectionner le projet TP_Animal et choisir l'item
"Rename..." dans le menu "File". Remplacer le nom du projet
par votre nom (ou votre nom suivi de Animal si vous
préférez).
- Modifier la classe
Animal
pour que lorsque l'on
exécute l'instruction
System.out.println(a)
où a
est une instance d'Animal
,
cela affiche le nom de l'animal suivi du nom de son espèce entre
parenthèses.
Par exemple :
Espece chat = new Espece("Chat");
Animal simba = new Animal("Simba", chat);
System.out.println(simba);
affichera sur la sortie standard
Simba (Chat)
- Modifier la classe
Espece
pour que deux
instances soient égales si elles ont le même nom.
Modifier la classe Animal
pour que deux instances
soient égales si elles ont le même nom et sont de la même
espèce.
Dans les deux cas, penser à bien redéfinir toutes les
méthodes héritées de Object
nécessaires.
- Modifier
ZoologieListener
pour que lorsque
l'on clique sur le bouton Ok, le texte correspondant à l'item
sélectionné dans la liste soit affiché sur la sortie standard.
Indication : l'objet
sélectionné dans une liste l
peut être récupéré
par l'expression l.getSelectedValue()
.
- Ajouter un
JTextField
dans le panel contenant
déjà le bouton Ok, juste au dessus du bouton.
- Modifier
ZoologieListener
pour que, quand on
clique sur le bouton Ok, cela crée une instance d'Animal avec
comme nom le texte contenu dans le TextField et comme espèce
l'espèce sélectionnée dans la liste. Le TextField devra
également être réinitialisé à vide.
- Rajouter une classe
Animaux
qui crée les animaux
à l'aide d'une méthode creerAnimal(String nom, Espece e)
et mémorise tous les animaux créés dans un ensemble (Set
).
Modifier la classe Animal
pour qu'il soit
impossible de créer une instance d'Animal
en dehors
du paquetage animal
sans passer par la méthode creerAnimal(String
nom, Espece e)
de la classe Animaux
.
Une instance de cette classe sera également passée en paramètre
à la construction des instances de ZoologieFrame
.
Animaux animaux = new Animaux();
JFrame f = new ZoologieFrame(zoo, animaux);
- Modifier la classe
Animaux
pour que si l'on
essaie de créer un animal déjà existant, cela lève une exception
AnimalExistantException
. Ajouter également la
classe AnimalExistantException
.
- Modifier
ZoologieListener
pour que si on
clique sur Ok avec un nom et une espèce d'animal déjà
existant, cela efface simplement le contenu du TextField
.
- Modifer la classe
Animaux
pour que l'on puisse
récupérer dans une collection non modifiable tous les animaux
d'une espèce donnée.
- Rajouter à la liste (
JList
) un listener
(implémentant ListSelectionListener
) pour que
lorsque l'on sélectionne une nouvelle espèce, les noms des
animaux existants appartenant à cette espèce soient affichés sur
la sortie standard. Indication
: il faudra vérifier que la méthode getValueAdjusting()
appliquée à l'évènement ayant entraîné l'appel à valueChanged()
renvoie false
pour éviter des affichages
multiples.
- Afficher la liste des animaux existants dans une TextArea (1
animal par ligne) au lieu d'utiliser la sortie standard. La
TextArea sera inclus à droite dans la Frame et devra être le
seul composant à grossir horizontalement en cas de modification
de la taille de la frame.