Vous êtes sur la page 1sur 4

Master 1 3IR Examen POO

K. Foughali
06 janvier 2021

Tous documents de cours et notes manuscrites, ainsi que rapports de TP autorisés.


L’accès Internet n’est pas autorisé durant l’épreuve (donc pas de smartphones).
La durée de l’épreuve est de 3 heures grand MAXIMUM.
Le barème est indicatif. Il pourra être réajusté.
Bonne chance !

TRES IMPORTANT : Sous Eclipse, création d'un UNIQUE projet nommé


NOM.PRENOM. A la fin de l'examen, à l'aide du répertoire de votre projet, vous créez
une archive nommée NOM.PRENOM.zip et vous me l'envoyer par email
(karim.foughali@univ-paris13.fr). Désolé, mais les minutes de retard seront
sévèrement sanctionnées. Par sécurité, vous sauvegardez aussi cette archive sur votre
clef USB et en plus, vous vous envoyez un email à vous-même. Pour chaque exercice
ou étape, vous créez un package (dossier via Eclipse) du nom de l'étape (par exemple
exercice0, exercice1, etc…). Au fur et à mesure, vous copier/coller les classes dont vous
avez besoin pour avancer dans les étapes de l'examen.

Exercice 0: paquetage exercice0 (4 pts)


On décrit un véhicule (classe Vehicule) à l'aide de son modèle (String), une année (int),
un prixHT (double) et de sa marque. Il existe un nombre limité de marques (CITROEN,
VOLVO, MERCEDES par exemple). Quand un véhicule est créé, sa marque, son modèle
et son année ne changent plus. Par contre, son prixHT peut évoluer. Enfin, on doit gérer
une information TVA commune à tous véhicules. On prendra comme valeur : 0.2. Le
taux de TVA peut évoluer dans le temps.
1. Il y aura 2 manières de créer un véhicule. Soit on connait son prixHT soit on ne
le connait pas auquel cas le prixHT sera de 0.0 par défaut.
2. Ecrire les getters et setters nécessaires en vous basant sur ce qui est écrit (et
sous-entendu) plus haut.
3. Pour chaque véhicule, on devra pouvoir calculer le prixTTC (sans le stocker pour
autant).
4. Redéfinir la méthode toString renvoyant la chaîne de caractères constituée des
informations relatives à un véhicule. Voici la forme attendue dans la console:
Vehicule={marque:MERCEDES,modele:Coccinelle,annee:1971,prixTTC:2400.0}
5. Redéfinir (à l'aide d'Eclipse) les méthodes equals et hashcode. 2 véhicules sont
"egaux" ssi les champs marque, modèle, prixHT et année sont égaux.
6. Ajouter une nouvelle classe MainVehicule avec une méthode main vous
permettant de tester 2 ou 3 véhicules de base: constructeurs, setters, affichage
console, Egalite ou pas.

1/4
A partir de maintenant, vous pouvez emprunter 2 cheminements indépendants au
niveau de l'examen.

Voici le premier cheminement et ses différentes étapes (1 à 4):

Exercice 1: paquetage exercice1 (5 pts)


Désormais, on veut gérer via la classe MaCollection un ensemble de véhicules. On
optera pour une structure de données Java de type ArrayList. Chaque collection sera
constituée d'un numéro (int) qui ne change pas après création et de sa liste de véhicules
appelée maListe.
1. Compléter la classe MaCollection avec le b.a.-ba (constructeur, getters/setters si
nécessaire)
2. Redéfinir la méthode toString renvoyant la chaîne de caractères constituée des
informations relatives à un véhicule. Voici la forme attendue dans la console:
3. MaCollection1=[Vehicule={marque:VOLVO,modele:Carrera,annee:1950,prixTTC:1200.0},
Vehicule={marque:MERCEDES,modele:Coccinelle,annee:1971,prixTTC:2400.0},
Vehicule={marque:MERCEDES,modele:Coccinelle,annee:1971,prixTTC:2400.0}]
Pour rappel Java fournit déjà un toString pour les ArrayList donc ne vous privez
pas de l'utiliser. Mais je veux que le numéro de la collection fasse partie de votre
chaine finale (comme évoqué ci-dessus).
4. Compléter la classe MaCollection avec les méthodes suivantes:
public int tailleDeMaCollection() : Combien j'ai de véhicules à
un instant T ?
public void ajouter(Vehicule v) : Ajouter un véhiculer à ma
collection !
public boolean retirer(Vehicule v) : Retirer (s'il existe bien
!) un véhicule donné de ma collection
public double lePrixLeMoinsEleve() : Quel est le prix TTC le
moins élevé de ma collection ?
public Vehicule lePlusCher() : Quel est précisément le véhicule
le plus cher de ma collection ?
public int combienDe(String marque) : Combien je possède de
véhicules de telle marque ?
5. Compléter votre main (classe VehiculeMain) avec quelques petits tests de vos
méthodes.

