cm04-gestiondeserreurs.pdf — March 15, 2005 — 1
as
Architecture des Systèmes d’Information
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique
Programmation
- Gestion des erreurs -
Nicolas Malandain
March 15, 2005
Gestion des erreurs 1 / 26
as
Architecture des Systèmes d’Information
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique
1Pr´esentation
Principe
Les exceptions
2Les exceptions en Java
Principe et Types
Gestion et Syntaxe
Exemple
3Cr´eation
Principe
Exemple
4Pratique
Gestion des erreurs 2 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
La gestion d’erreur
La gestion d’erreur devrait/doit :
obliger le d´eveloppeur `a prendre en compte les erreurs importantes
proposer au d´eveloppeur de cr´eer son propre jeu d’erreurs
permettre au d´eveloppeur de g´erer proprement les erreurs
Gestion des erreurs 3 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
Anciennes m´ethodes
Principe du code de retour
Une fonction retourne une valeur (code) indiquant si elle s’est bien
pass´ee ou si il y a eu une erreur. Le code indique le type d’erreur.
Principe de la variable d’erreur globale
Une fonction, en cas d’erreur, affecte une valeur `a une variable globale
(exemple : errno en C).
Traitement des erreurs
Le traitement des erreurs est m´elang´e au code du programme
Gestion des erreurs 4 / 26
cm04-gestiondeserreurs.pdf — March 15, 2005 — 2
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
Les exceptions
D´efinition
Une exception est un ´ev´enement exceptionnel pouvant survenir lors de
l’ex´ecution d’un programme, celle-ci interrompt alors le d´eroulement
normale du programme pour entrer dans une branche de traitement.
Avantages des exceptions
1s´eparation du code et du traitement des erreurs
2propagation des erreurs `a travers la pile des appels
3organisation des erreurs
Gestion des erreurs 5 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
S´eparation du code et du traitement des erreurs
Sans gestion des exceptions
TypeCodeErreur lireFichier() {
TypeCodeErreur erreur = 0;
ouvrir le fichier;
if (fichier ouvert) {
obtenir sa taille;
if (tailleObtenu) {
allouer la m´emoire;
if (m´emoireDisponible) {
charger le fichier en m´emoire;
if (erreurLecture)
erreur = 1;
} else
erreur = 2;
} else
erreur = 4;
}
fermer le fichier;
if (le fichier ne se ferme pas)
erreur = erreur and 8;
return erreur;
}
Avec gestion des exceptions
lireFichier() {
try {
ouvrir le fichier;
obtenir sa taille;
allouer la m´emoire;
charger le fichier en memoire;
fermer le fichier;
} catch (OuvertureFichierEchec) {
traiter l’erreur;
} catch(CalculTailleFichierEchec) {
traiter l’erreur;
} catch (AllocationMemoireEchec) {
traiter l’erreur;
} catch (LectureFichierEchec) {
traiter l’erreur;
} catch (fileCloseFailed) {
traiter l’erreur;
}
}
Exemple modifi´e issu du tutoriel Java de Sun
Gestion des erreurs 6 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
Propagation des erreurs
Sans gestion des exceptions
methode1() {
TypeCodeErreur erreur = methode2();
if (erreur)
traiter erreur;
else
code de la methode;
}
TypeCodeErreur methode2() {
TypeCodeErreur erreur;
erreur = methode3();
if (erreur)
return erreur;
else
code de la methode;
}
TypeCodeErreur methode3() {
TypeCodeErreur erreur;
erreur = lireFichier();
if (erreur)
return erreur;
else
code de la methode;
}
Avec gestion des exceptions
methode1() {
try {
methode2();
code de la methode;
} catch (exception) {
traiter erreur;
}
}
methode2() throws exception {
methode3();
code de la methode;
}
methode3() throws exception {
lireFichier();
code de la methode;
}
Exemple modifi´e issu du tutoriel Java de Sun
Gestion des erreurs 7 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Les exceptions
Organisation des erreurs
Objectif
soit traiter diff´eremment les types d’erreurs
soit traiter de mani`ere identique toutes les erreurs
Gestion des erreurs 8 / 26
cm04-gestiondeserreurs.pdf — March 15, 2005 — 3
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Fonctionnement des Exceptions en Java
Principe
Lever une exception consiste `a d´erouter le flot d’instructions pour soit la
propager , soit la traiter.
Si l’exception est propag´ee au main alors le programme s’arrˆete et affiche
des informations la caract´erisant.
Informations associ´ees `a une exception lev´ee
le type de l’exception
Utile au d´eveloppeur qui appellera une m´ethode levant une
exception,
le bon type permettra le bon traitement
le lieu de l’exception donn´e par la pile des appels
Utile au d´ebogueur pour isoler/d´eboguer le probl`eme
un message caract´erisant l’exception
Utile `a l’utilisateur pour l’informer
Gestion des erreurs 9 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Hi´erarchie
Les exceptions sont des classes
Exceptions non control´ees
java.lang.Error
probl`eme de JVM arrˆet
java.lang.RuntimeException
gestion falcutative (ex: div / 0)
Exceptions control´ees
java.lang.Exception
propagation/traitement obligatoire
Deux m´ethodes pratiques de Throwable
void printStackTrace()
String toString()
Gestion des erreurs 10 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Exemple d’ex´ecution d’une exception non control´ee
DivisionParZero.java
1package fr.insarouen.asi.prog.cours4;
2import java.io.*;
3public class DivisionParZero {
4static int fct(int a, int b) {
5return a/b;
6}
7public static void main(String[] param) {
8int c;
9c=fct(5,3);
10 System.out.println("c= "+c);
11 c=fct(3,0);
12 System.out.println("c= "+c);
13 }
14 }
Ex´ecution
java -classpath ./classes fr.insarouen.asi.prog.cours4.DivisionParZero
c= 1
Exception in thread "main" java.lang.ArithmeticException: / by zero
at fr.insarouen.asi.prog.cours4.DivisionParZero.fct(DivisionParZero.java:5)
at fr.insarouen.asi.prog.cours4.DivisionParZero.main(DivisionParZero.java:11)
Gestion des erreurs 11 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Propager des exceptions
D´efinition
Propager une exception consiste `a renvoyer son traitement `a la m´ethode
appelante.
Syntaxe
methode(...) throws Exception1, Exception2 {
...
// appel `a une ou plusieurs m´ethodes susceptibles de lever des
// exceptions de classes Exception1, Exception2 (ou sous classes)
// la clause throws fait partie de la signature de la m´ethode
...
}
Remarque
En Java, toute exception non contrˆol´e lev´ee par une m´ethode est
implicitement propag´ee.
Gestion des erreurs 12 / 26
cm04-gestiondeserreurs.pdf — March 15, 2005 — 4
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Attraper des exceptions (traitement)
D´efinition
Attraper une exception consiste `a d´erouter le flot d’instructions vers une
autre partie du programme permettant de la traiter (transfert de
contrˆole).
Remarques
une seule clause catch ex´ecut´ee (la premi`ere qui matche)
possibilit´e d’attraper plusieurs exceptions en une seule clause avec
une classe m`ere.
la clause finally facultative est toujours ex´ecut´ee
Utilis´e pour ex´ecuter des op´erations coute que coute
ex: fermeture de fichiers, . . .
il est possible de m´elanger propagation et traitement des exceptions
Gestion des erreurs 13 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Syntaxe
methode(...) {
...
try {
// appel `a une ou plusieurs m´ethodes susceptibles de lever des
// exceptions de classes Exception1, Exception2 (ou sous classes)
}
catch (Exception1 e) {
// Exception1 ne doit pas ^etre anc^etre de Exception2
}
catch (Exception2 e) {
}
finally {
// code toujours ex´ecut´e exception ou pas
}
...
}
Gestion des erreurs 14 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
Lever des exceptions
D´efinition
Lever une exception consiste `a d´erouter le flot d’instructions du
programme pour la traiter ou la propager.
Syntaxe
methode(...) ... {
...
throw new UneException();
...
}
Gestion des erreurs 15 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe et Types Gestion et Syntaxe Exemple
TableauEntierNaturelDynamique.java
package fr.insarouen.asi.prog.cours4;
public class TableauEntierNaturelDynamique {
private int[] tab;
public TableauEntierNaturelDynamique(int tailledebase) {
tab=new int[tailledebase];
}
public int getEntier(int indice) {
if (indice < 0 || indice >= tab.length)
throw new IndexOutOfBoundsException("indice non valide");
return tab[indice];
}
public void setEntier(int indice, int valeur)
throws IndexOutOfBoundsException, IllegalArgumentException {
// runtime exception donc d´eclaration facultative
if (valeur < 0)
throw new IllegalArgumentException("Entier < 0");
try {
tab[indice]=valeur;
}
catch (IndexOutOfBoundsException e) {
if (indice < 0)
throw new IndexOutOfBoundsException("indice < 0");
int[] tabtmp=new int[indice+1];
System.arraycopy(tab, 0, tabtmp, 0, tab.length);
tabtmp[indice]=valeur;
tab=tabtmp;
}
}
...
}
Gestion des erreurs 16 / 26
cm04-gestiondeserreurs.pdf — March 15, 2005 — 5
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Exemple
Principes et Syntaxe
Utilisation
cr´eer son propre syst`eme d’erreurs
traduire des exceptions de “trop bas niveau”
Syntaxe
Les exceptions sont des classes comme les autres. Les nouvelles
exceptions doivent d´eriv´ees de Exception ou de RuntimeException
Gestion des erreurs 17 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Exemple
Reprise du TableauEntierNaturelDynamique
La hi´erarchie d’exceptions cr´ee
Gestion des erreurs 18 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Exemple
TableauEntierNaturelDynamiqueException.java
package fr.insarouen.asi.prog.cours4;
public class TableauEntierNonTrouveException
extends TableauEntierNaturelDynamiqueException {
public TableauEntierNonTrouveException(String s) {
super(s);
}
public TableauEntierNonTrouveException() {
}
}
TableauIndiceHorsBornesException.java
package fr.insarouen.asi.prog.cours4;
public class TableauIndiceHorsBornesException
extends TableauEntierNaturelDynamiqueException {
public TableauIndiceHorsBornesException(String s) {
super(s);
}
public TableauIndiceHorsBornesException() {
}
}
. . .
Gestion des erreurs 19 / 26
Plan Pr´esentation Les exceptions en Java Cr´eation Pratique Principe Exemple
TableauEntierNaturelDynamiqueAvecException.java. . .
package fr.insarouen.asi.prog.cours4;
public class TableauEntierNaturelDynamiqueAvecException {
...
public int getEntier(int indice) throws TableauIndiceHorsBornesException {
if (indice < 0 )
throw new TableauIndiceNegatifException("indice:"+indice+" < 0 interdit");
if (indice >= tab.length )
throw new TableauIndiceHorsBornesException("indice sup´erieur ou ´egal `a la borne sup´erieure");
return tab[indice];
}
public void setEntier(int indice, int valeur)
throws TableauEntierValeurNegativeException, TableauIndiceNegatifException {
if (valeur < 0)
throw new TableauEntierValeurNegativeException(valeur+" < 0");
try {
tab[indice]=valeur;
}
catch (IndexOutOfBoundsException e) {
if (indice < 0)
throw new TableauIndiceNegatifException(indice+" < 0");
int[] tabtmp=new int[indice+1];
System.arraycopy(tab, 0, tabtmp, 0, tab.length);
tabtmp[indice]=valeur;
tab=tabtmp;
}
}
...
Gestion des erreurs 20 / 26
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !