Exceptions - PowerPoint PPT Presentation

About This Presentation
Title:

Exceptions

Description:

Laisser l'exception sans traiter ( chec du programme) Traiter l'exception (le programme ... Appel d'une m thode dans de bonnes conditions ? Ex cution de la ... – PowerPoint PPT presentation

Number of Views:38
Avg rating:3.0/5.0
Slides: 39
Provided by: NIE125
Category:

less

Transcript and Presenter's Notes

Title: Exceptions


1
Exceptions
  • IFT1025 Programmation 2
  • Jian-Yun Nie

2
Concepts
  • Erreur vs. Exception
  • Erreur Un erreur logique impossible de réparer
  • Exception un événement imprévu
  • Laisser lexception sans traiter (échec du
    programme)
  • Traiter lexception (le programme continue après
    le traitement)
  • Traitement dexception
  • Un contrôle de sécurité
  • Appel dune méthode dans de bonnes conditions ?
  • Exécution de la méthode se déroule correctement ?
  • Sinon, quelles alternatives, correction ?
  • Mécanisme de traitement général (classe) pour
    faciliter les traitements

3
Échec dun programme
  • Impossibilité pour le système daccomplir une
    tâche
  • 2 raisons déchec
  • Erreur logique dans limplantation (la faute du
    programmeur)
  • Impossibilité dobtenir des ressources
    nécessaires (e.g. fichier)
  • Dans le cas derreur, pas réparable (seulement un
    message derreur)
  • Mais pour la second classe possible de traiter

4
Ressources nécessaires
  • Matériel
  • Système dexploitation
  • Fichiers
  • Réseau
  • Base de données
  • Utilisateur (interaction)

5
Exception
  • Apparition dune situation anormale, détectable,
    qui conduit à léchec du programme
  • Possibilité pour un programme de détecter et
    traiter certaines exceptions pour éviter léchec
    du programme

6
Exemple
  • public class Lecture_mot
  • static BufferedReader input
  • public static void main(String args)
  • ouvrir_fichier("liste_mots")
  • traiter_fichier()
  • fermer_fichier()
  • // ouverture du fichier
  • public static void ouvrir_fichier(String nom)
  • try
  • input new BufferedReader(
  • new FileReader(nom))
  • catch (IOException e)

Si on utilise juste cette ligne, et que
"liste_mots" nexiste pas - une exception non
traitée, le programme échoue
Possibilité de traiter lexception ici, e.g.
demander à lutilisateur dentrer un autre fichier
7
Message dexception
  • catch (IOException e)
  • System.err.println("Impossible d'ouvrir le
    fichier d'entree.\n"
  • e.toString())
  • System.exit(1)
  • Message affiché
  • Impossible d'ouvrir le fichier d'entree.
  • java.io.FileNotFoundException liste_mots (No
    such file or directory)

8
Mécanisme général en Java
  • Permet de détecter, signaler ou traiter une
    exception
  • Non pour traiter des situations prévues
  • Nest pas un mécanisme de contrôle pour le
    branchement dun programme (if, )
  • Mais plutôt un autre mécanisme qui contrôle
    lexécution

9
Mécanisme général
  • Exemples dexemption
  • Diviser par 0
  • Accéder un tableau avec un index invalide

Méthode qui appelle Appel
appel
Méthode appelée Normal Exception
Retour normal
Suite normale
Traiter lexception
Message dexception
10
Mécanisme général
  • Deux mécanismes en parallèle
  • Traitement normal
  • Traitement dexception (exception handler)
  • Quand il y a une exception
  • Le traitement normal sarrête
  • Le traitement dexception prend le contrôle

11
Traitement dexception en chaîne
  • méthode_1 appelle méthode_2, qui appelle méthode
    3
  • Si méthode 3 génère une exception
  • Message dexception est envoyé à méthode_2
  • Méthode_2 peut
  • Traiter (attraper) lexception
  • Relancer lexception le message dexception sera
    envoyé à méthode_1
  • Si une exception nest traitée par aucune méthode
    qui appelle sortie du programme avec un message
    dexception

Méthode_1
Méthode_2
Méthode_3
12
Exemple de transmission dexception
13
Générer une exception
  • Certaines exceptions standard sont reconnues
  • ArithmeticException diviser par 0
  • ClassCastException Casting dun objet à une
    mauvaise classe
  • EOFException Lire après la fin dun fichier
  • IllegalArgumentException paramètres illégaux ou
    inappropriés
  • Quand une de ces exceptions est rencontrée, le
    système lance (throw) un message dexception

14
Hiérarchie des classes dexceptions
15
                                                                                                                                                                                                                                       
16
Attraper (catch) une exception
  • Attraper une exception pour la traiter

try statements catch (
ExceptionClass1 object) statements
catch (ExceptionClass2 object) statements

17
Exemple
  • public static void ouvrir_fichier(String nom)
  • try
  • input new BufferedReader(
  • new FileReader(nom))
  • catch (IOException e)
  • System.err.println("Impossible d'ouvrir le
    fichier d'entree.\n"
  • e.toString())
  • System.exit(1)

18
Un autre exemple
  • public void getSomeData () throws
    FileNotFoundException, SecurityException
  • FileReader in
  • boolean success false //Data file opened
  • int tryNumber 0 // of attempts to open
    datafile
  • int delay 5 1000 //wait in milli secs
  • while (!success)
  • try
  • tryNumber tryNumber 1
  • in new FileReader(DataFile)
  • success true
  • catch (SecurityException e)
  • if (tryNumber 1)
  • thisThread.sleep(delay)
  • else
  • throw e

19
Exécution avec catch
  • Si aucune exception est générée (thrown), les
    instructions dans catch ne sont pas exécutées
  • Si une exception est générée, lexception est
    comparée dans lordre avec les clauses de catch
    (ExceptionClass object)
  • Si la classe de lexception match celle de catch
  • exécution des instruction de ce catch,
  • continue après le dernier catch (sauter les
    autres catches)
  • Seulement le premier catch compatible avec
    lexception est exécuté
  • Important Catch dabord les sous-classes
    dexception
  • Si aucun catch est compatible avec lexception,
  • lexception nest pas attrapée (non traitée)
  • transmise à la méthode qui appelle

20
Checked vs. Unchecked
  • Checked exception
  • Vérifiée par le compilateur
  • Si le programme peut générer une telle exception,
    il doit
  • Soit la traiter dans le programme
  • Soit la retransmettre à lappelant (avec throws
    dans lentête)
  • Typiquement générée à cause de lenvironnement
  • Exemple, IOException
  • public void getSomeData () throws
    FileNotFoundException, SecurityException
  • Unchecked exception
  • RuntimeException
  • Problème du programmeur (mauvaise utilisation
    dune méthode, dun objet, )
  • Le compilateur ne la vérifie pas
  • Si un programme peut générer une telle exception,
    le programme na pas à la signaler dans lentête
  • public int division(înt a, int b) return a/b

21
Checked vs. Unchecked exception
22
Lancer une checked exception
  • Signaler au compilateur quune méthode peut
    lancer une exception (non attrapée, non traitée)
  • public void methode() throws ExceptionClass
  • Exemple
  • public void skip () throws IOException
  • String s
  • s input.readLine()
  • Si une exception apparaît, transmise à lappelant
    (caller)

23
Traitement partiel dexceptions
  • public void getSomeData () throws
    FileNotFoundException, SecurityException
  • FileReader in
  • try
  • in new FileReader (DataFile)
  • catch (FileNotFoundException e)
  • //cleanup
  • throw e // throws it again to its
    caller
  • catch (SecurityException e)
  • //cleanup
  • throw e // throws it again to its
    caller

24
finally
  • Exécuter un bloc quel que soit lexception
  • try
  • statement
  • . . .
  • finally
  • statement
  • . . .

Exécuter finally même si le bloc try lance ne
exception
25
finally
  • Souvent combiné avec catch
  • try
  • statement
  • . . .
  • catch (ExceptionClass exceptionObject)
  • statement
  • . . .
  • finally
  • statement
  • . . .

Même si une exception est attrapée, finally sera
toujours exécuté Utile pour sassurer de certaine
sécurité (cleanup)
26
Générer une exception explicitement
  • Un programme peut aussi générer une exception
  • public class BankAccount throws
    IllegalArgumentException
  • public void withdraw(double amount)
  • if (amount gt balance)
  • IllegalArgumentException exception
  • new IllegalArgumentException("Amo
    unt exceeds balance")
  • throw exception
  • balance balance - amount
  • . . .
  • Général throw exceptionObject
  • Forcer la méthode qui appelle de traiter cette
    exception

27
Définir ses propres exceptions
  • Les classes dexception prédéfinies ne sont pas
    suffisamment explicites
  • On a besoin de faire la différence entre les
    exceptions pour leurs traitements
  • Définir une sous-classe dexception
  • public class NoDataException extends Exception
  • public NoDataException ()
  • super()
  • public NoDataException (String s)
  • super(s)
  • Définir une hiérarchies de classes dexception

constructeurs
28
Un autre exemple
class TemperatureException extends Exception
class TooColdException extends
TemperatureException class TooHotException
extends TemperatureException
29
Classe Exception
  • Constructeurs
  • Exception()
  • Constructs a new exception with null as
    its detail message.
  • Exception(String message)
  • Constructs a new exception with the
    specified detail message.
  • Exception(String message, Throwable cause)
  • Constructs a new exception with the
    specified detail message and cause.
  • Exception(Throwable cause)
  • Constructs a new exception with the
    specified cause and a detail message of
    (causenull ? null cause.toString()) (which
    typically contains the class and detail message
    of cause).

30
Classe Throwable
  • 4 constructeurs
  • Throwable getCause()
  • Cause de cette exception (ou null)
  • String getMessage()
  • message envoyé par lexception
  • String toString()
  • Générer un message décrivant lexception

31
Penser Exception comme des classes / sous-classes
Une TooColdException est aussi une
TempretureException, Exception,
Throwable Attention aux catches Catch une
sous-classe avant une super-classe
32
Prévenir des erreurs
  • Certaines erreurs peuvent être détectées ou
    éviter
  • Tester la pré-conditon, post-condition ou
    linvariant dune méthode
  • Pré-condition condition sous laquelle on
    lappelle
  • Post-condition condition après la méthode
  • Invariant conditions devant être vérifiée tout
    au long
  • Test sur pré-condition facile (assert)
  • Test sur post-condition et invariant plus
    difficile

33
assert
  • assert booleanExpression
  • assert booleanExpression expression
  • Si la condition non satisfaite, AssertionError
  • Exemple
  • //Interchange list.get(i) and list.get(j)
  • // require 0 lt i, j lt list.size()
  • private ltElementgt void interchange (
  • ListltElementgt list, int i, int j)
  • assert 0 lt i i lt list.size()
    "precondition illegal i"
  • assert 0 lt j j lt list.size()
    "precondition illegal j"

34
Alternative (public)
  • //Interchange list.get(i) and list.get(j)
  • // require 0 lt i, j lt list.size()
  • public ltElementgt void interchange (
  • ListltElementgt list, int i, int j)
  • if (0 lt i i lt list.size()) throw new
    IndexOutOfBoundsException("illegal i)
  • if (0 lt j j lt list.size()) throw new
    IndexOutOfBoundsException("illegal j)

35
Convention
  • Méthode utilitaire private assert
  • Méthode public exception
  • Pourquoi pas dassert pour tester les paramètres
    ?
  • Ce test ne correspondent pas à la spécification
    de la méthode public
  • Ne permettrait pas de générer un message
    dexception approprié
  • Activer/Désactiver assertion
  • Javac -enableassertions
  • Javac -disableassertions

36
Méthode private ou public
  • Méthodes public
  • Comportement observable de lextérieur
  • défini par une spécification
  • Méthode private
  • Méthode utilitaire pour faire un traitement
    interne
  • Nest pas directement visible de lextérieur
  • Non définie par une spécification

37
Exemple
  • Définir une méthode qui fait retourne le plus
    petite valeur dun tableau
  • Spécification
  • Accepter un tableau de nombres entiers
  • Retourner la plus petite valeur stockée
  • Cas spécial - tableau vide un message
    dexception
  • Entête
  • public int plusPetit(int a)

38
Implantation
  • public int plusPetit(int a)
  • return pp(a, 0)
  • private int pp(int a, int ind)
  • int p pp(a, ind1)
  • if (pgtaind) return aind else return p

Utiliser Exception
Utiliser Assert
Write a Comment
User Comments (0)
About PowerShow.com