Les sources de la solution sont disponibles [ ici ].

Les commentaires :


rencontre impossible et/ou infertile :

  • La "difficulté" principale de l'exercice 2 est de déterminer comment écrire/modifier les deux classes d'exception demandées.
  • La solution consiste à concevoir les exceptions comme étant capable de déterminer elles-mêmes le message associé à l'exception.
  • C'est pour cela que les deux classes ont comme attribut 2 humains. Elles ont ainsi accès aux attributs des humains et peuvent déterminer quels sont les problèmes empêchant d'avoir un nouvel humain.
  • C'est donc en redéfinissant getMessage() dans ces classes et en utilisant les attributs des deux humains que l'on va pouvoir déterminer ce que renvoie getMessage().

 

  • Le fait que tous les cas problématiques génèrent une exception permet de modifier le moteur de jeu avec dans le bloc try :
    • l'appel à rencontre()
    • l'insertion du nouvel humain dans la population.
  •  En effet, si la méthode rencontre() ne génère pas d'exception, cela veut forcément dire qu'un nouvel humain a été créé et peut donc être inséré dans la population.

Une super-classe pour les exceptions de rencontre.

  • La solution nécessite de modifier les 2 classes créées précédemment afin qu'elles héritent de MeetingException.
  • De plus, il faut modifier les signatures de toutes les méthodes de rencontre. Pour cela, il y a 2 solutions :
    • compléter la liste des exception potentiellement générées, i.e. écrire : throws BreedingForbiddenExcpetion, NoBreedingException
    • faire appel au polymorphisme, i.e. écrire : throws MeetingException
  • C'est la 2ème solution qui est la plus POO et qui est utilisée dans cette solution.

la propagation des exceptions

  • NB : la solution proposée diffère de ce qui est indiqué dans l'exercice, en prenant en paramètre non pas deux indices mais deux humains.
  • C'est à cause de l'organisation du moteur de jeu dans LifeGame, où l'on utilise la méthode setCouple() pour récupérer directement 2 humains et pas leur indice.
  • Cela n'a pas d'influence sur la solution.
  • En effet, le problème de compilation vient du fait que la méthode rencontre() de Population fait appel à la méthode rencontre() de Homme/Femme.
  • Or, celle-ci génère potentiellement une MeetingException.
  • 2 solutions pour supprimer l'erreur de compilation :
    • faire un try/catch dans la méthode rencontre() de Population.
    • propager explicitement l'exception qui peut se produire.
  • C'est la deuxième solution qui est demandée et elle consiste à simplement ajouter throws MeetingException à la signature de rencontre() dans Population.