IN101 – TD6  2011/2012
Durée : 2 h                                         Sujet v1                                                                                          

1         Objectifs

·         Maîtriser les méthodes et classes abstraites

·         Contrainte : tous les paramètres seront déclarés final

2         Classe Compte

  1. Un attribut réel aSolde
  2. Le constructeur habituel (combien de paramètres ?)
  3. Un accesseur getSolde()
  4. Un modificateur privé affecte() (et non pas setSolde())
  5. Deux procédures : debite() / credite() qui retranche / ajoute   
    au compte le montant passé en paramètre (appeler
    affecte())
  6. Une procédure capitalise1an() sans paramètre qui dépend de chaque type de compte
    Cette procédure sera appelée une fois par an sur TOUS les comptes.

3         Classe CompteCourant

  1. C’est évidemment un compte (non rémunéré).
  2. Le constructeur habituel (combien de paramètres ?)
  3. Une procédure capitalise1an() qui ici n’a pas grand-chose à faire

4         Classe CompteRémunéré

  1. C’est évidemment un compte
  2. Un attribut réel aTaux (représente un pourcentage, par exemple : 1.0 pour 1%)
  3. Le constructeur habituel (combien de paramètres ?)
  4. Un accesseur getTaux()
  5. Inutile : Une procédure capitalise1an() qui dépend de chaque type de compte rémunéré

5         Classe CompteAnnuel

1.       C’est un compte rémunéré une fois par an ; le taux est donc annuel.

2.       Le constructeur habituel (combien de paramètres ?)

3.       Une procédure capitalise1an() qui applique une seule fois le taux annuel.

6         Classe CompteMensuel

  1. C’est un compte rémunéré 12 fois par an ; le taux (fixe !) est donc mensuel.
  2. Le constructeur habituel (combien de paramètres ?)
  3. Une procédure capitalise1an() qui applique 12 fois successivement le taux mensuel. Elle devrait appeler une procédure récursive capitalise1mois(nbMois) également à écrire.

7         Exceptions

  1. Vérifiez à l’aide d’une IllegalArgumentException qu’on ne passe jamais un montant négatif en paramètre partout où ce risque existe. (pensez à fournir une String pour le message d’erreur)
  2. Créez la classe DecouvertException comportant un attribut réel aDecouvert, le constructeur habituel (pensez à fournir en plus une String pour le message d’erreur), et un accesseur.
  3. Lancer une DecouvertException dans affecte() avant que le solde ne devienne négatif.
  4. Résoudre le problème dans debite() : specify.
  5. Résoudre le problème dans credite() : catch. (lancer une RuntimeException("Erreur Prog."))

8         Interface Comparable

  1. Les comptes doivent désormais être comparables (d’après leur solde).
  2. Rappel : il faut définir la fonction compareTo() qui retourne –1, 0, ou 1 selon que le solde de l’objet courant est inférieur, égal, ou supérieur au solde du compte passé en paramètre.
  3. Ajouter une fonction privée arrondi2() qui sera appelée systématiquement dans affecte() et qui retourne son paramètre arrondi à 2 chiffres après la virgule. (utiliser (int) pour la partie entière)