Non-respect des contraintes de l'association bidirectionnelle Travel <-> Correspondence
Description du problème
On observe les problèmes suivants par rapport à l'association bidirectionnelle entre Travel
et Correspondence
:
- On peut ajouter des correspondances à un voyage indéfiniment.
- L'ensemble des correspondances d'un voyage peut être vide.
- On peut associer un voyage
null
à une correspondance. - Lorsque l'on fixe un autre voyage à une correspondance, on devrait supprimer la correspondance du voyage précédent, or cela voudrait dire que les correspondances précédente et suivante devraient correspondre or cela n'est pas possible. De même, par rapport au nouveau voyage, on ne sait pas si on doit ajouter la correspondance au début ou à la fin du voyage.
Choix des tests à effectuer
On doit pouvoir vérifier que :
- le nombre de correspondances associées à un voyage est entre 1 et 10
- lors de l'ajout d'une correspondance à un voyage, le voyage s'ajoute également à la correspondance
- lors de la suppression d'une correspondace d'un voyage, le voyage se supprime également de la correspondance
Solution à mettre en œuvre
On suppose que l'on ne peut pas gérer la suppression de correspondances d'un voyage à partir de la classe Correspondence
(en fixant un nouveau voyage à une correspondance), comme indiqué dans la description du problème. Cela est géré uniquement à partir de la classe Travel
.
- Dans la classe
Travel
:- On modifie les méthodes
addFirstCorrespondence
etaddLastCorrespondence
pour pouvoir ajouter le voyage à la correspondance en appelant la méthodesetTravel
. - On modifie les méthodes
removeFirstCorrespondence
etremoveLastCorrespondence
pour pouvoir supprimer le voyage de la correspondance en lui affectant la valeurnull
.
- On modifie les méthodes
- Dans la classe
Correspondence
:- Dans le constructeur de
Correspondence
, on supprime letravel
. Il sera attribué à la correspondance grâce à la méthodesetTravel
, appelée lors de l'ajout d'une correspondance d'un voyage. Un voyage peut alors êtrenull
dans une correspondance tant qu'aucun voyage ne lui a pas encore été attribuée. - La méthode
setTravel
est passée enprotected
pour limiter son accès et empêcher de pouvoir fixer un voyage à une correspondance sans passer par la classeTravel
.
- Dans le constructeur de
Issue numéro 4 dans l’énoncé