:: Enseignements :: Licence :: L3 :: 2012-2013 :: Programmation Objet avec Java ::
[LOGO]

Objets, délégation, structure simple, exceptions


Exercice 1 - Eclipse

A partir de maintenant, nous allons utiliser Eclipse comme environement pour écrire les TDs.
  1. Créer un projet nommé TP4
  2. Modifier les propriété du projet TP4 pour que les classes soit générée dans le répertoire classes
  3. Faire de même pour que tous les future projets créer (Aller voir dans le menu Window > Preference).
  4. Vérifier que l'environement d'exécution est bien Java-1.7, changer si ce n'est pas le cas
  5. Vérifier que l'environement de compilation est bien 1.7, changer si ce n'est pas le cas
  6. Ecrire une classe Main qui affiche Hello Eclipse
  7. A la maison,
    1. Que fait sysout + Ctrl+Space dans un main
    2. Que fait toStr + Ctrl+Space dans une classe
    3. Définir un champs foo de type int, que fait get + Ctrl+Space, et set + Ctrl+Space
    4. Dans le menu Source, comment générer un construteur initializant le champ foo ?
    5. Sélectionner le nom de la classe puis Alt+Shift+R, qu'otient'on ?, même question avec le champ foo
    6. Ecrire a = 2 + 3 + 4, puis sélectionner 2 + 3 puis Alt+Shift+L
    7. Ecrire new Integer(2), en gardant le curseur après ')', appuyer sur Ctrl+1, que se passe t'il ?
    8. Déclarer une variable s de type String, et cliquer sur String en maintenant la touche Ctrl, que se passe t'il
    9. Dans la méthode toString(), que fait un Ctrl+Clic sur super.toString() ?
    10. Sélectionner le champs foo, puis Ctrl+Shift+G, que se passe t'il ?
    11. A quoi sert Ctrl+Shift+O

Exercice 2 - Caddie de la ménagère

Le but de cet exercice est de définir une classe ArrayShoppingCart qui représente un caddie contenant un ensemble de produits.
On souhaite que chaque ArrayShoppingCart puissent définir un nombre maximal de produits que l'on peut stocker dans le caddie.
Ecrire la classe ArrayShoppingCart, son constructeur ainsi qu'une méthode add qui permet d'ajouter un produit au caddie.
Pour tout l'exercice vous écrirez un main de test dans la classe ArrayShoppingCartTest.

  1. Est-il intéressant de stocker le nombre maximum de produits dans un champ statique ?
  2. Ecrire le constructeur ainsi que la méthode add() sachant que l'on vous demande de stocker les produits dans un tableau.
    Dans un premier temps, n'essayer pas de traiter le cas où il y a plus de produits que le nombre maximum de produits.
    Ecrire dans le main, un test pour ce cas précis, que se passe t'il ?
    Comment doit on modifier la méthode add ?
  3. Ecrire une méthode numberOfProducts qui renvoie le nombre de produits stockés actuellement dans le caddie.
  4. Ecrire une méthode permettant d'afficher le contenu du caddie avec en entête le nombre de produits puis un produit pas ligne.
  5. Ecrire une méthode price qui retourne le prix d'un caddie, i.e. la somme des prix des produits.
  6. Ecrire une méthode removeAllOccurences qui supprime toutes les occurences d'un produit.

Exercice 3 - Caddie Libre

L'implantation précédente obligeait le programmeur à choisir à l'avance un nombre maximal de produits à stocker dans un caddie. On souhaite lever cette limitation en utilisant la classe java.util.ArrayList plutôt qu'un tableau pour stocker les produits dans le caddie.

  1. Réécrire le constructeur et la méthode add.
  2. Comment enlever le warning que le compilateur signale sur la méthode ArrayList.add ?
  3. Ré-écrire les méthodes numberOfProducts et price.
  4. Ecrire la méthode price en parcours la liste avec un Iterator, en utilisant la méthode iterator. (pour vous aidez, vous pouvez aussi lire la doc de la classe java.util.Iterator.
  5. Modifier le code précédent pour utiliser une boucle foreach.
    Comment le compilateur compile t'il une boucle foreach sur une collection ?
    Et sur un tableau ?
  6. Ecrire la méthode removeAllOccurences. Qu'elle est la complexité de cette méthode.
  7. Supposons que l'on utilise la classe LinkedList à la place de la classe ArrayList, qu'elle est alors la complexité de removeAllOccurences ?
  8. Notez qu'il existe une méthode remove dans la classe Iterator, comment améliorer la complexité de removeAllOccurences.
    Ecrire le code correspondant.
    Quelle est maintenant la complexité ?
  9. Donc dans quel cas doit-on utiliser la boucle foreach et dans quel cas doit-on utiliser un iterateur explicitement sur une collection.