Vous êtes sur la page 1sur 4

KARKAB MA MICHAU TP noté 2 JAVA

Compte rendu TP noté n°2


I. Parking
Nous avons créé une classe Parking qui possède les attributs suivants :
private final int nbPlace
private boolean[] park
private int nbPlaceOccupe
Nous avons définit la variable nbPlace en tant que final car on considère que le parking est un
tableau de boolean avec une taille fixé lorsqu’on le déclare.
La variable nbPlaceOccupe permet de déterminer si le parking est plein.

Le constructeur Parking initialise le nombre de place occupé dans le parking à 0, définit le nombre
de place dans le parking et rempli le tableau park avec des valeurs « true » autrement dit que toutes
les places du parking sont libres à l’initialisation (si la valeur du tableau correspond à « false » cela
correspond à une place occupée).

La méthode int reserve() throws PlusDePlaceDisponibleException va parcourir le tableau


de boolean park à la recherche d’une place libre. S’il trouve une place libre, alors la place sera
réservée et le compteur du nombre de places occupées incrémenté. Dans le cas contraire, la
méthode soulèvera une exception PlusDePlaceDisponibleException.

La méthode void libere(int index) throws PlaceNonOccupeException permet de libérer


une place occupée du parking autrement dit que la valeur du tableau à l’indice donné est la valeur
« true » et de décrémenter le compteur du nombre de places occupées. Si la place était déjà libre,
alors la méthode soulèvera une exception PlaceNonOccupeException.

Nous avons choisi de créer un attribut nbPlaceOccupe qui permet de gérer le nombre de places
occupées. De ce fait, la méthode int nombreDePlaceLibre() devient un accesseur.

Nous avons surchargé la méthode @Override public String toString() qui permet d’afficher
les différentes informations concernant l’objet parking. Dans cette méthode, nous avons définis un
StringBuilder qui permet une meilleure concaténation des chaines de caractères. En effet,
contrairement à la concaténation des Strings qui créer à chaque fois un nouveau objet String,
StringBuilder utilise le même objet lors des concaténations.

Pour les exceptions PlusDePlaceDisponibleException et PlaceNonOccupeException, il faut


les définir en tant qu’héritier de la classe Exception.

II. Zoo
1. Interface Animaux
Le but de cet exercice est de définir une hiérarchie de classe pour représenter des animaux. Parmi
ces animaux, il y a des mammifères (félins et singes) et des serpents. Nous avons pensé à créer une
interface Animaux car tous ces êtres vivants sont des animaux et qu’ils possèdent un minimum de
caractéristiques communes. Ces caractéristiques communes se décrivent comme des méthodes
définis dans l’interface Animaux :

Année 2005-2006 1/4


KARKAB MA MICHAU TP noté 2 JAVA
public String getName(); public boolean isDangerous();
public double getWeight(); public double getMaxWeight();
public String getType(); public double getCleaningTime();
public String getFeedingInfo();

2. Abstract class Mammifere & Serpent


Ensuite, nous avons déclaré la classe Mammifere en tant qu’implémentation de l’interface Animal
et en tant que classe abstraite. En effet, nous n’avons pas l’utilité de créer un mammifère du fait
qu’un félin et un singe seront des classes héritières de mammifère et que la gestion de la suite du TP
se fera par ces classes.

De ce fait, les classes Félin et Singe sont des classes qui héritent des méthodes de la classe abstraite
Mammifere autrement dit des mammifères. On définit donc dans la classe Mammifère toutes les
méthodes qu’utiliserons les classes félin et singe. Tous les mammifères possèdent:
protected final String alimentation;
protected double poids;
protected final boolean dangerosite;
protected final String nom;
protected final String type;
protected boolean espece_protected;

C’est pourquoi ces attributs sont définis dans la classe Mammifères car ils seront utilisés par toutes
les sous classes de Mammifere et ces attributs sont du type protected pour que les sous classes
aient accès à ces attributs. De plus, par convention nous avons décidé que le poids et une espèce
protégée pouvaient être des valeurs modifiables.
Nous avons définis un constructeur dans la classe abstraite Mammifere cependant, il ne sera jamais
instancié, il sert uniquement à alléger le code des sous classes en utilisant super. Cela permet de
renseigner les champs d’un mammifère qui sont toujours vrais pour les félins et les singes.
Nous avons aussi définis des accesseurs qui seront utilisés pour la class Zoo.

Le nombre de membre de cette classe est important mais par la suite, on se rend compte que les
sous classes de mammifère sont beaucoup plus allégés.

La classe Serpent est identique à la classe Mammifere cependant, l’intérêt que nous ne voyons pas
dans ce TP est qu’on pourrait créer des différences entre ces deux types d’animaux.

3. Les classes Felin et Singe


