Classes, classes abstraites, héritage, itérateurs
Exercice 1 - Plaque d'immatriculation
On veut modéliser des numéros de plaques d'immatriculation
en séparant le code du département des autres informations.
-
Écrire une classe Immatriculation contenant 2
champs codeDepartement et serie
représentant respectivement le code du département
(penser aux codes 2A et 2B pour la Corse) et la séquence
de chiffres et de lettres qui le précède.
-
Écrire le constructeur initialisant prenant en
paramètres les valeurs des champs précédents, ainsi
que les méthodes toString(), getSerie()
et getCodeDepartement().
-
Écrire la méthode getDepartement() qui
retourne le nom du département en toutes lettres.
Exercice 2 - La classe Voiture
On souhaite maintenant représenter des voitures. Les
informations qui nous intéressent sont le numéro
d'immatriculation, la marque du véhicule et le nombre de
fenêtres de celui-ci, qui nous servira à calculer le montant
d'une taxe.
-
Écrire une classe Voiture contenant un champ plaque
de type Immatriculation, ainsi que des champs marque
et nombreDeFenetres repsectivement de type String
et int.
-
Écrire les méthodes accesseurs de la classe puis
une méthode toString() affichant la marque, l'immatriculation
et la taxe.
-
Écrire la méthode getMontantTaxe() qui calcule
le montant de la taxe Alif selon la formule 1000*nombreDeFenetres.
Exercice 3 - Généralisation à une classe Vehicule
On veut maintenant représenter 2 types de véhicules: les
voitures et les motos. Les informations d'immatriculation et de
marque sont utiles pour les deux types. En revanche, les motos
n'ont pas de fenêtre et le montant de la taxe pour une moto est
de vitesseMaxi*vitesseMaxi .
-
En tenant compte des indications précédentes, proposer
une architecture de classes permettant de modéliser ces
différents objets (penser à l'héritage).
-
Écrire les classes proposées. L'instruction
vehicule.getMontantTaxe()
doit retourner le montant de la taxe correctement
calculée, que vehicule représente une moto ou
bien une voiture.
Exercice 4 - Table dynamique générique
Le but de cet exercice est d'écrire une classe permettant
d'ajouter des élements dans une table et de parcourir celle-ci.
-
Écrire la classe Table. Pour cela, écrire un
constructeur prenant en argument un entier correspondant
à la taille maximale de la table, une méthode add()
permettant d'ajouter un élement dans la table et une
méthode size() retournant le nombre
d'éléments contenus dans la table.
-
Écrire une méthode iterator() renvoyant un
objet d'une classe implantant l'interface java.util.Iterator
permettant d'obtenir les élements un par un.
Rappel : Cette interface est composée de trois
méthodes :
-
hasNext() qui renvoie true s'il
reste encore des éléments à parcourir ;
-
next() qui renvoie l'élément parcouru
et avance sur l'élément suivant. S'il n'y a
plus d'élément à parcourir, la classe devra
lever l'exception NoSuchElementException ;
-
remove() qui supprime de la table
l'élément que next() vient de
renvoyer. Ici, nous n'implémenterons pas cette
méthode, mais lèverons plutôt l'exception
UnsupportedOperationException.
La classe implantant l'interface Iterator
sera déclarée dans un autre fichier ;
-
Transformer la classe implantant l'interface Iterator
en classe interne de la classe Table ;
-
Transformer cette classe en classe interne de la méthode
iterator() de Table ;
-
Enfin, transformer cette classe en classe anonyme.
Exercice 5 - Réutilisation
Le but de cet exercice est d'écrire une classe permettant de
stocker des véhicules (cf. exercice 2) dans une table de véhicules
en réutilisant la classe développée dans l'exercice
précédent.
La classe TableVehicule devra posséder les méthodes
suivantes :
-
add(Vehicule) qui permet d'ajouter un véhicule ;
-
iterator(String depCode) qui itère sur les véhicules
du département concerné.
-
Proposer une architecture pour implanter la classe TableVehicule
en réutilisant la classe Table
(PS: pas de copier/coller ni de modification de la classe Table) ;
-
Implanter l'architecture proposée.
Rémi Forax - Université de Marne La Vallée