TP Train (TP 11 - 15)
Groupe composé de CELERIER Auguste, ACHARD Romain.
Introduction
Ce projet s'inscrit dans le cadre du cours sur les logiciels concurrents. Il consiste en la modélisation en Java du déplacement de trains sur des rails.
- Éditeur utilisé : Eclipse
Réponses aux questions
Question 1.1
La classe Position est la plus importante pour gérer le mouvement des trains. En effet, elle contient les information sur l'Element actuel sur lequel le train se situe, et la Direction de son mouvement. La classe Railway gère la liste d'éléments que les trains peuvent parcourir, et permet donc de déterminer le prochain élément sur la trajectoire du train
Question 1.2
Voir fichier trains.drawio
Question 1.3
Voir code
###Question 2.1
Voir code
###Question 2.2
Les variables qui permettent d'exprimer l'invariant de sûreté sont la présence ou non d'un train dans une section, le nombre de trains présents dans une station et la direction globale des trains sur la ligne
###Question 2.3
Voir code
###Question 2.4
Les actions critiques qu'un train peut exécuter, c'est-à-dire les actions qui modifie l'état du système partagé, sont entrer ou quitter une section, entrer ou quitter une station et changer de direction
###Question 2.5
Ces méthodes doivent être rajoutées respectivement dans Section et Station, et les méthodes de gestion de la direction dans la classe Railway
###Question 2.6
Il faut ajouter des méthodes synchronisées dans les classes Railway et Position pour gérer les mouvements des trains de manière synchronisée, pour autoriser ou non leur déplacement
###Question 2.7
Voir code
Question 2.8
Voir code
Question 3.1
Pour éviter les interblocages, on doit contrôler la direction des trains en circulation et leur nombre dans chaque section. On rajoute deux nouvelles variables : trainsWaitingRL
et trainsWaitingLR
, qui comptent les trains en attente par direction.
Question 3.2
L’invariant de sûreté doit garantir qu’un train ne quitte pas une gare si des trains du sens inverse sont déjà en mouvement. Pour cela, un train ne pourra avancer que si aucun train ne se déplace dans le sens opposé. La nouvelle condition qui doit être respectée peut être formulée ainsi :
(currentDirection == d) || (movingTrains == 0)
Question 3.3
La gestion des interblocages repose principalement sur la classe Railway, qui contrôle la direction des trains, le nombre de trains en déplacement et les trains en attente. C’est dans cette classe que les décisions de départ des trains doivent être prises en fonction de l’état du système. Railway sera donc responsable de la mise en œuvre de la synchronisation et du respect de l’invariant de sûreté.
Question 3.4
Voir code
Question 3.5
Voir code