tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
ISIMA
  • twitter
  • linkedin
  • viadeo

[JavaSE] Exceptions

Date de première publication : 2014/01/20

Vous avez peut-être trouvé la section sur les exceptions trop rapide. Voilà pas à pas l'histoire sur le compte bancaire.

Code initial et premières manipulations

L'auvergnat apprécie tout ce qui lui permet d'être économe. Penchons-nous sur la classe CompteBancaire vue en cours...

public class CompteBancaire {
  private double solde = 0.0;       // solde du compte
  private double decouvert = -700.; // découvert autorisé

  public void retrait(double montant) {
    double nouveau = solde - montant;
    if (montant<0.0) 
      System.out.println("Mauvais montant");
    else if (nouveau<decouvert) 
      System.out.println("Operation impossible : le compte serait trop debiteur");
    else solde = nouveau;
  }
}

La première étape est d'ajouter une méthode main() à la classe CompteBancaire et d'instancier la classe. Vous pouvez ajouter une méthode toString() ou un getter pour connaître la valeur du solde du compte et proposer un constructeur pour changer la valeur initiale du compte.

Les exceptions

La classe telle qu'elle est présentée affiche un message d'erreur sur la sortie standard en cas de pépin. Nous pourrions gérer les cas exceptionnels avec le type de retour de la méthode mais rien n'empêche l'utilisateur de s'assoir sur l'erreur alors dans un soucis de transparence, nous allons utiliser le mécanisme des exceptions.

Montant négatif

Nous allons tout d'abord utiliser une exception de la plateforme Java lorsque le paramètre fourni à la méthode retrait() est négatif.

throw new IllegalArgumentException("Mauvais montant");

La ligne précédente permet de faire deux choses : instancier une nouvelle exception et la jeter : nous utilisons alors le mécanisme de gestion des exceptions.

À la compilation, vous obtenez une erreur : le compilateur veut que vous régliez le problème engendré par cette exception. Ne vous jettez pas sur le try/catch, ce n'est pas ce que l'on veut : on veut avertir toute méthode appelant retrait() qu'il peut y avoir un problème. Vous devez modifier la signature de la méthode retrait() et gérer dans la méthode main() le problème :

En tout cas, vous ne pouvez pas ne rien faire, cela ne marche pas !

Solde trop négatif

On vous propose de gérer le cas où le solde devient trop négatif en jetant une instance d'AutorisationExceptionAutorisationException est une exception personnalisée (une classe dérivant d'une exception, au pire java.lang.Exception).

Code du cours

Pour info, voilà la classe telle qu'elle a été donnée dans le support de cours :

Et voilà !

public class CompteBancaire {
  private double solde = 0.0;       // solde du compte
  private double decouvert = -700.; // découvert autorisé


  public void retrait(double montant) 
   throws IllegalArgumentException, AutorisationException {
    double nouveau = solde - montant;
    if (montant<0.0) 
      throw new IllegalArgumentException("Mauvais montant");
    if (nouveau<decouvert) 
      throw new AutorisationException();
    solde = nouveau;
  }
}

Comme nous l'avons vu en cours, le mécanisme des exceptions est complètement intégré au langage : il permet d'avoir un code sécurisé et de faire une gestion des cas exceptionnels très propre et surtout de respecter le principe de génie logiciel objet à savoir ne pas appliquer la politique de l'autruche sur les erreurs potentielles à l'exécution.