:: Enseignements :: IMAC :: IMAC2 :: IMAC2 2011-2012 :: Programmation Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Classes abstraites, classes internes et generics |
Nous utilisons dans le 1er exercice une classe abstraite afin de factoriser le code de certaines méthodes. Dans l'exercice 2, nous crééons une classe interne statique. L'exercice 3 est l'occasion d'introduire le mécanisme de generics.
Exercice 1 - Classe abstraite
Nous constatons que les classes Book, Comic, AudioCD et VideoDVD dupliquent du code inutilement pour les méthodes getTitle(), getPrice() et getTaxIncludedPrice(double rate). Pour éviter ces duplications de méthodes, nous crééons une classe abstraite AbstractMediaBuyable qui contiendra l'implantation de ces méthodes ; les classes sus-citées hériteront alors de cette nouvelle classe abstraite.
- Implanter la classe abstraite AbstractMediaBuyable
- Modifier les classes Book, Comic, AudioCD et VideoDVD pour qu'elles héritent de cette classe
Exercice 2 - Classe interne statique
Un média peut être décomposé en sous-parties (par exemple un livre en chapitres, un CD audio en pistes musicales, un DVD vidéo en différentes sections...). Nous allons donc créer une classe interne statique Subpart pour représenter une sous-partie. Une sous-partie contient pour information son titre.
- Définir la classe Subpart dans la classe AbstractMediaBuyable
- Ajouter un champ ainsi que des méthodes pour stocker, obtenir et ajouter des sous-parties
Exercice 3 - Generics
On souhaiterait pouvoir stocker les sous-parties d'un média en utilisant la classe LinkedList que nous avons créée au TD précédent. Malheureusement, cette classe a été codée avec des maillons pouvant contenir des MediaBuyable et non des Subpart. Une première solution serait d'utiliser le type racine Object : cela nous obligerait alors à caster les éléments récupérés. Une meilleure solution consiste à rendre la classe LinkedList (ainsi que Link) générique afin qu'elle puisse s'adapter au type que l'on manipule.
- Rendre générique les classes LinkedList et Link
- Modifier en conséquence les classes utilisant LinkedList, i.e. AbstractMediaBuyable et Library
© Université de Marne-la-Vallée