IN101 – TD6
2011/2012
Durée : 2 h Sujet v1
1
Objectifs
·
Maîtriser les méthodes et classes abstraites
- S’initier aux interfaces et aux
exceptions
·
Contrainte : tous les paramètres seront
déclarés final
2
Classe Compte
- Un attribut réel
aSolde
- Le constructeur
habituel (combien de paramètres ?)
- Un accesseur
getSolde()
- Un modificateur privé
affecte() (et non pas setSolde())
- Deux procédures : debite() / credite() qui retranche / ajoute
au compte le montant passé en paramètre (appeler affecte())
- 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
- C’est évidemment un
compte (non rémunéré).
- Le constructeur
habituel (combien de paramètres ?)
- Une procédure capitalise1an() qui ici n’a pas
grand-chose à faire
4
Classe CompteRémunéré
- C’est évidemment un
compte
- Un attribut réel aTaux
(représente
un pourcentage, par exemple : 1.0 pour 1%)
- Le constructeur
habituel (combien de paramètres ?)
- Un accesseur
getTaux()
- 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
- C’est un compte
rémunéré 12 fois par an ; le taux (fixe !) est donc mensuel.
- Le constructeur
habituel (combien de paramètres ?)
- 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
- 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)
- 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.
- Lancer une DecouvertException dans affecte() avant que le solde ne
devienne négatif.
- Résoudre le problème
dans debite() : specify.
- Résoudre le problème
dans credite() : catch. (lancer une RuntimeException("Erreur
Prog."))
8
Interface Comparable
- Les comptes doivent
désormais être comparables (d’après leur solde).
- 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.
- 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)