Ces deux classes Felin et Singe sont des sous classes de Mammifere. Elles permettent de créer
d’avantage de spécificité chez les félins et les singes mais lors de notre TP, aucune spécificité n’a
été demandée.
Ces classes servent donc dans le TP à faire le lien entre les mammifères et les sous classes de Felin
et de Singe. En outre, il permet de faire le lien entre le constructeur de mammifère et le constructeur
des sous classes.

4. Les classes animaux


Apres avoir créé toutes ces classes, les classes des animaux : Chimpanzé, Orang-outan, Lion, Tigre
et Boa sont allégé le plus possible. En effet, toutes les méthodes qui s’appliquent à ces classes sont
définies dans les classes supérieures. Ces classes auront donc chacun un constructeur et un champ
maxWeight car ce sont les seuls différences entre ces différentes classes.

Année 2005-2006 2/4


KARKAB MA MICHAU TP noté 2 JAVA
5. La méthode toString
Nous avons décidé de surcharger la méthode toString dans les classes Mammifere, Felin et Singe
mais aussi dans Serpent et Boa. Ce choix s’explique par le fait que nous voulons donner la
responsabilité de l’affichage à la bonne classe. En effet, l’affichage des caractéristiques des
mammifères sera traité par la classe Mammifère et le type de l’animal en question sera traité par la
méthode toString de la classe Felin, Singe ou Serpent (Serpent car nous n’avons qu’un type de
serpent qui est le Boa).

Une spécificité est demandée dans le TP qui est d’afficher ESPECE_PROTEGEE pour le boa. Cette
spécificité sera donc traitée par la méthode toString de la classe Boa.

6. La méthode getMaxWeight
Cette méthode est propre à chaque animal, elle est donc définie dans les classes Felin, Singe et Boa.
Nous avons eu deux possibilités pour implanter cette méthode :
- On aurait pu créer cette méthode en méthode de classe, autrement dit que cette méthode
appartient à la classe et pas à l’objet.

- Nous avons créé un membre static et final qui stocke la valeur du poids maximal
d’un type d’animal. Puis nous avons créé un accesseur pour obtenir cette valeur.

7. Le Zoo
La classe Zoo doit permettre de contenir un ensemble d’animaux sans limite de nombre, c’est
pourquoi nous avons décidé de créer un attribut du type ArrayList car il permet de définir un
tableau de taille indéterminé.
Nous avons donc créé un constructeur qui initialise une ArrayList.
Une fonction qui permet d’ajouter un Animal dans l’ArrayList. Nous avons défini l’ArrayList avec
le code générique Animal car l’interface Animal est implémenter par tous les mammifères et les
serpents.

8. La méthode getShortListing
Pour ordonner cette liste, il faut faire appeler à la méthode sort de la classe Collections qui permet
de trier des tableaux. Pour cela, il faut redéfinir la méthode public int compare(Animal a1,
Animal a2) en utilisant l’interface Comparator. Après avoir redéfinit cette méthode, on peut
ordonner l’ArrayList suivant le nom des Animaux puis afficher la liste des animaux dans le zoo trié
suivant leur nom.

9. Nettoyage des cages : getCleaningTime

Nous allons parcourir l’ArrayList contenant les animaux, et à chaque fois nous allons déléguer le
travail à la méthode getCleaningTime de la classe Mammifère ou Serpent.
La méthode getCleaningTime de la classe Zoo va comptabiliser le total de temps renvoyé par
chaque appel à la fonction getCleaningTime des classes Mammifère ou Serpent.
Dans ces dernières le temps est calculé en regardant si les membres « dangerosité » et
« espece_protected » sont « true » ou non, ainsi qu’en regardant le poids de l’animal en question.

10. Gestion des approvisionnements : getFeedingInfo

Année 2005-2006 3/4


KARKAB MA MICHAU TP noté 2 JAVA
La récupération des informations d’alimentation de chaque animal du Zoo se fait de manière
simple :
- Création d’un StringBuilder qui va contenir la chaîne de caractère retournée
- On parcourt l’ArrayList contenant les animaux du Zoo, on stocke dans le StringBuilder
le résultat que nous renvoie la méthode getFeedingInfo de chaque animal + le nom de
l’animal en question.

11. Gestion des approvisionnements avancée :

Il s’agit maintenant de regrouper les informations d’approvisionnement suivant leur type, comme
par exemple les kilos de canard, les bananes, etc.

Nous avons donc créé une variable pour chaque type de nourriture, en parcourant la ArrayList
contenant les animaux, ces valeurs sont incrémentées suivants le poids de l’animal. Pour savoir le
type de l’animal, nous n’avons pas utilisé la méthode getClass, mais une méthode getType que nous
avons implémenté en supplément.

Une fois la liste des animaux du Zoo parcouru, il ne reste plus qu’à afficher les types de nourritures
requis, précédé du coefficient.
Nous avons encore une fois de plus stocké la chaîne de caractère à retourner dans un StringBuilder.

Année 2005-2006 4/4