Chapitre 6 La gestion des Exceptions et les assertions

Slides:



Advertisements
Présentations similaires
Gestion de la concurrence avec Entity Framework Développement d’application avec base de données Chapitre 23 Hugo St-Louis – Automne 2015.
Advertisements

Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
Outils logiciel pour la programmation en C. 2 Automatiser la compilation : make make est un utilitaire présent dans toute les distribution de linux >
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
IFT359 – Programmation fonctionnelle Thème 02 B partie A introduction au langage fonctionnel choisi 1.
1 Java Avancé Les exceptions Rémi Forax
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
CINI – Li115 1 Semaine 6 Les fonctions ● Pourquoi écrire des fonctions ? ● Définition de fonctions ● Fonction main ● Appels de fonctions ● Portée des variables.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Le Langage JavaScript pour le web
Ajouter le code dans une page html
Comment corriger son code sans forcément appeler l’enseignant M2202
Modèle objet : les classes
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Les Exceptions Rémi Forax
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Pas de variable globale
Les notions de classe et d'objet
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Détection des erreurs.
Qu'est-ce que POSIX? Une librairie en langage C
Javadoc et débogueur Semaine 03 Version A17.
Collecte de données CAPI
Principes de programmation (suite)
Master Réseaux et Systèmes Distribués (RSD)
11ième Classe (Mardi, 18 novembre) CSI2572
Semaine 11 Les pointeurs (suite)
Les fonctions.
L’Instruction de Test Alternatif
Algorithmiques Abdelbasset KABOU
Buffer Overflow Anatomy of an exploit.
Langages de programmation TP3
Langages de programmation TP10
Les interfaces en PHP.
Réalisation d’une application web sous le thème: «Mon vétérinaire » par : Benzineb Asmaa et Meftahi Oualid Présentation à Université Saad Dahlab Blida.
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Programmation en C++ C++ de base
Programmation Android Debugger ses applications
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Plus de 4000 langages....
Calcul Scientifique Initiation à SCILB
Développement d’une Application CORBA
Le Java premiers pas.
La gestion des habilitations par le partenaire
Les classes et les objets
SYSTèMES à évènements discrets
B. Liskov, Program Development in Java, chap. 4 Exceptions
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
1 Exception && Structure dynamique Exception && Structure dynamique Mohammed OUANAN.
Schéma de conception Factory Method Exemple
Atos, Atos et le poisson, Atos Origin et le poisson, Atos Consulting ainsi que le poisson seul sont des marques déposées d'Atos Origin SA. © 2006 Atos.
Principes de programmation (suite)
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Piles et files.
STREAMS (et fichiers).
Lecture/Écriture de fichiers (I/O)
Chapitre 11 Exceptions.
Bases de données Singleton pour la connexion
TP N°1 : GUI en NetBeans Module R & C Université de Jijel
Contenu Systèmes de test parallèles Multithreading Synchronisation
TP N°4 Développement d’ une application
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

Chapitre 6 La gestion des Exceptions et les assertions A. Nejeoui

La gestion des Exceptions et les assertions Introduction Les programmeurs dans tout les langages essayent d’écrire des applications qui ne contiennent pas des bugs, or il es admit qu’aucun programme ne tourne parfaitement à 100%, les programmes doivent êtres préparés à des situations inattendues comme : - Mauvais type de données en entrée (formulaire) Fichier corrompu / introuvable Problèmes de connexions Défaillance matériel …etc. En Java ces événements inattendus qui surviennent lors de l’exécution s’appellent les Exceptions. Une application bien conçue doit être préparée pour la gestion des exceptions. 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Introduction On utilise les erreurs/exceptions pour traiter un fonctionnement anormal d’une partie d’un code (provoqué par une erreur ou un cas exceptionnel) En Java, une erreur (s’elle est bien gérée) ne provoque pas l’arrêt brutal du programme mais la création d’un objet, instance d’une classe spécifiquement créée pour être associée à des erreurs/exceptions 02.05.2018 La gestion des Exceptions et les assertions

Les trois catégories des Exceptions Toutes les exceptions héritent de la classe Throwable, on distingue 3 grand catégories des exceptions : checked exception, unchecked exception et error. 02.05.2018 La gestion des Exceptions et les assertions

exceptions contrôlées (Checked Exceptions) Soit les gérer où déclarer que votre application ne veut pas les gérer, est cela est vérifier par le compilateur c-à-d le compilateur vérifie si vous avez géré cette Exception où si vous avez délégué sa gestion à l’élément appelant(c’est pourquoi ils sont appelées des exceptions contrôlées). Ce type d’exception représente les situations qui peuvent survenir est que le développeur ne peut rien faire pour les éviter, supposons par exemple que vous essayer d’ouvrir un fichier. Ce fichier peut être introuvable. Java génère une exception de type FileNotFindException . Ce genre d’ exceptions est Représenté par la class Exception ce qui signifie que chaque fois qu’une exception de ce type survienne, java instancie un objet de cette classe et le passe à votre application, votre application peut utiliser cet objet peur obtenir des informations concernant le type d’exception générée et d’autres informations. 02.05.2018 La gestion des Exceptions et les assertions

