Exceptions IFT1025: Programmation 2 Jian-Yun Nie.

Slides:



Advertisements
Présentations similaires
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Advertisements

DOM Document Object Model. Généralités Standard du W3C Parseur XML – Génération dun arbre dobjet – Construction totale de larbre DOM est spécifié en IDL.
SAX Simple API for XML. Généralités API non standard développé par les membres du forum XML-DEV Parseur XML – Orienté événement – Parsing dynamique SAX.
Le mécanisme des exceptions
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
gestion des exceptions
Voisin-Polian : Introduction à Java 1 Introduction à Java - les flots - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Introduction à Java - les exceptions -
Plan du cours 5:Threads introduction Définition Création des Threads
Programmer en JAVA par Tama
1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
JDBC: manipuler une base de données en Java IFT6800 – E 2007 Jian-Yun Nie.
Les entrées /sorties en Java François Bonneville
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
Traitement des erreurs en Java
Javascript les spécificités du langage - Partie 7 -
Principes de programmation (suite)
Tests Programmation par contrats
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
CYCLE 3 : Alternatives Faire des choix dans un programme en C 1- AIGUILLAGE SIMPLE sur CONDITION : if-else 2-AIGUILLAGE MULTIPLE sur CONDITIONS if-else.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Java : Héritage & Exceptions
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
NSY102 1 Concurrence compléments Notes de cours Cnam Paris jean-michel Douin, douin au cnam point fr 19 Mars 2007.
Le patron de conception « Strategy » Simon Durocher ( )
Programmation par Objets et Java
1 Part3 3 2 Exception Générée par un problème de programme Objet définissant une erreur Peut être saisie et traitée par un programme Une erreur: situation.
Révision des notions OO et Java Semaine 1 Jian-Yun Nie.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
Badr Benmammar Formation Développeur Java Thread et Swing Badr Benmammar
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
CSI 1502 Principes fondamentaux de conception de logiciels
BlueJ_VI 1 Java, les objets : tout de suite ! Test, assertions, « vérification statique » Notes de cours associées au chapitre 6 Avec des assertions, utilisation.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
Les assertions en Java.
Exceptions B. Liskov, Program Development in Java, chap. 4 Exceptions.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
GESTION ET TRAITEMENT DES ERREURS
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
Entrées / Sorties.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Traitement des erreurs en Java: les exceptions
1 Complément JAVA les assertions. 2 lan Tests et erreurs Assertions en Java Utilisation Bonne pratique des assertions.
1 COURS DE PROGRAMMATION ORIENTEE OBJET : Exceptions.
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
STREAMS (et fichiers).
Transcription de la présentation:

Exceptions IFT1025: Programmation 2 Jian-Yun Nie

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

É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

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

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

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) { System.err.println("Impossible d'ouvrir le fichier d'entree.\n" + e.toString()); System.exit(1); } } // ouvrir_fichier 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

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)

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

Mécanisme général Exemples dexemption –Diviser par 0 –Accéder un tableau avec un index invalide Méthode qui appelle: … Appel … Méthode appelée: … Normal Exception appel Message dexception Suite normale Traiter lexception Retour normal

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

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_1Méthode_2Méthode_3

Exemple de transmission dexception

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

Hiérarchie des classes dexceptions

Attraper (catch) une exception Attraper une exception pour la traiter try { statements : } catch ( ExceptionClass1 object) { statements : } catch (ExceptionClass2 object) { statements : } … Bloc où une exception peut se générer Blocs pour attraper les exceptions

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); }

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; }

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

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; }

Checked vs. Unchecked exception

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)

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 }

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

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)

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 > balance) { IllegalArgumentException exception = new IllegalArgumentException("Amount exceeds balance"); throw exception; } balance = balance - amount; }... } Général: throw exceptionObject; Forcer la méthode qui appelle de traiter cette exception

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

Un autre exemple class TemperatureException extends Exception { } class TooColdException extends TemperatureException { } class TooHotException extends TemperatureException { }

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 (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause).

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 …

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

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

assert assert booleanExpression ; assert booleanExpression : expression Si la condition non satisfaite, AssertionError Exemple //Interchange list.get(i) and list.get(j) // require 0 <= i, j < list.size() … private void interchange ( List list, int i, int j) { assert 0 <= i && i < list.size(): "precondition: illegal i"; assert 0 <= j && j < list.size(): "precondition: illegal j"; …

Alternative (public) //Interchange list.get(i) and list.get(j) // require 0 <= i, j < list.size() … public void interchange ( List list, int i, int j) { if (0 <= i && i < list.size()) throw new IndexOutOfBoundsException("illegal i); if (0 <= j && j < list.size()) throw new IndexOutOfBoundsException("illegal j); …

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 …

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

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)

Implantation public int plusPetit(int [] a) { … return pp(a, 0); } private int pp(int [] a, int ind) { … int p = pp(a, ind+1); if (p>a[ind]) return a[ind] else return p; } Utiliser Exception Utiliser Assert