:: Enseignements :: Master :: M1 :: 2007-2008 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Exceptions, StringBuilder et paquetage |
Vous trouverez
içi
quelques notes concernant ce td.
Exercice 1 - La classe Parking
Avant propos, à partir de maintenant il vous est demandé
d'utiliser eclipse et d'écrire votre code
directement dans cet environnement.
On veut maintenant écrire une classe
Parking
qui sert à stocker des voitures. Les voitures seront
stationnées sur des places numérotées en partant de 0. Le
nombre de places est fixé une fois pour toutes à la
construction du parking.
Dans les questions suivantes une méthode qui prend en
paramètre un indice de place de parking qui n'existe pas
devra lever une exception de type
java.lang.IndexOutOfBoundsException
.
-
Écrire le constructeur de la classe
Parking
.
-
Écrire une méthode
park
qui prend en paramètres une voiture, un numéro de place,
qui gare la voiture à la place donnée si elle est libre,
lève une exception de type
java.lang.IllegalStateException
si la place est occupée.
-
Écrire une méthode
unpark
qui prend en paramètre un numéro de place et qui retire
du parking la voiture à cette place. La méthode retourne
l'objet Car récupéré. Elle lève une exception de
type
java.lang.IllegalStateException
si la place est vide.
-
Écrire une méthode
toString
affichant l'état du parking : pour chaque place, le
numéro, ainsi que les caractéristiques de la voiture qui
l'occupe si elle existe.
Vous pouvez regarder la documentation de la classe
java.lang.StringBuilder
.
Exercice 2 - La classe Parking mais mieux
-
On souhaite obliger le programmeur qui utilise la classe
Parking
à récupérer les exceptions.
Que doit-on faire ?
Fabriquer trois classes
NoCarAtThatPlaceException
,
AlreadyACarAtThatPlaceException
et
OutOfParkingException
.
-
En lisant la documentation que la classe
java.lang.Exception
, on remarque que celle-ci possède 4 constructeurs.
Dans les classes que vous venez de concevoir, quels
constructeurs vous proposez-vous d'implémenter ?
Ré-écrire la classe
Parking
pour qu'elle lève les bonnes exceptions.
Exercice 3 - Package et compilation
On souhaite mettre en place une architecture permettant de
séparer les fichiers source (.java) des fichiers bytecode
(.class).
Pour cela, créer les répertoires
src
et
classes
s'il n'existe pas déjà !
Désactiver la compilation automatique d'eclipse (
Project > Build automatically
) puis supprimer l'ensemble des classes du répertoire
classes
.
Pour cet exercice, vous travaillerez en compilant les
classes en utilisant
javac
dans une console et non en utilisant le compilateur interne
d'eclipse.
-
Créer le paquetage
fr.umlv.td.parking
dans le repertoire
src
et migrer l'ensemble de vos classes dans ce paquetage.
-
Recompilez l'ensemble de vos classes à partir de la
racine de ce package (i.e. le répertoire
src
en indiquant au compilateur (
javac
avec l'option "-d") de rediriger les fichiers compilés
dans le répertoire de destination
classes
-
Déplacer la classe de test (contenant le
main
) dans le paquetage
fr.umlv.td.main
Comment doit on compiler et exécuter le code de test
pour que celui-ci marche ?
Exercice 4 - Travail de fourmi [à la maison]
Ecrire un script ANT (cf le cours) faisant la compilation et
l'exécution du code de test
-
Ecrire une
target
compile
qui compile l'ensemble des fichiers de
src
et qui stocke ceux-ci dans
classes
.
Que doit-on faire si le répertoire
classes
n'existe pas ?
Crée un
target
prepare
pour cela et indiquer que la
target
compile
dépend de la
target
prepare
.
-
Ecrire une
target
clean
qui efface l'ensemble des
.class
générée.
-
Ecrire une
target
run
qui execute le code de test.
-
Ecrire une
target
jar
qui cré un jar exécutable correspondant au code de test.
Pour tester votre jar :
java -jar parking.jar
-
Ecrire une
target
all
qui sera la target par défaut et qui lancera la
compilation ainsi que la création du jar.
Exercice 5 - La classe Parking megabien!!
-
Écrire une méthode
getLocation
qui prend en paramètre un numéro d'immatriculation et
qui retourne le numéro de place occupée par la voiture
ou -1 si elle n'existe pas.
-
Écrire une méthode
remove
qui prend en paramètre un numéro d'immatriculation et
qui retire du parking la voiture trouvée. La méthode
retourne l'objet
Car
récupéré ou
null
si la voiture n'est pas dans le parking.
Quelle exception doit lever cette méthode ?
Attention : cette méthode ne doit lèver que les
exceptions qui sont logiques.
-
Déclarer une super-classe aux exceptions levées par les
méthodes du parking. Quel est l'intérêt d'une telle
exception pour la méthode
remove
?
-
Réorganiser votre code pour éviter de devoir attraper
les exceptions qui ne peuvent être levées.
-
Quelle est la complexité de l'implantation de
getLocation
que vous avez fournie ?
© Université de Marne-la-Vallée