TP noté Approche Objet

Remarques préliminaires :

  1. 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.
  2. 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 :
    1. Sélectionner le menu "File" et l'item "Import".
    2. Dans le dialogue, choisir l'item "General" et le sous-item "Projects from Folder or Archive".
    3. Dans le dialogue suivant, cliquer sur le bouton "Archive..." (à droite) et sélectionner TP_Animal.zip.
    4. Décocher la case TP_Animal.zip_expanded (ne garder que celle avec TP_Animal.zip_expanded/TP_Animal) et cliquer sur Finish
    5. 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).
  3. Modifier la classe Animal pour que lorsque l'on exécute l'instruction
    System.out.println(a)
    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)
  4. 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.
  5. 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().
  6. Ajouter un JTextField dans le panel contenant déjà le bouton Ok, juste au dessus du bouton.
  7. 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.
  8. 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);
  9. 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
  10. 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.
  11. 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.
  12. 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.
  13. 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.