tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

local_cafe Sixti local_cafe

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

Deuxième enclos

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

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.