1°/ Rencontre universelle
- Dans le TP n°1, quand deux humains h1 et h2 sont pris dans la population, on doit connaître leur type d'instance afin d'appeler la bonne méthode de rencontre. On a donc un code qui ressemble à :
h1 = pop.getHumain(index1);
h2 = pop.getHumain(index2);
if (h1.isHomme()) {
if (h2.isFemme()) {
h = (Homme)h1;
f = (Femme)h2;
bebe = h.rencontre(f);
}
}
...
Ces tests découlent directement du fait que l'on a deux méthodes rencontre()
avec des signatures différentes dans Homme et Femme.
- L'idéal serait d'avoir la même signature donc de prendre en paramètre un type Humain et de tester dans
rencontre()
le type d'instance de cet humain passé en paramètre.
- Reste le problème que même en procédant ainsi, on est toujours obligé de faire un transtypage de l'objet qui appelle
rencontre()
et donc de tester de quelle instance il est.
- Fort heureusement, le polymorphisme permet de régler ce problème
- En s'inspirant des exemples du TD n°2, modifiez les classes Humain, Homme et Femme afin de pouvoir écrire directement h1.rencontre(h2) sans qu'il y ait d'erreurs à la compilation ni à l'exécution.
2°/ Classement
2.1°/ Classement mono-critère
- Modifiez l'entête de Humain pour que la classe implémente l'interface Comparable :
class Humain implements Comparable<Humain> {
...
- Dans Humain.java, ajoutez la méthode suivante et complétez le code sachant que :
- la méthode renvoie -1 si l'age de this est < à l'age de h
- la méthode renvoie 0 si les ages sont égaux
- la méthode renvoie 1 sinon.
public int compareTo(Humain h) {
// à compléter
}
- On suppose que le programme principal s'appelle TP2.java (copier/coller de TP1.java)
- Modifiez TP2.java ainsi que Population.java pour qu'à la fin de chaque tour de jeu, la population soit triée par âge croissant et ensuite affichée (NB : pour voir comment trier une collection, il existe des exemples à foison sur le Net)
2.2°/ Classement multi-critères.
- L'objectif est d'essayer de classer les humains selon leur âge mais pour deux hommes du même âge, de les classer selon leur salaire.
- L'idée est de redéfinir la méthode compareTo() pour ajouter ce cas.
- Pour cela, modifiez TP2.java pour tirer un salaire aléatoirement entre 1000 et 11000 lorsque l'on crée la population initiale.