Traitement d'Exception
Que soit béni l'inventeur de cette technique qui permet d'arriver à
une démo sans être mort de trouille.
La réalité est simple mais dure:
- Dans toute application, même testée de manière satisfaisante,
une erreur peut se produire à tout moment.
- La méthode (sous-programme) qui constate une erreur ne sait en général pas comment réagir
et ne peut pas corriger le problème.
On peut raisonnablement viser les objectifs suivants:
- Toujours fournir une information sur ce qui s'est passé et dans quelles conditions.
- Si possible remettre l'application dans un état stable et continuer l'exécution.
Le traitement d'erreur traditionnel offre quatre manières de réagir :
- Terminer le programme brutalement (Core Dump, Blue Screen of the Death) :
efficace, mais très désagréable pour l'utilisateur.
- Rendre une valeur particulière représentant l'erreur :
solution simple pour la fonction appelée, mais complique l'écriture des fonctions appelantes.
- Ignorer l'erreur : la plus utilisée et également la moins bonne solution.
Elle est en général complémentaire de la solution précédente (côté appelant)
- Appeler une fonction spécifique de traitement des erreurs
qui se retrouve obligée d'adopter une des solutions précédentes
Le mécanisme d'exception:
- Est implémenté dans de nombreux langages (C++, Ada, Eiffel, Java, Python, VB.NET).
- Il s'agit d'une manière complètement différente de traiter les erreurs.
- Une fonction qui désire traiter des erreurs spécifie un bloc de code spécial :
le traitement d'exception.
- Un sous-programme qui détecte une erreur va déclencher une exception.
- Le traitement séquentiel est interrompu.
- L'exécution reprend dans le sous-programme appelant
le plus proche en remontant la pile des appels,
qui a déclaré traiter ce type d'exception.
La fonction qui traite l'exception dispose des informations suivantes:
- Type de l'exception
- Données de l'exception déclenchée.
- Pile des appels (Stack Frame) ayant conduit au déclenchement de l'exception.