Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions.

Documents pareils
Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Flux de données Lecture/Ecriture Fichiers

Programmer en JAVA. par Tama

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Développement Logiciel

Programmation Objet Java Correction

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Auto-évaluation Programmation en Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

La gestion des exceptions

Un ordonnanceur stupide

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

LOG4430 : Architecture logicielle et conception avancée

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation Par Objets

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Java Licence Professionnelle CISII,

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Remote Method Invocation (RMI)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Support de cours et TD Programmation Orientée Objet

Conventions d écriture et outils de mise au point

F. Barthélemy. 17 mai 2005

INITIATION AU LANGAGE JAVA

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Cours 1: Java et les objets

Remote Method Invocation Les classes implémentant Serializable

Programmation Réseau SSH et TLS (aka SSL)

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Serveur d'archivage 2007 Installation et utilisation de la BD exist

PROGRAMMATION PAR OBJETS

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours 14 Les fichiers

Initiation à la programmation orientée-objet avec le langage Java

Corrigé des exercices sur les références

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Chapitre 2. Classes et objets

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Premiers Pas en Programmation Objet : les Classes et les Objets

Architecture Orientée Service, JSON et API REST

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TD/TP PAC - Programmation n 3

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Plan du cours. Historique du langage Nouveautés de Java 7

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Synchro et Threads Java TM

TD/TP PAC - Programmation n 3

Arbres binaires de recherche

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Environnements de développement (intégrés)

LOG4430 : Architecture logicielle et conception avancée

INF 321 : mémento de la syntaxe de Java

Java DataBaseConnectivity

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Création d une application JEE

Java Licence Professionnelle CISII,

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

Calcul Parallèle. Cours 5 - JAVA RMI

1 Définition d une classe en Java

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Java 1.5 : principales nouveautés

Bases Java - Eclipse / Netbeans

Initiation à JAVA et à la programmation objet.

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Traitement de données

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

Langage Java. Classe de première SI

as Architecture des Systèmes d Information

Exercices INF5171 : série #3 (Automne 2012)

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

RMI le langage Java XII-1 JMF

Programmation par composants (1/3) Programmation par composants (2/3)

Gestion distribuée (par sockets) de banque en Java

Programmation client-serveur sockets - RPC

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Programmation avec des objets : Cours 7. Menu du jour

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Java et les annotations

Une introduction à la technologie EJB (2/3)

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Threads. Threads. USTL routier 1

COMPARAISONDESLANGAGESC, C++, JAVA ET

Dis papa, c est quoi un bus logiciel réparti?

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

1. Langage de programmation Java

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Derrière toi Une machine virtuelle!

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Programmation en Java IUT GEII (MC-II1) 1

Transcription:

Fiabilité d un logiciel Exceptions Université Française d Egypte Version O 5.7 5/10/15 Richard Grin Robustesse : fonctionne correctement, même en présence d événements exceptionnels Correction : donne les résultats corrects lorsqu il fonctionne normalement R. Grin Exceptions 2 Fiabilité en Java Pour avoir une bonne fiabilité : exceptions pour la robustesse assertions pour la correction journalisation (logging) java.util.logging débuggeurs outils de tests d unités (comme JUnit) ou de tests fonctionnels Erreurs/exceptions En Java, une erreur ne provoque pas l arrêt brutal du programme mais la création d un objet Cet objet est une instance d une classe spéciale, une classe d erreur ou d exception R. Grin Exceptions 3 R. Grin Exceptions 4 Localisation du traitement des erreurs/exceptions Le traitement des exceptions s effectue à part dans une zone spéciale (bloc catch) Le traitement «normal» apparaît ainsi plus simple et plus lisible Traitement normal // lire la valeur de n au clavier; int n = lireentierauclavier(); etagere.add(livre, n); R. Grin Exceptions 5 R. Grin Exceptions 6 1

