Skip to content

fsol1/bikerenter

Repository files navigation

Renters

Farzadde SOLEIMANIAN

Ce projet vise à modéliser une simulation de location de vélos tout en intégrant des design patterns.

HowTo

Récupérer les sources du projet :

git clone https://gitlab-etu.fil.univ-lille.fr/farzadde.soleimanian.etu/bikerenter.git

Pour générer la Javadoc, exécutez la commande suivante à la racine du projet :

make javadoc

La documentation sera générée dans le dossier /doc situé à la racine.

Pour compiler le projet, exécutez la commande suivante à la racine du projet :

make compile

Pour exécuter le projet, exécutez les commandes suivantes à la racine du projet :

cd out
java bikerenter.simulator.Simulator 20 5 5 10
  • 20 : Nombre de vélos.
  • 5 : Nombre de stations.
  • 5 : Nombre d'utilisateurs.
  • 10 : Nombre d'epochs de la simulation.

Pour compiler les tests, exécutez la commande suivante à la racine du projet :

make compile-tests

Pour exécuter les tests, utilisez la commande suivante à la racine du projet :

make run-tests

Pour générer le fichier JAR, exécutez la commande suivante à la racine du projet :

make jar

Pour exécuter le fichier JAR, utilisez la commande suivante à la racine du projet :

java -jar simulator.jar 20 5 5 10

Présentation du projet

À la base du projet, il y a l'interface Transport. Cette interface représente tout type de transport et implémente le pattern Decorator pour permettre d'ajouter des accessoires (Basket, CargoRack et Electric) aux transports, ainsi que le pattern Visitor pour que les Workers puissent travailler sur un transport. Bike est une implémentation de Transport et représente les vélos.

Ensuite, l'interface Person représente tout type de personne qui interagit dans la simulation. Chaque Person a son propre comportement, implémenté grâce au pattern Strategy (BehaviorStrategy). User est une interface qui étend Person et représente les utilisateurs qui louent et rendent des transports dans la simulation (UserBehaviorStrategy). Man est une implémentation de User.

Worker est une classe abstraite qui implémente Person. Elle représente tous les types de travailleurs qui travaillent sur un transport. Pour cela, elle utilise le pattern Visitor afin d'éviter les casts pour chaque type de transport. Les Workers ont également leur propre comportement (WorkerBehaviorStrategy). Mechanic est une implémentation de Worker, représentant un mécanicien.

Les stations sont représentées par l'interface Station. Une Station contient un nombre de transports et permet aux utilisateurs de louer ou de rendre un transport. BikeStation est une implémentation de Station et représente une station de location de vélos. À chaque location ou retour, la station notifie le ControlCentre.

Pour gérer les stations, on utilise la classe abstraite ControlCentre, qui gère également la redistribution des transports (RedistributeStrategy) et les vols. BikeControlCentre est une implémentation de ControlCentre qui implémente également le pattern Singleton afin qu'il n'existe qu'un seul centre de contrôle pour les stations de vélos.

Enfin, le tout est orchestré par la classe Simulator, qui initialise tous les éléments de la simulation (transports, stations et centre de contrôle) et exécute la simulation. Durant celle-ci, les User louent un transport pendant un certain nombre d'époques avant de le rendre, tandis que les Mechanic prennent un transport, travaillent dessus pendant une époque, puis le retournent.

Tests

En ce qui concerne les tests, j'aurais aimé en écrire davantage avec plus de temps. Cependant, leur rédaction a été compliquée pendant la conception, car les classes changeaient fréquemment. Il a donc fallu les écrire à la fin du développement. Malgré cela, la majorité des classes de tests sont abstraites, ce qui facilite le test de nouvelles classes.

UML

UML1 est le tout premier diagramme fait au début du projet avant d'avoir écrit une seule ligne de code et UML2 est le diagramme final après avoir écrit tout le code du projet.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published