BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ

Slides:



Advertisements
Présentations similaires
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.
Advertisements

Spécialisation/généralisation Héritage Polymorphisme
Le mécanisme des exceptions
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
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.
Arbres Un premier exemple Contenu Rendu Ecouteurs Parcours
(Classes prédéfinies – API Java)
L’ interruption de boucle
Plan du cours 5:Threads introduction Définition Création des Threads
Algorithme et structure de données
Les entrées /sorties en Java François Bonneville
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Chapitre IV Object, interfaces, classes imbriquées.
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
Principes de programmation (suite)
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
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.
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Langage Oriente Objet Cours 4.
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.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Premier cours (23 septembre). Cours programmation- orientée objet en Java Licence dinformatique Hugues Fauconnier
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Le patron de conception « Strategy » Simon Durocher ( )
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Introduction à la programmation objet Langage Java
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.
Présentation Structures de Données et TDA
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Exceptions IFT1025: Programmation 2 Jian-Yun Nie.
Piles Premier arrivé, dernier servi: LIFO (Last In, First Out) Liste à usage restreint: Enlève et insère un élément seulement à un bout de la liste. Notation:
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Cours du 22 novembre généricité. Chapitre VII Généricité.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Cours 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
Java, les objets : tout de suite ! Rassembler, grouper les objets
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.
Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr
Structures de données IFT-10541
Une introduction à Java
27/02/2006L3 MIAGE - GLO ADA1 Les Paquetages Permettent d’encapsuler un groupe d’entités logiquement reliées. Comme toute unité de programme, le paquetage.
Notion de fonction A partir d’un exemple Types de fonctions
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
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.
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Tutorat en bio-informatique
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Puzzler.
Transcription de la présentation:

BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ Cnam Paris jean-michel Douin, Version de Juin 2003 Ce support accompagne, référence le livre de David J. Barnes & Michael Kölling Objects First with Java A Practical Introduction using BlueJ Pearson Education, 2003 ISBN

BlueJ_XI 2 Sommaire Programmation défensive ou comment développer un programme tolérant aux fautes toute erreur devrait être prise en compte, Quelle décision prendre ? Pas de changement détat et retour à létat antérieur Signaler cette erreur à lappelant Vocable Erreur ou Exception Erreur signalée ou Exception levée... Exception filtrée …

BlueJ_XI 3 Un exemple : une file d Object de taille fixe Un classique : premier entré, premier sorti f.enfiler(new Integer(5)); f.enfiler(new Integer(6)); Integer x = f.défiler(); assert x.intValue() == 6; Integer y = f.défiler(); assert y.intValue() == 5; enfiler défiler f

BlueJ_XI 4 Les services proposés

BlueJ_XI 5 Le constructeur ListeTailleFixe Cas derreur possibles sur la capacité demandée par lutilisateur capacité < 0 capacité == 0 ? (est-ce une erreur ?) capacité >= MAX, mais quelle valeur pour MAX ?

BlueJ_XI 6 Les méthodes ajouter et lire public void enfiler(Object elt) cas derreurs la file est pleine public Object dépiler() cas derreurs la file est vide

BlueJ_XI 7 Choix dimplémentation ajouter et lire Hypothèse sur les éléments : ils sont différents de null enfiler(null) n est pas possible public void enfiler(Object elt) cas derreurs si la file est pleine aucun effet si elt est null aucun effet public Object dépiler() cas derreurs si la file est vide la valeur null est retournée

BlueJ_XI 8 Choix de représentation File de taille fixe : un tableau géré de façon circulaire entrée sortie zone