Traitement avec exception // lire la valeur de n au clavier; int n = lireentierauclavier(); etagere.add(livre, n); catch(numberformatexception e) { System.err.println("Mauvais numéro"); catch {EtagerePleineException e) { System.err.println("Etagere pleine"); R. Grin Exceptions 7 Vocabulaire (1) Une instruction, une méthode peut lever ou lancer une exception : une anomalie de fonctionnement provoque la création d une exception R. Grin Exceptions 8 Vocabulaire (2) Une méthode peut attraper, traiter une exception par une clause catch Une méthode peut laisser se propager une exception : elle ne l attrape pas l erreur «remonte» vers la méthode appelante (qui peut la traiter ou la laisser remonter) Mécanisme de traitement des exceptions R. Grin Exceptions 9 R. Grin Exceptions 10 Exception levée en dehors d un bloc try 1. La méthode retourne immédiatement ; l exception remonte vers la méthode appelante 2. L exception peut être attrapée par une des méthodes de la pile d exécution R. Grin Exceptions 11 Exception levée dans un bloc try Quitte le bloc try, si une clause catch correspond à 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 2. l exception remonte vers la méthode appelante R. Grin Exceptions 12 2

Exécution sans exception d un bloc try L exécution du bloc try se déroule comme s il n y avait pas de bloc try-catch Le programme se poursuit après le bloc trycatch 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 Faire un traitement partiel du problème et relancer (throw) la même exception, ou une autre Retourner (return) une valeur particulière R. Grin Exceptions 13 R. Grin Exceptions 14 Laisser remonter une exception Plus une méthode est éloignée de la méthode main dans la pile d exécution, moins elle a une vision globale de l application Une méthode peut laisser remonter une exception si elle ne sait pas comment la traiter, en espérant qu une méthode appelante en saura assez pour la traiter Exception non traitée Si une exception remonte jusqu à la méthode main sans être traitée, le programme est stoppé le message associé à l exception est affiché, avec une description de la pile des méthodes traversées par l exception R. Grin Exceptions 15 R. Grin Exceptions 16 Déclaration incorrecte int n; n = Integer.parseInt(args[0]); etagere.add(livres[n]); catch(numberformatexception e) { System.err.println("Mauvais emplacement " + n); return; catch {EtagerePleineException e) { System.err.println("Etagere pleine"); return; n++; Déclaration correcte int n = 0; n = ParseInt(args[0]); etagere.add(livres[n]); catch(numberformatexception e) { System.err.println("Mauvais emplacement " + n); return; catch {EtagerePleineException e) { System.err.println("Etagere pleine"); return; n++; R. Grin Exceptions 17 R. Grin Exceptions 18 3

Erreur fréquente à éviter A NE PAS FAIRE! Pourquoi? attraper une exception afficher un message du type «Erreur!» dans le bloc catch Le minimum à faire : appeler la méthode printstacktrace Clause finally R. Grin Exceptions 19 R. Grin Exceptions 20 Clause finally Exécutée dans tous les cas, qu une exception ait été levée ou non, que l exception ait été saisie ou non catch ( ) { finally { On peut, par exemple, fermer un fichier R. Grin Exceptions 21 Traitement général des exceptions catch (ClasseException1 e) { catch (ClasseException2 e) { finally { Possible d avoir try - finally sans catch R. Grin Exceptions 22 try avec ressources try avec ressources Facilite la fermeture automatique des ressources : flots, fichiers, connexion à une base de données, R. Grin Fiabilité 23 R. Grin Fiabilité 24 4

Exemple sans try avec ressources InputStream in = null; Copie le contenu OutputStream out = null; f1 dans f2 in = new FileInputStream("f1"); out = new FileOutputStream("f2"); byte[] buffer = new byte[8192]; int n; while ((n = in.read(buffer)) >= 0) out.write(buffer, 0, n); finally { if (in!= null) in.close(); if (out!= null) out.close(); R. Grin Fiabilité 25 Exemple avec try avec ressources try( InputStream in = new FileInputStream(f1); OutputStream out = new FileOutputStream(f2)){ byte[] buffer = new byte[8192]; int n; while ((n = in.read(buffer)) >= 0) { out.write(buffer, 0, n); R. Grin Fiabilité 26 Avantages Les ressources sont fermées à la sortie du bloc try, quoi qu il arrive Le code est plus lisible (surtout si plusieurs ressources doivent être fermées) Portée des variables Les variables déclarées dans les parenthèses d un try avec ressources sont utilisables dans le try mais pas dans les catch et finally R. Grin Fiabilité 27 R. Grin Exceptions 28 Interface java.lang.autocloseable Les classes qui peuvent être gérées par un try avec ressources doivent implémenter cette interface C est le cas de FileInputStream et de FileOutputStream Les différents types d erreurs / exceptions R. Grin Fiabilité 29 R. Grin Exceptions 30 5

Les classes d erreurs/exceptions Héritent de la classe java.lang.throwable Il y en a beaucoup dans le JDK Le programmeur peut en ajouter des nouvelles Arbre d héritage des exceptions Throwable Error Exception Exceptions contrôlées R. Grin Exceptions 31 R. Grin Exceptions 32 Arbre d héritage des exceptions Arbre d héritage des exceptions Error Throwable Exception Erreurs graves liées à la JVM Error Throwable Exception Exceptions non contrôlées par le compilateur Exceptions contrôlées Exceptions contrôlées R. Grin Exceptions 33 R. Grin Exceptions 34 Arbre d héritage des exceptions Error Throwable Exception Exceptions contrôlées Exceptions contrôlées par le compilateur R. Grin Exceptions 35 Sous-classes de Error Throwable Exception Exceptions contrôlées NullPointerException ArrayIndexOutOfBoundsException ArithmeticException IllegalArgumentException NumberFormatException ClassCastException R. Grin Exceptions 36 6

Quelques exceptions du JDK, contrôlées par le compilateur (pas contrôlées) EOFException Exception IOException ClassNotFound Exception FileNotFoundException Exception «contrôlée» (1) Exception qui hérite de la classe Exception mais pas de Le compilateur vérifie que les méthodes utilisent correctement cette exception : toute méthode qui peut lancer une exception contrôlée, doit le déclarer dans sa déclaration int m() throws TrucException { R. Grin Exceptions 37 R. Grin Exceptions 38 Exceptions «contrôlées» (2) m2 une méthode avec une en-tête throws TrucException Si une méthode m1 fait un appel à m2 soit m1 entoure l appel de m2 avec un bloc try catch(trucexception) soit m1 déclare throws TrucException Pourquoi des exceptions contrôlées? Pour obliger le développeur à tenir compte des cas d exception En langage C, si une méthode renvoie -1 pour un cas d exception, il est facile d oublier ce cas et de traiter -1 comme les autres valeurs R. Grin Exceptions 39 R. Grin Exceptions 40 Pourquoi des exceptions non contrôlées? Les exceptions non contrôlées peuvent survenir n importe où, NullPointerException par exemple Si ces exceptions étaient contrôlées, toutes les méthodes auraient une clause throws ou seraient truffées de blocs try-catch Exceptions et en-têtes de méthodes Une méthode peut déclarer pouvoir renvoyer plusieurs types d exception : public Object readobject() throws IOException, ClassNotFoundException R. Grin Exceptions 41 R. Grin Exceptions 42 7

Regrouper des traitements d erreurs On peut regrouper les traitements des erreurs liées aux sous-classes d une classe d exception catch(ioexception e) { indique un traitement pour toutes les exceptions liées aux entrées-sorties (EOFException, FileNotFoundException, ) Exception ou traitement normal? Réserver les exceptions aux erreurs ou aux cas exceptionnels Éviter de les utiliser pour traiter un cas normal R. Grin Exceptions 43 R. Grin Exceptions 44 Exemple Si un fichier est lu du début à la fin, ne pas utiliser EOFException pour repérer la fin du fichier Utiliser plutôt la valeur de retour spéciale de la méthode de lecture quand elle rencontre la fin du fichier Mais si la fin du fichier est rencontrée avant d avoir lu les 10 valeurs dont on a besoin, utiliser EOFException R. Grin Exceptions 45 Constructeurs des exceptions Par convention, toutes les exceptions doivent avoir au moins 2 constructeurs : un sans paramètre un autre dont le paramètre est un message qui décrit le problème R. Grin Exceptions 46 Méthodes de la classe Throwable getmessage() retourne le message d erreur associé à l instance de Throwable printstacktrace() affiche sur la sortie standard des erreurs (System.err), le message d erreur et la pile des appels de méthodes qui ont conduit au problème Lancer une exception avec throw R. Grin Exceptions 47 R. Grin Exceptions 48 8

Lancer une exception Le programmeur peut lancer lui-même des exceptions du JDK ou de classes qu il a écrites Lancer une exception du JDK public class Employe { public void setsalaire(double salaire) { if (salaire < 0) throw new IllegalArgumentException( "Salaire négatif!"); this.salaire = salaire; Création d une instance R. Grin Exceptions 49 R. Grin Exceptions 50 Chaînage de Throwable Une exception a souvent un constructeur qui prend un Throwable en paramètre Ainsi, une API peut transformer une exception de bas niveau en exception de plus haut niveau, tout en gardant la cause première de l exception (obtenue par getcause()) R. Grin Exceptions 51 Exemple d une API sur les factures FactureException(String message, Throwable cause) { super(message, cause); Appel du constructeur de Exception Où se trouve ce code? catch(ioexception ex) { throw new FactureException( "Facture de " + client + " pas trouvée", ex); R. Grin Exceptions 52 Créer une classe d exception Créer une nouvelle classe d exception Le programmeur peut créer des classes d exception adaptées aux classes de l application Par convention, le nom d une classe d exception se termine par «Exception» R. Grin Exceptions 53 R. Grin Exceptions 54 9

Exemple public class EtagerePleineException extends Exception { private Etagere etagere; Référence à l étagère pleine public EtagerePleineException(Etagere etg) { super("etagère pleine; " + etg.getnbmax()); this.etagere = etg; public Etagere getetagere() { return etagere; R. Grin Exceptions 55 Utiliser la nouvelle classe d exception public class Etagere { public void ajoutelivre(livre livre) throws EtagerePleineException { if (nblivres >= livres.length) throw new EtagerePleineException(this); livres[nblivres++] = livre; R. Grin Exceptions 56 Autre façon d écrire ajoutelivre public void ajoutelivre(livre livre) throws EtagerePleineException { livres[nblivres] = livre; nblivres++; catch(arrayindexoutofboundsexception e) { throw new EtagerePleineException(this,e); passe l exception Quelle est la meilleure solution? de bas niveau R. Grin Exceptions 57 Attraper la nouvelle exception // étagère de 10 livres Etagere etagere = new Etagere(10);... etagere.ajoutelivre(new Livre("Java", "Eckel")); catch(etagerepleineexception e) { // Traitement de l exception (par exemple mettre // le livre dans une autre étagère)... R. Grin Exceptions 58 Exceptions et redéfinition Compléments sur les exceptions Méthode m de B qui redéfinit une méthode de la classe mère A m ne peut pas déclarer lancer (throws) plus d exceptions que m de A ; elle peut lancer les mêmes exceptions des sous-classes de ces exceptions moins d exceptions aucune exception R. Grin Exceptions 59 R. Grin Exceptions 60 10

Exceptions et constructeurs Aucune instance n est créée si une exception est levée par un constructeur Choix des exceptions à lancer R. Grin Exceptions 61 R. Grin Exceptions 62 Error Réservé aux erreurs qui surviennent dans le fonctionnement de la JVM Par exemple OutOfMemoryError Ne devrait jamais arriver Éviter de lancer une Error Bon choix si le problème ne peut être résolu par une des méthodes appelantes Inutile alors d alourdir le code de ces méthodes avec des catch ou des throws Dû à une erreur indépendante du code qui l a lancée (passage d un mauvais paramètre, ) R. Grin Exceptions 63 R. Grin Exceptions 64 Traitement des exceptions non contrôlées Laisser remonter l exception jusqu au début de l action lancée par l utilisateur La classe qui attrape l exception l enregistre comme événement inattendu (logging) stoppe proprement l action qui a provoqué le problème (remet les choses en place) prévient l utilisateur s il le faut R. Grin Exceptions 65 Exception contrôlée Pour les cas peu fréquents, mais pas inattendus Correspond à des scénarios envisagés par le développeur Pour les problèmes qui peuvent être résolus (au moins partiellement) par une des méthodes de la pile d exécution Par exemple, si une étagère est pleine, le code qui a voulu ajouter un livre pourra choisir une autre étagère R. Grin Exceptions 66 11

Exceptions du JDK ou nouveau type d exception? Si une exception du JDK convient (bon niveau d abstraction en particulier), il vaut mieux l utiliser car ces exceptions sont bien connues des développeurs Message d erreur R. Grin Exceptions 67 R. Grin Exceptions 68 Savoir lire un message d erreur Les messages d erreurs affichés par la JVM correspondent à la sortie de la méthode printstacktrace Lire attentivement et comprendre ces messages fait gagner beaucoup de temps pour corriger du code Savoir lire un message d erreur Commence par le message d erreur associé à l erreur Ensuite la pile des méthodes traversée depuis la méthode main pour arriver à l erreur La méthode main en dernier R. Grin Exceptions 69 R. Grin Exceptions 70 12