:: Enseignements :: ESIPE :: E3INFO :: 2008-2009 :: Programmation Objet avec Java ::
[LOGO]

TP noté Java 2008--2009


Exercice 1 - Zoo de Central Park

On souhaite modéliser le Zoo de Central Park, le fameux Zoo dont les vedettes sont Alex le lion, Gloria l'hippopotame, etc
Chaque méthode demandée doit être testée !

  1. Créer un projet TpNote dans un workspace d'eclipse référençant le répertoire /tmp/tpnote-workspace. Créer un package fr.umlv.tpnote. Créer une classe Animal vide dans ce paquetage et une classe Main vide aussi dans le paquetage fr.umlv.tpnote.main.
  2. Recopier le code suivant dans le main de la classe Main.
          Animal alex=new Animal("Alex", "Lion", 500);
          Animal gloria=new Animal("Gloria", "Hippo", 900);
        
          System.out.println(alex);
          System.out.println(gloria);
         

    Sachant que l'exécution du code doit afficher le nom (name) de l'animal, son type (type) et son poid (weight).
          Alex [Lion] (500.0 kg)
          Gloria [Hippo] (900.0 kg)
         
    Modifier ce qu'il faut dans la classe Animal. Penser aux modificateurs (d'accessibilités, etc)
  3. Executer le code du main dans une console sachant que la commande doit être exécutée dans une fenêtre de terminal.
  4. Créer une classe Zoo ayant un nom et permettant de stocker des animaux dans des cages sachant que le nom du Zoo et le nombre de cage du Zoo est spécifié lors de la création de celui-ci.
    On ne vous demande pas ici d'utiliser une des classes du paquetage java.util.
    Ecrire le constructeur ainsi que la méthode addAnimal qui permet d'ajouter un animal. On ne vous demande pas de gérer l'ajout d'un animal si le Zoo n'a plus de cage disponible.
  5. Ecrire une méthode printAll qui affiche le nom du Zoo suivi de chaque animal chacun sur une ligne (cf format ci-dessous). Modifier votre main pour qu'il crée le zoo de New York contenant les animaux alex et gloria et l'affiche au format ci-dessous:
          New York
          --------------------
          Alex [Lion] (500.0 kg)
          Gloria [Hippo] (900.0 kg)
         
  6. Ecrire une méthode numberOfEmptyCage qui renvoie le nombre de cages vide d'un Zoo.
  7. On souhaite maintenant gérer l'ajout d'un animal si n'a plus de cage vide en levant une exception IllegalStateException avec le message "no empty cage".
  8. Ajouter une méthode existsAnimal(Animal) qui renvoie vrai si un animal est dans le Zoo. On considerera que deux animaux sont identiques s'ils ont le même nom et le même type (donc pas forcément le même poids).
    Penser que l'on peut ajouter une méthode à la classe Animal.
  9. Ajouter une méthode addAll(Animal...) à la classe Zoo qui permet d'ajouter les animaux passés en paramètre. Si jamais il n'est pas possible d'ajouter tous les animaux passés en argument car le Zoo sera plein, il faut qu'aucun animal ne soit ajouté au zoo avant qu'une exception soit levée.

Exercice 2 - Zoo 2

  1. On souhaite maintenant ajouter une popularité aux lions (et uniquement aux lions), pas aux autre animaux. La popularité d'un lion est une valeur de 1 à 5 (5 étant le plus populaire) qui indique la capacité d'un lion à attirer des visiteurs dans le Zoo.
    Modifier votre code pour que dans le cas des lions, l'affichage d'un animal affiche en plus sa popularité (de 1 à 5 entre accolade). Noter que pour les lions, lors de la création de ceux-ci, on a plus besoin de spécifier leur type car ce sont des lions.
    Exemple: avec alex le lion de popularité 5, gloria l'hippo et dizzy le lion d'une tonne et de popularité 1, on obtient l'affichage suivant pour le Zoo de New York.
          New York
          --------------------
          Alex [Lion] (500.0 kg) {5}
          Gloria [Hippo] (900.0 kg)
          Dizzy [Lion] (1000.0 kg) {1}
         
  2. Faire en sorte que l'affichage de la popularité se fasse en utilisant des étoiles, de 1 étoile à 5 étoiles. Comme ceci :
          New York
          --------------------
          Alex [Lion] (500.0 kg) {*****}
          Gloria [Hippo] (900.0 kg)
          Dizzy [Lion] (1000.0 kg) {*}
         
  3. Ajouter dans la classe Zoo une méthode numberOfExpectedVisitors calculant le nombre de visiteurs potentiels (qui est un entier) du Zoo sachant que :
    • Un Lion permet de mobiliser un nombre de visiteurs proportionnel à sa popularité : 30 * popularité.
    • Qu'un Animal mobilise 5 visiteurs par tranche de 100 kg.
    Eviter les instanceof, SVP !
  4. En faisant le tour de tous les Zoo que l'on doit modéliser, on se rend compte que les Zoo ne possèdent pas d'autre animaux que des Lions et des Hippos. Modifier votre architecture pour que:
    • On ne puisse créer que des Lions ou des Hippos mais pas des Animaux.
    • Que l'on ne stocke pas dans un champs le type d'animal car ce n'est plus nécessaire.
    • Que l'affichage d'un Zoo reste le même et que le reste du code continue à fonctionner.
  5. Changer le code de la classe Zoo pour que la méthode existsAnimal s'exécute en temps constant (en moyenne).