Exercice : Compte en banque 2

But : Comparer héritage et composition.
On dispose d'un programme gérant les comptes en banques décrits dans l'exercice Compte en banque 1 et on souhaite ajouter la notion de découvert maximum autorisé.
On veut que les opérations risquant de générer un découvert supérieur au découvert maximum génèrent une exception de type DecouvertException, et que le programme s'arrête, affichant un message du type :
DecouvertException: Retrait de 500,00 impossible
Essayez d'implémenter cela de deux manières :
  1. En utilisant l'héritage : écrire une sous-classe de Compte : CompteAvecDecouvert, qui contient un champ supplémentaire : decouvertMax.
    Une fois un compte créé, ce champ ne doit pas pouvoir être modifié.
    Afin d'implémenter CompteAvecDecouvert, il est possible de modifier Compte.
  2. En utilisant la composition : CompteAvecDecouvert n'hérite pas de compte mais contient un compte.
    Si besoin, il est aussi possible de modifier la classe Compte.
Pour les deux implémentations, la classe CompteAvecDecouvert a un constructeur prenant en paramètre le nom du compte et le montant du découvert maximum utilisé.

Pour les deux implémentations, utilisez la classe TestCompteAvecDecouvert fournie dans TestCompteAvecDecouvert.java.
Son exécution donne :
java TestCompteAvecDecouvert
===== Etat initial =====
Compte 1 - Découvert max 1000.0 - Solde: 0.0
Compte 2 - Découvert max 4000.0 - Solde: 0.0
===== c1.retirer(800.0) =====
Compte 1 - Découvert max 1000.0 - Solde: -800.0
===== c1.virerVers(500.0, c2) =====
Retrait de 500,00 impossible sur Compte 1
DecouvertException: Retrait de 500,00 impossible sur Compte 1
	at CompteAvecDecouvert.retirer(CompteAvecDecouvert.java:15)
	at CompteAvecDecouvert.virerVers(CompteAvecDecouvert.java:22)
	at TestCompteAvecDecouvert.main(TestCompteAvecDecouvert.java:19)