:: Enseignements :: Licence :: L3 :: 2013-2014 :: Programmation Objet avec Java ::
|
Objets, délégation, structure simple, exceptions
|
Exercice 1 - Eclipse
A partir de maintenant, nous allons utiliser Eclipse (lancer la commande eclipse-lambda dans un terminal) comme environnement pour écrire les TDs.
- Créer un projet nommé TP4.
- Modifier les propriété du projet TP4 pour que les classes (fichiers .java) soit générées dans le répertoire classes.
- Faire de même pour que tous les future projets créés (Aller voir dans le menu Window > Preferences).
- Vérifier que l'environnement d'exécution est bien Java-1.7, changer si ce n'est pas le cas.
- Vérifier que l'environnement de compilation est bien 1.7, changer si ce n'est pas le cas.
- Écrire une classe Main qui affiche Hello Eclipse.
- A la maison:
- Que fait sysout + Ctrl+Space dans un main ?
- Que fait toStr + Ctrl+Space dans une classe ?
- Définir un champs foo de type int, que fait get + Ctrl + Space, et set + Ctrl + Space.
- Dans le menu Source, comment générer un constructeur initialisant le champ foo ?
- Sélectionner le nom de la classe puis Alt + Shift + R, qu'obtient-on ? Même question avec le champ foo.
- Écrire a = 2 + 3 + 4, puis sélectionner 2 + 3 puis Alt + Shift + L.
- Écrire new Integer(2), en gardant le curseur après ')', appuyer sur Ctrl + 1, que se passe t'il ?
- Déclarer une variable s de type String et cliquer sur String en maintenant la touche Ctrl. Que se passe t'il ?
- Dans la méthode toString(), que fait un Ctrl + Clic sur super.toString() ?
- Sélectionner le champs foo, puis Ctrl + Shift + G. Que se passe t'il ?
- À quoi sert Ctrl + Shift + O ?
Exercice 2 - Caddie en amazone
Le but de cet exercice est de définir
une classe ArrayShoppingCart qui représente
un caddie contenant un ensemble de livres
(on réutilisera la classe Book du TP précédent).
On souhaite que chaque ArrayShoppingCart
puisse définir un nombre maximal de livres que l'on
peut stocker dans le caddie.
Le but de cet exercice est d'écrire une classe
ArrayShoppingCart utilisant un tableau
pour stocker les livres, son constructeur
ainsi qu'une méthode add qui permet d'ajouter
un livre au caddie.
Pour tout l'exercice, vous écrirez un main de
test dans la classe ArrayShoppingCartTest.
-
Est-il intéressant de stocker le nombre maximum de livres
dans un champ statique ?
-
Écrire le constructeur ainsi que la méthode add()
sachant que l'on vous demande de stocker les livres dans
un tableau.
Dans un premier temps, n'essayer pas de traiter le cas où
il y a plus de livres que le nombre maximum de produits.
Écrire, dans le main, un test pour ce cas précis.
Que se passe t'il ?
Comment doit-on modifier la méthode add ?
-
Écrire une méthode numberOfBooks qui renvoie
le nombre de livres stockés actuellement dans le caddie.
-
Écrire une méthode permettant d'afficher le contenu du caddie
avec le nombre de livres en en-tête, puis un livre pas ligne.
Attention à ce que votre code n'alloue pas trop d'objets!
-
Écrire une méthode longestTitle qui retourne le livre
du caddie qui à le titre le plus long.
Que doit-on faire si le caddie est vide ?
-
Écrire une méthode removeAllOccurences qui prend en paramètre
un livre et qui supprime toutes les occurrences de celui-ci dans le caddie.
Exercice 3 - Caddie Libre
L'implantation précédente obligeait le programmeur à choisir
à l'avance un nombre maximal de livres à stocker dans un caddie.
On souhaite lever cette limitation en utilisant la classe
java.util.ArrayList plutôt qu'un tableau pour stocker
les livres dans le caddie.
-
Créer une classe FreeShoppingCart, son constructeur
ainsi que la méthode add.
-
Comment enlever le warning que le compilateur signale
sur la méthode ArrayList.add ?
-
Écrire la méthode numberOfBooks.
-
On souhaite maintenant écrire la méthode longestTitle.
Utiliser pour cela un indice parcourant la liste et la méthode
ArrayList.get pour obtenir les livres.
-
Écrire une nouvelle version de la méthode longestTitle
et utilisant la méthode ArrayList.iterator puis les méthodes
Iterator.hasNext() et Iterator.next sur l'itérateur
renvoyé.
-
Écrire une 3ième version de la méthode longestTitle
utilisant une boucle foreach.
Comment le compilateur compile t'il une boucle foreach sur une collection ?
Utiliser javap si vous n'avez pas d'idée.
Écrire dans la méthode main d'une classe Test
une boucle foreach sur un tableau
(par exemple, celui des arguments du main).
Comparer les résultats avec ceux de la question précédente.
Que pouvez-vous en conclure ?
-
Écrire la méthode removeAllOccurences.
Qu'elle est la complexité de cette méthode.
-
Notez qu'il est possible, au lieu d'utiliser une java.util.ArrayList
pour stocker des livres, d'utiliser la classe java.util.LinkedList.
Modifier la classe FreeShoppingCart et expliquer pourquoi le programme compile toujours.
Qu'elle est alors la complexité de removeAllOccurences ?
-
Notez qu'il existe une méthode remove dans la classe java.util.Iterator,
comment améliorer la complexité de removeAllOccurences.
Écrire le code correspondant.
Et maintenant, quelle est la complexité ?
-
Conclure en indiquant dans quel cas doit-on utiliser la boucle foreach et
dans quel cas doit-on utiliser un itérateur explicitement sur une collection.
© Université de Marne-la-Vallée