Aller au contenu

TP Java complet - Gestion des transports et locations de véhicules

Contexte

Une entreprise souhaite gérer un parc de véhicules variés pour proposer des locations courtes et moyennes durées.

Le parc contient des véhicules de plusieurs familles :

L’entreprise loue aussi bien des véhicules électriques que thermiques, mais aussi des véhicules à énergie humaine ou à voile.

Elle veut pouvoir :

L’application sera entièrement realisée en Java, sans framework.


Objectifs

Ce TP permet de travailler toutes les notions abordées depuis la semaine dernière et cette semaine, soit :


Contraintes

  1. Les attributs doivent être privés ou protégés selon les cas.
  2. Les accès doivent passer par des methodes publiques adaptées.
  3. Le code doit être structuré en packages.
  4. Les erreurs métier doivent être gérées avec des exceptions personnalisées.
  5. Les recherches et statistiques devront utiliser des Streams sur les collections (sauf si vous trouvez cela trop compliqué !)

Travail à faire

Partie 1 - Modéliser les véhicules

Créer une classe abstraite Vehicule contenant au minimum :

Cette classe devra proposer :


Partie 2 - Heritage

Créer 3 sous-classes abstraites :

Puis créer plusieurs véhicules concrets, par exemple :

Chaque classe concrète devra redéfinir au minimum :


Partie 3 - Interfaces specifiques

Créer les interfaces suivantes :

Du coup, ça veut dire que chaque interface correspond à une ou plusieurs responsabilités :

Un même véhicule peut hériter d’une classe et implémenter une ou plusieurs interfaces. Comme je l’ai expliqué, un classe qui implements une interface signe un contrat avec cette interface et doit par conséquent implémenter toutes les méthodes de l’interface. Ce qui veut dire écrire le code dans les méthodes, c’est ce que l’on nomme l’implémentation.


Partie 4 - Client, reservation et location

Créer les classes :

A faire apparaitre dans la modélisation

Chaque reservation doit contenir :

Chaque location doit permettre de suivre :


Partie 5 - Service métier

Créer une classe AgenceLocation qui contient des collections pour gérer :

Cette classe devra proposer des méthodes métier du type :

Les méthodes de recherche, de tri et de statistiques devront utiliser les Streams (ou pas selon votre sensibilité ;))


Partie 6 - Exceptions personnalisées

Créer plusieurs exceptions personnalisées, par exemple :

Chaque exception doit correspondre à un vrai problème metier !


Partie 7 - Programme de démonstration

Créer une classe Application contenant une méthode main() qui :

  1. crée une agence
  2. ajoute plusieurs clients
  3. ajoute plusieurs véhicules de types differents
  4. effectue quelques recharges et ravitaillements
  5. crée des réservations et des locations
  6. retourne certains véhicules
  7. affiche plusieurs statistiques

Fonctionnalites attendues

Le programme doit au minimum permettre de démontrer :


Extensions possibles ultérieures