exceptions contrôlées (Checked exception ) Même si vous pouvez mettre un test sur l’existence du fichier, sa ne résout pas le problème car, peut être une autre application qui a accès à ce fichier peut le supprimer juste une seconde avant d’y accéder. Ce qui fais que votre application doit être préparer pour gérer les exceptions de type FileNotFoundException lorsque vous voulez accéder à un fichier soit en lecture soit en écriture. Exceptions qui héritent de la classe Exception mais qui ne sont pas des RuntimeException Le compilateur vérifie que les méthodes utilisent correctement ces exceptions Toute méthode qui peut lancer une exception contrôlée, doit le déclarer dans sa déclaration 02.05.2018 La gestion des Exceptions et les assertions

Exceptions non contrôlées (Unchecked Exception) Ce sont les Exceptions qui ne sont pas vérifiés par le compilateur. Pour savoir si on les a géré ou pas (c’est pourquoi ils sont appelés des Exceptions non contrôlées). Car ils peuvent être évitées par de bonnes pratiques de programmation. Par exemple supposons que nous avons un tableaux de 5 chaînes de caractères comme suit : String tab[] = new String[5]; Si vous essayez d’accéder à l’élément tab[5], java lève une exception de type ArrayIndexOutOfBoundException et votre programme se termine. Normalement par un simple test sur l’index vous pouvez éviter ce genre d’exception, c’est pourquoi java ne complique pas la vie au programmeur en lui forçant à gérer ce genre d’exception via le mécanisme de gestion d’exception. Ce genre d’exception est représenté par la classe RuntimeException 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Erreurs (Errors) Un autre type d’exceptions représente les erreurs sévères qui causent l’arrêt immédiat de l’application, le développeur ne peut rien faire ni pour éviter ni pour gérer ce type d’erreurs, par exemple : si la mémoire du système est insuffisante le programme se termine et génère une erreur de type OutOfMemoryError. Ce genre d’erreurs sont représentées par la classe Error 02.05.2018 La gestion des Exceptions et les assertions

Exemple d‘Exception non contrôlée‘ A 02.05.2018 La gestion des Exceptions et les assertions

La pile des appels (Stack trace) Lorsqu’on exécute l’application avec des paramètres inadéquats la MVJ génère une exception de type NumberFormatException, comme vous voyer cette exception à causé l’arrêt immédiat de l’application. Car nous l’avons pas géré dans le code par un bloc try catch finnaly. Le programme n’a aucun autre choix que de se terminer ! La sortie par défaut que vous obtenez lorsqu’une exception non gérée est rencontré s’appelle « Stack Trace ». C’est une chaîne de caractères comportant Le 1 type + 2 Une description de l’exception + 3 la liste d’appels de méthodes : quelle méthode a appellé quelle méthode ..etc jusqu’à arriver à la méthode originale qui a généré l’exception. Le Stack trace aide à déboguer l’application. La lecture se fait du bas vers le haut 3 1 2 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Gérer une exception BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); public String LireString() { String inputLine = ""; try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); return inputLine; 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions try catch finally Le principe consiste à regrouper toutes les instruction susceptibles de générer des exceptions dans un bloc (try) et associer un traitement spécifique pour chaque exception attrapée dans un bloc (catch). Ainsi si une exception est levée, le traitement y associé est éxécuter et l’application continue normalement son flux d’exécution. 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions throws Si une partie d’une méthode lève une exception que vous voulez pas gérer avec un bloc try catch, vous déclarer que cette méthode lève ce genre d’exception en utilisant le mot clef throws comme suit: Exemple: BufferedReader reader = new BufferedReader (new InputStreamReader(System.in)); public String LireString() throws IOException { String inputLine = ""; inputLine = reader.readLine(); return inputLine; } 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Vocabulaire Une instruction, une méthode peut lever ou lancer une exception : une anomalie de fonctionnement provoque la création d’une Exception Une méthode peut attraper, saisir, traiter une exception par une clause catch d’un bloc try catch Une méthode peut laisser se propager une exception : – elle ne l’attrape pas par une clause catch – l’erreur « remonte » alors vers la méthode appelante qui peut elle-même l’attraper ou la laisser remonter 02.05.2018 La gestion des Exceptions et les assertions

Exception levée en dehors d’un bloc try La méthode retourne immédiatement ; l’exception remonte vers la méthode appelante 2. La main est donnée à la méthode appelante 3. L’exception peut alors éventuellement être attrapée par cette méthode appelante ou par une des méthodes actuellement dans la pile d’exécution 02.05.2018 La gestion des Exceptions et les assertions

Exception levée dans un bloc try Si une des instructions du bloc try provoque une exception, les instructions suivantes du bloc try ne sont pas exécutées et, – si au moins une des clauses catch correspond au type de l’exception, 1. la première clause catch appropriée est exécutée 2. l’exécution se poursuit juste après le bloc try catch – sinon, 1. la méthode retourne immédiatement 2. l’exception remonte vers la méthode appelante. 02.05.2018 La gestion des Exceptions et les assertions

