This is an old revision of the document!
Si lors de l’exécution d’une fonction, un événement pouvant conduire à l’interruption de l’exécution se produit, cet événement est une exception.
Selon cette définition :
En effet, quand une exception se produit, il est possible de procéder à des opérations palliatives qui permettront au programme de continuer de fonctionner.
En fait, l'exception doit être vu comme un élément initiateur qui s'il n'est pas gérer conduira à l'échec de la fonction ou du programme. Cependant, une exception peut-être capturée (ie. détectée et traitée) et dans ce cas, la fonction ou le programme pourront éventuellement continuer à effectuer leur tâche.
Avant l'apparition du concept des exceptions, la conception d'un programme “sûr” et “robuste” imposait que l'on vérifier avant d'exécuter une opération si les paramètres étaient corrects et après que l'opération se soit réalisée, si l'opération n'a pas connu d'erreur. Ainsi pour l'ouverture d'un fichier en lecture en C, nous effectuions les opérations suivantes :
if(filename == NULL){ perror ( "Empty file name" ); exit ( EXIT_FAILURE ); } FILE *fp = fopen (filename, mode ); if ( fp == NULL ) { perror ( "Unable to open file" ); exit ( EXIT_FAILURE ); }
Nous voyons que nous mélangeons le code relatif aux opérations et le code relatif à la vérification des opérations. D'ailleurs au passage, il y a plus de code pour les vérifications que réaliser l'opération. En plus, est-ce que c'est bien exit
qu'il fallait appeller si un échec se produit ? Cela dépend typiquement du contexte d'utilisation. Peut-être que cela est sans conséquence et que le programme peut continuer en essayant de lire un fichier de sauvegarde.
L'idée des exceptions, c'est de séparer le traitement des fautes de la survenance de la faute. Reprenons l'exemple précédent avec l'idée de faire une fonction générique d'ouverture de fichiers :
readFile(file_name, file_mode) si file_name est NULL => signale que le nom du fichier est NULL et arrête la fonction. appelle fopen pour ouvrir le fichier. si fopen n'a pas pu ouvrir le fichier => récupère le code d'erreur signale l'erreur qui s'est produite. lit le contenu du fichier si une erreur se produit durant la lecture => arrête la lecture signale l'erreur qui s'est produite ferme le fichier si une erreur se produit durant la fermeture signale l'erreur qui s'est produite