Approche Objet - TD3 : Valeurs observables

  1. Valeurs

    On considère l'interface Valeurs et son implémentation par défaut ValeursImpl.
    1. Modifier ValeursImpl pour que l'on puisse remplacer les instructions :
      double[] td = {1., 2., 3.};

      Valeurs v = new ValeursImpl(td);

      par
      Valeurs v = new ValeursImpl(1., 2., 3.);
    2. Montrer que dans la classe ValeursImpl, il est possible de modifier le résultat retourné par la méthode valeur(int i) sans utiliser changerValeur(int i, double v) et donc sans que la variable somme soit mise à jour.
      Corriger ce défaut d’encapsulation.
    3. Modifier le constructeur ValeursImpl(double[] valeurs) pour qu’il lève une exception ValeurNegativeException si une des valeurs passées dans le tableau valeurs est négative.
      Donner le code de la classe ValeurNegativeException.
      On souhaite également qu’il soit impossible de passer une valeur négative à la méthode changerValeur(int i, double v). Ecrire les modifications à apporter.
  2. Observateur/Observable

    On souhaite rendre une instance de Valeurs observable.
    1. Ecrire une classe ValeursObservables qui rend une instance de Valeurs observable. La classe ValeursObservables devra donc étendre la classe java.util.Observable et implémenter l’interface Valeurs en utilisant une instance de Valeurs déjà existante.
    2. Créer une classe ValeursObservateur qui implémente l'interface java.util.Observer et qui affiche sur la sortie standard toute modification de l'instance de Valeurs qu'elle observe. 
  3. Tests unitaires

    Ecrire une classe de tests utilisant JUnit4 pour la classe ValeursImpl.