:: Enseignements :: ESIPE :: E4INFO :: 2015-2016 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Rappel de notions de prog. objets
|
Pour l'ensemble des TDs de cette année nous allons utiliser l'IDE Eclipse
(pas de problème si vous voulez en utiliser un autre pourvu qu'il sache
faire de la complétion automatique et du refactoring).
Eclipse s'exécute en tapant dans un terminal :
eclipse-light
Une fois démarré, vérifier que vous utiliser le bon JDK,
donc dans Window > Preferences > Java > Installed JREs
et regarder que la version est bien compatible avec Java 8.
Puis vérifier que le compilateur a bien été configuré en mode 1.8,
dans Window > Preferences > Java > Compiler, le Compiler compliance level doit être à 1.8
Chaque exercice vient avec des tests unitaires JUnit qui
vous permettent de vérifier que votre implantation passe les tests.
JUnit requiert un JAR qui n'est pas installé dans votre projet Java
par défaut. Le plus simple est de créer un test JUnit (New -> JUnit Test),
de sélectionner JUnit 4 et de laisser faire Eclipse qui vous proposera
d'installer le JAR Junit4.
L'autre solution est d'associer la librarie JUnit dans le build path du projet.
bouton droit -> Properties -> Java Build Path -> Add Library -> JUnit -> JUnit 4
Exercice 1 - Location de voitures
Le but de cet exercice est de créer un ensemble de classes permettant
de gérer une agence de location de voitures.
-
Ecrire une classe Car dans le package fr.umlv.rental,
correspondant à un véhicule qui pourra être loué.
Un vehicule est décrit par un modèle (une chaine de caractères) ainsi
qu'une année de fabrication.
Par exemple, une Ford Mustang sera créée de cette façon:
Car mustang = new Car("ford mustang", 2014)
-
Modifier la classe Car pour que le code suivant affiche
le texte "ford mustang 2014".
System.out.println(mustang);
-
Créer une classe CarRental (toujours dans le package fr.umlv.rental)
qui stocke l'ensemble des véhicules qui peuvent être loués dans une liste.
La classe CarRental doit possèder une méthode add qui permet d'ajouter
un véhicule dans la liste.
Faire en sorte que la liste ne puisse pas contenir null
en empéchant d'ajouter des voitures null.
Pour tester si une valeur est null, vous utiliserez la méthode
Objects.requireNonNull().
-
Ecrire une méthode remove qui permet de retirer un véhicule de la liste.
Que faire si le véhicule n'a pas au préalablement été ajouté ?
Vérifier que le test carRentalAddRemove est valide. Si non,
expliquez quel est le problème et corrigez le.
-
L'affichage d'une instance de la classe CarRental
devra afficher l'ensemble des véhicules de la liste, séparés
par des retours à la ligne (sans retour à la ligne final !).
Ecrire le code correspondant en utilisant la classe StringBuilder.
-
Rappeler à quoi sert l'interface
Stream en Java,
comment obtenir un stream à partir d'une liste, comment marche les méthodes filter,
map et collect et enfin comment peut-on utiliser le collecteur
Collectors.joining()
pour simplifier l'implantation de la méthode d'affichage que vous avez écrite précédemment.
-
On cherche à connaitre toutes les voitures enregistrées dans le CarRental
ayant la même année de fabrication.
Ecrire une méthode findAllByYear(int year) qui prend en paramètre
une année et renvoie une liste des voitures ayant l'année de fabrication demandée.
Que doit-on faire si il n'y a pas de voiture correspondant à l'année demandée.
-
L'application que vous developpez doit aussi être vendue en Egypte où
malheureusement, il n'est pas rare de ne pas trouver d'essence.
Pour éviter de mettre la clé sous la porte, les loueurs de voitures
ont trouvé une solution de secours en louant aussi des chameaux.
Modifier le code de votre application pour permettre de louer non
plus uniquement des véhicules mais aussi des chameaux, sachant
qu'un chameau possède juste une date de naissance et son affichage
est "camel" suivi d'un espace et de sa date de naissance.
Par exemple, le code suivant devra fonctionné
CarRental rental = new CarRental();
rental.add(new Car("ford mustang", 2014));
rental.add(new Camel(2010));
La méthode findAllByYear renverra une liste constituée
de véhicules et de chameaux.
En terme de design, faites en sorte que si plus tard l'on
doit ajouter une classe SpaceShuttle pour gérer les navettes
spaciales, alors il ne sera pas nécessaire de remodifier la classe
CarRental.
-
Si vous ne l'avez pas déjà fait, modifier votre code pour que
la date de fabrication d'un véhicule et de naissance d'un chameau
corresponde à un seul et même champ partagé par les classes
Car et Camel.
Vous utiliserez pour cela une classe abstraite.
Pourquoi la classe abstraite ne doit jamais être publique ?
-
Enfin, écrire dans la classe CarRental,
une méthode findACarByModel qui permet de trouver un véhicule
à partir de son modèle passé en paramètre.
Expliquer de plus pourquoi cette méthode doit retourner
un objet de type Optional.
© Université de Marne-la-Vallée