Enseignement > Programmation orientée objet > Java > Sujets d'examens et corrigés > 2004 - Epreuve n°2 de controle continu  

On cherche au cours de cet exercice à modéliser l'embarquement de véhicules dans un Car-ferry

Il est conseillé de lire le sujet dans son ensemble avant de commencer.

1. Classe Véhicule (4 points)

On considère qu'un véhicule est caractérisé par son modèle, son immatriculation, son kilométrage, son poids à vide, sa longueur (en mêtres), et sa réserve de carburant (en nombre de litres).

Ecrire une classe Vehicule permettant de modéliser de tels objets dont encapsulera les propriétés.

Un véhicule peut être conduit par une personne adulte. Ajouter à la classe Vehicule les instructions nécessaires pour qu'un véhicule puisse éventuellement désigner son conducteur qui sera un objet de la classe Adulte donnée en annexe. Le même adulte peut-il être le conducteur de plusieurs véhicules ?

Ecrire un constructeur permettant d'instancier des objets de la classe Vehicule dont on précisera simplement le modèle, l'immatriculation, la longueur et le poids. Les autres propriétés seront initialisées à 0. Expliquez comment vous traitez le fait, qu'à la construction, un véhicule n'a pas encore de conducteur ?

Ecrire une méthode pour changer le conducteur d'un véhicule.

Réécrire la méthode toString() indiquant les caractéristiques du véhicule et de son éventuel conducteur.

Ecrire les méthodes

  • GetPoids()retournant le poids du véhicule, c'est-à-dire la somme du poids à vide, du poids du carburant (on fera la supposition qu'un litre de carburant pèse un kg) et du poids de l'éventuel conducteur.

  • allerAlaPompe(float quantite) permettant d'ajouter du carburant au véhicule et retournant la nouvelle quantité de carburant.

  • rouler(float distance, float taux_consommation) permettant au véhicule d'avancer et retournant le nouveau kilométrage du véhicule. Une exception sera levée si le véhicule n'a pas de conducteur ou si la quantité de carburant disponible n'est pas suffisante pour cette opération

2. Classe Camion (3 points)

Un camion est un véhicule pouvant transporter une cargaison de colis.

Ecrire une classe Camion héritant de la classe Vehicule permettant de mémoriser la cargaison sous la forme d'une collection d'objets de la classe Colis donnée en annexe. Choisir un type de collections approprié, en justifiant votre réponse.

Récrire le constructeur de cette classe afin d'initialiser la cargaison avec une collection vide.

Ajouter les méthodes suivantes pour ajouter ou retirer un colis à la cargaison :

  • int ajouter (Colis c) //retourne le nombre de colis dans la cargaison après l'ajout

  • boolean retirer(Colis c) //retourne vrai si il a été trouvé et retiré de la cargaison

Réecrire la méthode permettant de connaître le poids du camion : on calculera la somme des poids du camion à vide, du carburant, de l'éventuel conducteur et de la cargaison.

Réécrire la méthode toString() donnant les caractéristiques du véhicule et de sa cargaison.

3. Classe Voiture (4 points)

Une voiture est un véhicule pouvant transporter un nombre limité des passagers.

Ecrire une classe Voiture héritant de la classe Vehicule permettant définir le nombre maximum de passagers et de mémoriser la liste de ses passagers sous la forme d'une collection d'objets de la classe Personne donnée en annexe.

Choisir un type de collections approprié pour mémoriser les passagers, en justifiant votre réponse.

Récrire le constructeur de cette classe pour définir le nombre maximum de passagers et initialiser la collection des passagers.

Ajouter les méthodes suivantes nécessaires pour faire monter ou descendre un passager de la voiture (Lever une exception si on essaye de faire monter un passager alors qu'il n'y a plus de place dans la voiture) :

  • int monter (Personne p) //retourne le nombre de personnes dans la voiture après l'ajout

  • boolean descendre(Personne p) //retourne vrai si la personne a été trouvée et retirée des passagers de la voiture

Réecrire la méthode permettant de donner le poids de la voiture, qui calculera la somme des poids de la voiture à vide, du carburant, des passagers et de l'éventuel conducteur.

Réécrire la méthode toString() donnant les caractéristiques d'une voiture et de ses passagers.

4. Classe CarFerry (9 points)

Un CarFerry est un véhicule pouvant transporter des voitures ou des camions. La cale du bateau a une longueur et une charge limitées, qui sont des propriétés caractéristiques du CarFerry.

Les véhicules embarquent dans la cale en se répartissant à droite ou à gauche du bateau, en 2 piles de véhicules (premier entré, dernier sorti)

Faire un schéma de la structure mémoire d'un objet de la classe CarFerry, qui embarquerait plusieurs voitures et plusieurs camions.

Ecrire une classe CarFerry héritant de la classe Vehicule, permettant de modéliser un tel bateau.

Réécrire le constructeur définissant les limites de longueur et de charge de la cale, et initialisant les piles de véhicules.

Récrire la méthode permettant de calculer le poids total du CarFerry.

Ecrire la méthode permettant d'embarquer un véhicule, en " l'empilant " à droite ou à gauche de la cale, de manière à équilibrer le poids du bateau. Veiller à ne pas dépasser la longueur et la charge limitées du CarFerry.

Ecrire la méthode permettant de débarquer un véhicule, en " dépilant " soit à droite, soit à gauche de la cale, de manière à équilibrer le poids du bateau.

Ecrire une méthode calculant la proportion de voitures par rapport au nombre de véhicules transportés.

Ecrire une méthode permettant de savoir si une personne (conducteur d'une voiture ou d'un camion ou passager d'une voiture) se trouve sur le CarFerry.

Annexe

public class Colis {
...
public float getPoids()
...
public String toString()
...}

public abstract class Personne {
...
public String getNom()
public String getPrenom()
...
public float getPoids()
...
public String toString()
...}

public class Adulte extends Personne {
...}

corrigé (zip avec tous les fichiers)