:: Enseignements :: IMAC :: IMAC2 :: IMAC2 2011-2012 :: Programmation Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Interfaces et liste chaînée |
L'exercice 1 est l'occasion de créer une nouvelle interface qui sera implantée par différents médias. Nous écrivons ensuite pour l'exercice 2 une liste chaînée implantant l'interface Iterable (et pouvant donc être utilisée par une boucle de type for-each).
Exercice 1 - Une interface pour les médias
Une bibliothèque c'est bien, mais une médiathèque, c'est mieux. On souhaite diversifier les médias stockés, qui ont en communs certaines propriétés : ils ont tous un titre et un prix hors taxe. Le prix hors taxe peut être modifié ; nous pouvons également obtenir le prix TTC après l'application d'un taux de TVA spécifique. Pour cela nous allons créer une interface contenant l'ensemble des méthodes communes.
Écrire une interface MediaBuyable qui contient les définitions de méthodes ayant les signatures suivantes :
-
String getTitle() qui retourne le titre du média
-
double getPrice() qui retourne le prix du média
-
double getTaxIncludedPrice(double taxRate) qui retourne le prix du média après ajout du taux de TVA spécifié
- Faites en sorte que Book et Comic implantent cette interface.
- Créer les classes AudioCD et VideoDVD qui implantent cette interface.
- Créer la classe BookIntegrale, representant une série de livres d'un même auteur, qui implante cette interface (le prix est la somme des prix de tous les livres)
- Modifier la classe Library pour qu'elle puisse contenir n'importe quel média.
Exercice 2 - Une liste chaînée de médias
La bibliothèque stocke ses livres dans un tableau de taille fixe. Pour pouvoir disposer d'une bibliothèque de taille extensible, nous devons utiliser une structure dynamique. Nous choisissons d'employer une liste chaînée : celle-ci est composée de maillons liés entre-eux ; nous conservons le premier maillon pour pouvoir parcourir la liste du premier au dernier élément.
Nous allons créer les classes nécessaires à l'implantation de la structure de liste chaînée dans le paquetage fr.upemlv.data. La liste devra contenir des éléments de type MediaBuyable. Pour cela deux classes seront nécessaires (on crééra les fichiers dans le répertoire
fr/upemlv/data) :
- La classe Link représentant un maillon de la liste.
- La classe LinkedList avec une référence vers le premier maillon de la liste avec les méthodes suivantes :
-
add(MediaBuyable media) qui ajoute un élément avant le premier élément dans la liste.
-
size() qui affiche le nombre d'éléments de la liste
-
toString() pour afficher le contenu de la liste
-
MediaBuyable get(int i) retournant le i-ème élément de la liste. Si i < 0 ou i >= N où N est la taille de la liste, il faudra retourner une exception java.lang.IndexOutOfBoundsException
On pourra tester les fonctionnalités de la liste dans une méthode main dans la classe LinkedList. Une fois le fonctionnement attendu obtenu, on pourra l'utiliser pour le stockage des éléments de la bibliothèque.
Modifiez maintenant la classe LinkedList afin qu'elle implante l'interface Iterable. Pouvez-vous réécrire certaines méthodes de la liste chaînée afin qu'elles bénéficient de cette interface ?
Si vous avez terminé, voici quelques idées d'amélioration :
- Insérer les éléments dans la liste à l'endroit approprié afin d'obtenir une liste triée par ordre lexicographique sur le titre.
- Implanter une méthode de suppression de média de la liste.
- Utiliser un double maillage afin de pouvoir parcourir dans les deux sens la liste (et proposer une interface ReverseIterable définissant une méthode pour obtenir un iterateur de parcours inverse).
© Université de Marne-la-Vallée