Exercice 2: paquetage exercice2 (1 pt)


Désormais, on veut gérer une collection de véhicules sans doublons ! Réécrire la classe
MaCollection en conséquence. Prouvez, en ajoutant une classe avec une méthode main,
que ça marche vraiment !

2/4
Exercice 3: paquetage exercice3 (1 pt)
Désormais, on veut gérer une collection de véhicules sans doublons et en plus triée
automatiquement par ordre croissant des prixHT ! Les véhicules deviennent ainsi
comparables uniquement selon leur prixHT. On pourra donc modifier et adapter la
classe Vehicule. Proposez une solution. Prouvez, en ajoutant une classe avec une
méthode main, que ça marche vraiment !

Exercice 4: paquetage exercice4 (1 pt)


Cette fois (comme pour l'exercice précédent) on veut gérer une collection de véhicules
sans doublons et en plus triée automatiquement par ordre croissant des prixHT ! Mais
on s'interdit de modifier la classe Vehicule d'origine. On ne pourra donc ni modifier et
ni adapter la classe Vehicule. Proposez une solution. Prouvez, en ajoutant une classe
avec une méthode main, que ça marche vraiment !

Voici le second cheminement et ses différentes étapes (5 à 7):

Exercice 5: paquetage exercice5 (3 pts)


On réutilise la classe Vehicule de l'étape0. Mais cette fois on distinguera au moins 2
catégories de véhicules : les camions et les voitures. Une voiture est un véhicule doté
d'un champ vitesseMax (int). Un camion est un véhicule doté d'un champ tonnage (int).
Attention il faudra interdire l'instanciation d'un objet de la classe Vehicule. On ne
pourra créer que des voitures ou des camions.
Ecrire le code Java reflétant l'organisation décrite ci-dessus: classes, constructeurs,
toString et méthodes equals et hascode. Voici la forme attendue (pour le toString) dans
la console :
Vehicule={marque:Porsche,modele:Carrera,annee:1950,prixTTC:1200.0}-->Voiture={vitesseMax:100}
Vehicule={marque:Volkswagen,modele:Coccinelle,annee:1971,prixTTC:2400.0}-->Camion={tonnage:17

Exercice 6: paquetage exercice6 (1 pts)


Vous pouvez sauter (si vous bloquez) cet exercice et passer directement au suivant.
On veut imposer à chaque véhicule le fait de proposer une implémentation de la
méthode String quiSuisJe(). Cette méthode retournera "VOITURE" pour les
voitures et "CAMION" pour les camions. Quel est le concept POO à utiliser? Proposez
une solution en Java.

3/4
Exercice 7: paquetage exercice7 (4 pts)
On veut gérer une collection hétéroclite de véhicules à l'aide d'un ArrayList. La collection
MaCollectionHeteroclite comportera un numéro et la liste de véhicules appelée maListe.
1. Compléter la classe MaCollectionHeteroclite avec le b.a.-ba (constructeur,
getters/setters si nécessaire)
2. Redéfinir la méthode toString renvoyant la chaîne de caractères constituée des
informations relatives à un véhicule. Pour rappel Java fournit déjà un toString
pour les ArrayList donc ne vous privez pas de l'utiliser. Mais je veux que le numéro
de la collection fasse partie de votre chaine finale.
3. Compléter la classe MaCollectionHeteroclite avec les méthodes suivantes:
public void ajouter(Vehicule v) : Ajouter un véhiculer à ma
collection !
public int combienDeCamions() : Combien de camions il y a dans
ma collection hétéroclite ?
public List<Voiture> mesVoitures() : Je désire récupérer une
liste des voitures contenues dans ma collection (sans les
camions).
public void quiSontIls() : une méthode qui parcourt toute la
collection de véhicules et qui fait appel à la méthode
quiSuisJe() (si vous avez fait la question précédente).

Quand je dirais : STOP ! On ferme Eclipse ! Vous obtempérez. Merci


d'avance.

4/4

Vous aimerez peut-être aussi