BlueJ_XI 9 Une première implémentation de la file public class FileTailleFixe{ public static final int TAILLE_MINIMALE = 2; private Object[] zone; private int entrée,sortie; private int taille; public FileTailleFixe(){ this(TAILLE_MINIMALE); } public FileTailleFixe(int capacité){ zone = new Object[ Math.max(capacité,TAILLE_MINIMALE)]; entrée = sortie = taille = 0; } Capacité de la file toujours > 0 ! Pas assez de mémoire : le programme s arrête

BlueJ_XI 10 Une première implémentation de la file(fin) public void enfiler(Object elt){ if (!estPleine() && elt != null){ zone[entrée] = elt; entrée = (entrée+1) % zone.length; taille++; } public Object défiler(){ if( !estVide()){ Object elt = zone[sortie]; sortie = (sortie +1) % zone.length; taille--; return elt; }else{ return null; } public boolean estPleine(){ return taille == zone.length; } public boolean estVide(){ return taille == 0; }

BlueJ_XI 11 exemple possible de code pour l appelant public static void main(String[] args){ int taille = Integer.parseInt(args[0]); FileTailleFixe f = new FileTailleFixe(taille); if(!f.estPleine()) f.enfiler(new Integer(3)); if(!f.estPleine()) f.enfiler(new Integer(4)); if(!f.estPleine()) f.enfiler(new Integer(5)); Integer elt = (Integer)f.défiler(); if(elt != null) System.out.println(" elt : " + elt); if(!f.estVide()){ Integer elt2 = (Integer)f.défiler(); if(elt2 != null) System.out.println(" elt2 : " + elt2); } Toutes les erreurs sont-elles traitées ? non : si args[0] ne contient pas un nombre et args.length == 0?

BlueJ_XI 12 Constatations Le code pour l utilisateur est fastidieux les tests seront vite délaissés, oubliés... public static void main(String[] args){ int taille = Integer.parseInt(args[0]); // <-- erreurs possibles ici FileTailleFixe f = new FileTailleFixe(taille); f.enfiler(new Integer(3)); f.enfiler(new Integer(4)); f.enfiler(new Integer(5)); // <-- ici la file peut être pleine System.out.println(" elt : " + f.défiler().toString()); System.out.println(" elt : " + f.défiler().toString()); //<-- ici // une erreur se produit // si la file est vide

BlueJ_XI 13 Erreur ou Exception Nécessité de traiter les cas anormaux > Division par zéro, débordement de tableaux, etc... Nécessité d un mécanisme de déclenchement d une erreur (les exceptions) Se concentrer sur lessentiel Alléger le source du programme (afin d éviter les tests fastidieux) Transférer la responsabilité du traitement de lerreur à lappelant

BlueJ_XI 14 Levées dexceptions : 3 exemples Division par zéro class java.lang.ArithmeticException Débordement de tableau class java.lang.ArrayIndexOutOfBoundsException Mauvais format de nombre class java.lang.NumberFormatException … Et aussi file vide, file pleine …

BlueJ_XI 15 Exception : une division par zéro >java -cp. ExceptionStandard 6 2 Exception in thread "main" java.lang.ArithmeticException at ExceptionStandard.main(ExceptionStandard.java:8)

BlueJ_XI 16 try/catch : présentation Condition anormale d'exécution d'un programme try { instructions; } catch( ExceptionType1 e){ traitement de ce cas anormal (de type ExceptionType1); }

BlueJ_XI 17 Lexception est filtrée si y == 0

BlueJ_XI 18 Exception : un débordement de tableau si args.length == 1

BlueJ_XI 19 try/catch : présentation try { instructions; } catch( ExceptionType1 e){ traitement de ce cas anormal de type ExceptionType1; } catch( ExceptionType2 e){ traitement de ce cas anormal de type ExceptionType2; }

BlueJ_XI 20 Exception : un mauvais format de nombre

BlueJ_XI 21 try/catch/finally : présentation try { instructions; } catch( ExceptionType1 e){ traitement de ce cas anormal de type ExceptionType1; } catch( ExceptionType2 e){ traitement de ce cas anormal de type ExceptionType2; } finally ( traitement de fin de bloc try ; }

BlueJ_XI 22 finally{ } : dès lentrée dans le bloc try/catch

BlueJ_XI 23 try/catch/throw : présentation try { instructions; } catch( ExceptionType1 e){ traitement de ce cas anormal de type ExceptionType1; } catch( ExceptionType2 e){ traitement de ce cas anormal de type ExceptionType2; throw e; // l'exception est propagée //vers le bloc try/catch) englobant } finally ( traitement de fin de bloc try ; }

BlueJ_XI 24 Propagation d une exception >java -cp. ExceptionStandard 0 0A mauvais format du nombre 0A exceptionnel finalement Exception in thread "main" java.lang.NumberFormatException: 0A at java.lang.Integer.parseInt(Integer.java:435) at java.lang.Integer.parseInt(Integer.java:476) at ExceptionStandard.main(ExceptionStandard.java:7)

BlueJ_XI 25 Le try/catch de la machine installé par défaut try{ }catch(Thowable t){ System.err.println(t.printStackTrace()); }

BlueJ_XI 26 Graphe dhéritage (un extrait)

BlueJ_XI 27 La classe Throwable

BlueJ_XI 28 Error,Exception héritent de Throwable RuntimeException

BlueJ_XI 29 Les exceptions « RuntimeException » try/catch nest pas obligatoire (Heureusement !) pour toutes les classes dérivées ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException De toute façon Toutes les exceptions sont prises en compte par le try/catch englobant de la machine

BlueJ_XI 30 Créer une exception Traitement des cas anormaux La file est pleine et lutilisateur tente denfiler La file est vide et lutilisateur tente de défiler Ces exceptions sont des classes dérivées de la classe Exception Des contraintes légitimes seront imposées à lutilisateur

BlueJ_XI 31 Nouvelles Exceptions public class FilePleineException extends Exception{ } public class FileVideException extends Exception{ }

BlueJ_XI 32 Le graphe

BlueJ_XI 33 Levée d une exception, throw et throws Méthode enfiler(Object elt) if (estPleine()) throw new FilePleineException(); // throw zone[entrée] = elt; entrée = (entrée+1) % zone.length; taille++; } public void enfiler(Object elt) throws FilePleineException{ // throws if (estPleine()) throw new FilePleineException(); zone[entrée] = elt; entrée = (entrée+1) % zone.length; taille++; }

BlueJ_XI 34 La clause throws Précise les exceptions susceptibles dêtre levées (ou propagées) par cette méthode Lappelant doit préciser ce quil veut faire de cette exception try/catch et/ou ajout à la clause throws, dans ce cas cest à lappelant de lappelant de préciser ce quil …

BlueJ_XI 35 Pour lutilisateur Il en manque : args[0], args.length

BlueJ_XI 36 Pour l utilisateur (2) Toutes les instances des classes dérivées de RuntimeException

BlueJ_XI 37 Pour l utilisateur(3) Toutes les instances des classes dérivées de Exception

BlueJ_XI 38 Pour l utilisateur JASS Une autre démarche 1) Établir les pré, post assertions, invariant de classe 2) développer le code L analyse par JASS apporte Deux versions de sources, le source initial (aux commentaires pertinents) et un source instrumenté dans un style plutôt défensif

BlueJ_XI 39 Pour l utilisateur ESC/Java Allez en La file est au transparent 97, annexe1 Une discussion simpose...

BlueJ_XI 40 NB : Les assertions du jdk1.4 >java -cp. -ea AssertionsCatch java.lang.AssertionError at AssertionsCatch. (AssertionsCatch.java:6) at AssertionsCatch.main(AssertionsCatch.java:12)

BlueJ_XI 41 Mais, encore une source derreurs ! f.enfiler(new Integer(4)); f.enfiler(new Boolean(true)); Integer i = (Integer)f.défiler(); Une solution consiste en la manipulation de file homogènes Généricité ou polymorphisme paramètrique Vérification statique effectuée par le compilateur Généricité présente dans le jdk1.5 Voir jsr14 adding generics

BlueJ_XI 42 Résumé, synthèse