:: Enseignements :: IMAC :: IMAC2 :: IMAC2 2011-2012 :: Programmation Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Héritage |
Nous étudions le mécanisme d'héritage de classes en Java à travers ces quelques exercices.
Préliminaire : utilisation d'Eclipse
Il est possible d'utiliser un éditeur de texte classique pour développer ses programmes Java. Des environnements de développement intégrés offrent certaines fonctionnalités supplémentaires agréables telle que l'autocomplètement, l'accès direct à la Javadoc, la recompilation automatique ainsi que des possibilités de refactoring (déplacement de classes, renommage de champs, classes...). Parmi eux on compte pour le langage Java on compte Eclipse et Netbeans.
Pour commencer, on utilise Eclipse pour créer un nouveau projet Java et lui ajouter les classes écrites lors du premier TD. On pourra ensuite exécuter les méthodes main des classes à l'aide du menu run.
Exercice 1 - De nouveaux constructeurs
Nous cherchons à améliorer la classe Book en lui ajoutant de nouveaux constructeurs :
- Ajouter d'abord un constructeur prenant pour arguments un titre, auteur et ISBN (avec un coût initialisé à zéro). Peut-on maintenant utiliser le constructeur sans argument ? Pourquoi ?
- Ajouter deux autres constructeurs prenant pour arguments le titre, l'auteur et le coût pour l'un (ISBN initialisé par une chaîne vide) ; le titre et l'auteur pour l'autre (avec coût nul et ISBN vide)
Comment éviter la redondance de code ? Tester chaque constructeur dans la méthode main.
Exercice 2 - Comptage de livres
Le but de cet exercice est d'apprendre a utiliser les destructeurs, ainsi que les membres et méthodes statiques.
On souhaite compter le nombre de Book instanciés. Il nous faut donc :
- un nouveau membre count partagé par toutes les instances
- qui est incrémenté à chaque création d'un livre
- qui est décrémenté à chaque fois qu'un livre est détruit
On souhaite également pouvoir connaitre ce nombre d'instances, sans avoir sous la main une instance.
Proposer des solutions à ces problèmes, puis tester cela de la façon suivante : construire deux livres, afficher le nombre d'instances, détruire un des livres, afficher le nombre d'instances. Que remarquez vous?
Exercice 3 - Un peu de variété
Nous allons maintenant faire un peu d'héritage.
- Creer une classe Comic qui hérite de Book et qui contient en plus le nom du dessinateur (on considerera qu'il peut être différent de l'auteur), et un booléen qui indique si la BD est en couleur ou non.
- Faire des constructeurs adaptés, dont un considérant que l'auteur et le dessinateur sont la même personne. Le système de compte des livres est-il encore efficace? Si ce n'est pas le cas, c'est que vous avez mal travaillé ;)
- Redefinir les méthodes toString() et equals(Object o) et les tester.
Exercice 4 - Une bibliothèque améliorée
On souhaite que notre bibliothèque soit un peu plus efficace, et fournir plusieurs méthodes :
- Une méthode d'affichage abrégé du contenu, n'affichant que les titres des livres
- Une méthode retournant une liste des bandes dessinées contenues dans la bibliothèque (Voir LinkedList)
- Un ensemble de méthodes retournant une liste des livres ayant certaines propriétés (titre, auteur, BD en couleurs)
- Un ensemble de méthodes affichant les livres ayant certaines propriétés (titre, auteur, BD en couleurs)
Que faut il ajouter aux classes Book et Comic pour pouvoir faire cela ? Faites le nécessaire et implanter ces méthodes.
Exercice 5 - Une bibliothèque exceptionnellement... vide
On souhaite que notre bibliothèque puisse nous retourner le prix moyen d'un livre.
- Utiliser une boucle foreach et une division par le nombre de livres, sans faire de tests.
- Que ce passe-t-il si on teste dans une bibliothèque vide ? Comment y remédier ?
© Université de Marne-la-Vallée