Exécution d’un bloc try sans erreur ou exception Dans les cas où l’exécution des instructions de la clause try ne provoque pas d’erreur/exception, – le déroulement du bloc de la clause try se déroule comme s’il n’y avait pas de bloc try-catch – le programme se poursuit après le bloc try-catch (sauf si exécution de return, break,…) 02.05.2018 La gestion des Exceptions et les assertions

Cas des exceptions non traitées Si une exception remonte jusqu’à la méthode main() sans être traitée par cette méthode, – l’exécution du programme est stoppée – le message associé à l’exception est affiché, avec une description de la pile des méthodes traversées par l’exception (Stack trace) A noter : en fait, seul le thread qui a généré l’exception non traitée se termine; les autres threads continuent leur exécution 02.05.2018 La gestion des Exceptions et les assertions

Exemples de traitements dans un bloc catch Fixer le problème et réessayer le traitement qui a provoqué le passage au bloc catch Faire un traitement alternatif Retourner (return) une valeur particulière Sortir de l’application avec System.exit() Faire un traitement partiel du problème et relancer (throw) la même exception (ou une autre exception) 02.05.2018 La gestion des Exceptions et les assertions

Souplesse dans le traitement des exceptions La méthode dans laquelle l’erreur a eu lieu peut : 1 – traiter l’anomalie • pour reprendre ensuite le déroulement normal du programme, • ou pour faire un traitement spécial, différent du traitement normal 2 – ne rien faire, et laisser le choix du traitement à la méthode appelante qui en sait davantage pour faire un traitement correct du problème 3 – faire un traitement partiel de l’anomalie, et laisser les méthodes appelantes terminer le traitement 02.05.2018 La gestion des Exceptions et les assertions

Erreurs fréquentes liées au traitement des exceptions 1 - Si une variable est déclarée et initialisée dans un bloc try, et utilisée après le bloc try, le compilateur donnera un message d’erreur du type « undefined variable » ou « Variable xx may not have been initialized » Pour éviter cela, déclarer (et initialiser si nécessaire) la variable avant le bloc try 2 - Ne jamais attraper une exception en mettant dans le bloc catch un affichage de message qui ne donne que peu d’informations sur le Problème Au moins pendant le développement, le minimum à afficher : ce qu’affiche la méthode printStackTrace Sinon, on perd des informations précieuses pour la résolution du problème 02.05.2018 La gestion des Exceptions et les assertions

Exception et redifinition Si votre méthode redéfinit une méthode de la super classe alors cette méthode peut soit lever une sous exception de l’exception levée par la méthode définit dans la super classe soit ne rien lever. Exemple : class A { void methode() throws IOException, NumberFormatException, SQLException { } class B extends A { void methode() throws EOFException { } Sinon vous aurez une erreur de type : Exception TypeException is not compatible with throws clause in A.methode() 02.05.2018 La gestion des Exceptions et les assertions

Exception personnalisée L’API java contient plusieurs classes d’exceptions que vous pouvez réutiliser. Néanmoins, parfois vous vous retrouvez dans la nécessité de créer votre propre classe d’exception pour gérer un type d’erreur plus spécifique. Par exemple : vous voulez que l’utilisateur saisi une adresse e-mail. Dans ce cas vous pouvez créer une nouvelle exception pour lever ce type d’erreurs pulic NotEmailException extends Exception { public NotEmailException () {} public NotEmailException (String msg){ super(msg);} } NB : Toutes les exceptions crées par l’utilisateurs doivent étendre Exception et non Error. Si vouv voulez que votre exception soit contrôlée étendez directement Exception sinon étendez RuntimeException 02.05.2018 La gestion des Exceptions et les assertions

Exception Personnalisée 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Les exception sont utilisées pour améliorer la fiabilité de vos application Java. Les assertion aussi jouent un rôle similaire. Définition : Une assertion est une expression qui représente une condition que le programmeur suppose vrai à un emplacement donnée. Syntaxe : L'instruction assert se présente sous deux formes : assert expression1 ; et assert expression1 : expression2 ; expression1 est une expression booléenne, expression2 une expression d'un type quelconque. Dans les deux cas, l'exécution de l'instruction assert commence par évaluer expression1. Si cette expression est vraie, l'exécution continue sans que rien ne se passe. 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions En revanche, si expression1 se révèle fausse alors une erreur de type java.lang.AssertionError est lancée. Si c'est la deuxième forme de assert qui a été utilisée, la valeur d'expression2 figure dans le message associe a l'erreur. Exemple : void Methode1(int x) { assert MIN < x && x < MAX; } void Methode2(int x) { assert MIN < x && x < MAX : "MIN < x && x < MAX, x = " + x; 02.05.2018 La gestion des Exceptions et les assertions

La gestion des Exceptions et les assertions Conclusion 02.05.2018 La gestion des Exceptions et les assertions