Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Détection des erreurs
2
Détection des erreurs Introduction Origine des erreurs
Traitement des erreurs En C En C++/JAVA Les exceptions
3
Introduction Le développement et l’utilisation d’un programme implique la gestion de nombreuses erreurs. Du plus souhaitable au moins souhaitable, on peut citer le statut des différentes erreurs : 1. erreurs détectées à la compilation 2. erreurs détectées et traitées (corrigées) à l’exécution 3. erreurs détectées et non traitées à l’exécution 4. erreurs non détectées à l’exécution
4
Origine des erreurs Erreurs d’entrée/sortie
faute de saisie de l’utilisateur fichier corrompu ou inaccessible Erreurs de matériel Imprimante déconnectée disque dur saturé connexion réseau défaillante Erreurs de programmation index de tableau invalide emploi d’une variable référence non initialisée
5
Traitement des erreurs
En présence d’une erreur, un programme se comporte selon l'un des trois scenarii suivants : idéalement : il permet de revenir à un état défini et de poursuivre ainsi l’exécution. honnêtement : il avertit l’utilisateur, permet une sortie correcte après une sauvegarde de l’ensemble du travail en cours. lamentablement : il s’interrompt brusquement (avec éventuellement un message d’erreur peu clair)
6
Traitement des erreurs en C
Conventions de programmation valeurs spéciales de retour positionnement de flags Mais aucune garantie que les conventions soient suivies par tout le monde.
7
Traitement des erreurs en C++/java
Gestion d'exceptions Si un problème survient, une exception est levée. Toute exception peut/doit être attrapée. Le code de gestion des exceptions est placé à part. Faire la question 1 du support de cours
8
Lancement d'une exception : throw
Dans le corps d’une méthode à tester, figure (éventuellement) une ou plusieurs instructions spéciales « throw » permettant de lever une exception.
9
Que réalise la classe Vect ?
Exemple #include <cstdlib> using namespace std ; // déclaration et définition d'une classe vect_limite pour gérer une exeption de dépassement de limite class VectLimite { }; class Vect { private : int nelem ; int * adr ; public : Vect (int); ~Vect (); int & operator [] (int i); Vect::Vect (int n): nelem(n) { adr = new int [n] ; } Vect::~Vect () delete []adr ; int & Vect::operator [] (int i) if (i<0 || i>=nelem) VectLimite lim; throw (lim) ; return adr [i] ; Si le paramètre i n’est pas correct, déclenchement d’une exception Que réalise la classe Vect ?
10
Les exceptions Faire la question 2 du support de cours
11
Les exceptions Une exception est un objet transmis lors du défaut
Avant de lever (lancer) une exception, celle-ci doit être créée. lever/lancer : throw créer : new Une exception peut être attrapée dans tout contexte plus général. attraper : catch
12
Attraper une exception
Un bloc try { } délimite le code à surveiller Un ou plusieurs blocs catch(… ) { } suivent: chaque bloc catch(… ) permet de récupérer la main pour traiter un type d'erreurs. ils sont considérés dans l'ordre jusqu'à ce que l'exception levée corresponde au type ou à un sous-type de celui indiqué en argument.
13
Gérer une exception Certaines méthodes peuvent lancer des Exceptions.
Il est nécessaire lorsqu'on utilise une telle méthode : Soit d’attraper les exceptions levées soit de laisser passer les exceptions
14
Exemple exception cas limite // traitement de l’exception vect_limite
int main () { try // Zone de surveillance Vect v(10) ; v[11] = 5 ; // Ici déclenchement d’une exception // car l’indice est trop grand } catch (VectLimite lim) // Traitement de l’exception cout << "exception cas limite" << endl ; exit (-1) ; // Sortie du programme exception cas limite
15
Faire les questions 3-4 du support de cours
16
Exemple (cas limite) // déclaration - définition des deux classes pour les exceptions class VectLimite { public : int hors ; // valeur de l'indice hors limites VectLimite (int i) { hors = i ; } } ; class VectCreation int nb ; // nombre éléments demandes VectCreation (int i) { nb = i ; } Attention: Attributs publics!!
17
Exemple (cas limite) // Redéfinition du constructeur de la classe Vect
Vect::Vect (int n) { if (n <= 0) { // anomalie VectCreation pbCreation(n) ; throw pbCreation ; } // construction si n est correct adr = new int [n] ;
18
Exemple (cas limite) // surcharge de l'opérateur []
int & Vect::operator [] (int i) { if (i<0 || i>nelem) { // anomalie VectLimite pbLimite(i) ; throw pbLimite ; } return adr [i] ; // fonctionnement normal
19
Exemple (cas hors intervalle)
// Programme exemple pour intercepter les exceptions int main () { try // Zone de surveillance Vect v(-3) ; // provoque l'exception vect_creation v[11] = 5 ; // provoquerait l'exception vect_limite } catch (VectLimite lim) // Traitement de l’exception vect_limite cout << "exception indice " << lim.hors << " hors limites " << endl ; exit (-1) ; catch (VectCreation crea) // Traitement de l’exception vect_creation { cout << "exception creation vect nb elem = " << crea.nb << endl ; exception creation vect nb elem = -3
20
Faire les questions 5-6 du support de cours.
Faire le diagramme de classe final.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.