6ième Classe (Mercredi, 17 novembre) CSI2572

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Rappels C.
Formation universitaire à .NET: Introduction à C#
Le mécanisme des exceptions
gestion des exceptions
1 La gestion des exceptions C++ Un programme peut rencontrer des conditions exceptionnelles qui risquent de compromettre la poursuite de son exécution.
C.
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?
Traitement des erreurs en Java
Javascript les spécificités du langage - Partie 7 -
Chapitre III Héritage (début)
Principes de programmation (suite)
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Récursivité.
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.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Page de garde C++ Les exceptions Maîtrise dinformatique Février 2002.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Un langage de programmation hybride
Chapitre 9 Les sous-programmes.
Cours 8 (18 novembre 2011) exceptions. héritagePOO-L3 H. Fauconnier2 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X();
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000
Structures de données IFT-10541
Plan cours La notion de pointeur et d’adresse mémoire.
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
La librairie assert.h.
Le langage C Structures de données
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
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.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Notions avancées du C++
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Un survol du language C.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Arbres binaires et tables de hachage
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
ISBN Chapitre 10 L'implémentation des sous- programmes.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
1 COURS DE PROGRAMMATION ORIENTEE OBJET : Exceptions.
1 Cpt JAVA : Eclipse (bis) Debogage. 2 Code à tester public class siecle { int t; public siecle() { super(); t=1; } static public boolean vrai() { return(false);
Structures de données IFT-2000 Abder Alikacem Gestion des exceptions Édition Septembre 2009 Département d’informatique et de génie logiciel Département.
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.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
11ième Classe (Mardi, 18 novembre) CSI2572
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.
Transcription de la présentation:

6ième Classe (Mercredi, 17 novembre) CSI2572

Les exceptions en C++ Fonction C typique long DoSomething() { long *a, c; FILE *b; a = malloc(sizeof(long) * 10); if (a == NULL) return 1; b = fopen("something.bah", "rb"); if (b == NULL) { free(a); return 2; } fread(a, sizeof(long), 10, b); if (a[0] != 0x10) { fclose(b); return 3; c = a[1]; return c; Fonction C typique

Les exceptions en C++ Au cours des exemples précédents, on a souvent rencontré des fonctions qui retournent en principe une valeur, mais qui devraient avoir un comportement particulier en cas d'erreur : class Table{ int *tab; int sz; public: Table(int n){ tab=new int[sz=n]; // que faire si tab==0 ? } int& operator[](int i){ if(i<sz && i>=0) return tab[i]; // sinon ?? } //... };

Les exceptions en C++ Une solution possible serait dans ces deux cas de considérer qu'il s'agit d'une erreur fatale, et donc, de tout arrêter, c'est ce que fait la fonction assert : //... Table(int n){ tab=new int[sz=n]; assert(tab != 0); } int& operator[](int i){ assert(i<sz && i>=0); return tab[i];

Les exceptions en C++ Table(int n){ tab=new int[sz=n]; if(tab==0) throw Alloc(); } //... int& operator[](int i){ if(i<sz && i>=0) return tab[i]; else throw Interval(); En C++, les exceptions permettront le traitement de ces conditions anormales. On définit à certains points du programme des traite-exceptions, et si une condition anormale apparaît, une exception sera levée, et le contrôle du programme sera transféré jusqu'au premier (c'est-à-dire le plus récent) traite-exception rencontré. Le C++, va permettre d'associer à une exception une expression (et donc un type) qui permettra de sélectionner le traite-exception associé.

Les exceptions en C++ Une exception a un type particulier. Quand une exception est lancée, un objet temporaire statique du type de l'exception est créé et initialisé. Le contrôle sera transféré jusqu'au traite-exception, le plus proche, qui peut correspondre à l'expression de l'exception lancée. Le traite-exception le plus proche est celui correspondant au “try-bloc” dans lequel le contrôle est entré le plus récemment. Une fois ce traite-exception atteint, tout se passe comme pour le passage des paramètres. Le contrôle reprendra après son cours normal. Si aucun traite-exception approprié n'existe, après le parcours complet du contrôle du programme, une fonction spéciale terminate sera appelée, qui termine l'exécution.

Les exceptions en C++ L'exception doit alors être traitée par le gestionnaire d'exception correspondant. On ne peut attraper que les exceptions qui sont apparues dans une zone de code limitée (cette zone est dite protégée contre les erreurs d'exécution), pas sur tout un programme. On doit donc placer le code susceptible de lancer une exception d'un bloc d'instructions particulier. Ce bloc est introduit avec le mot clé try : try { // Code susceptible de générer des exceptions... }

Les exceptions en C++ Les gestionnaires d'exceptions doivent suivre le bloc try. Ils sont introduits avec le mot clé catch : catch (classe [&][temp]) { // Traitement de l'exception associée à la classe }

Les exceptions en C++ class Excep_Gen{ public: virtual void avertir(){ cerr<<"exception generale\n"; } //... }; En utilisant les classes, en particulier les constructeurs et l'héritage, on peut structurer les exceptions en utilisant l'héritage et la liaison dynamique. Par exemple, on pourrait avoir :

Les exceptions en C++ class Alloc:public Excep_Gen{ size_t demande; Alloc(int n){ demande=n; }; void avertir(){ Excep_Gen::avertir(); cerr<< "allocation "<<demande<<" refusee "; };

Les exceptions en C++ template <class T> class Table{ // ... comme avant public: Table(int n){ tab=new T[sz=n]; if(tab==0) throw Alloc(n); } int& operator[](int i){ if(i<sz && i>=0) return tab[i]; else throw Interval(); //… }; Qui pourrait ensuite être utilisé comme suis à l'intérieur de la classe:

Les exceptions en C++ void f(){ try{ Table t[1000]; // peut provoquer Alloc //... t[i]=t[j] ; // peut provoquer Interval } catch(Alloc & a){ a.avertir(); // traitement pour une erreur d'allocation catch(Interval){ cerr<<"erreur interval"; En C++, on lancera (throw) un exception par une throw-expression. Une partie de programme sera associée à un traite-exception par un try-bloc, à la fin du try-bloc, un traite-exception (introduit par le mot clé catch) définira le comportement en cas d'exception lancée dans le bloc Un client de la classe peut maintenant utiliser le mechanisme d'exceptions de la manière suivante:

Les exceptions en C++ Dans le cas où aucun traite-exception n'est trouvé, la fonction terminate est appelée . Par défaut, elle provoque la terminaison définitive du programme en appelant la fonction abort(). abort appelle la dernière fonction passée en argument à set_terminate() (déclarée comme fonction ayant comme argument void(*pf)(), et retournant aussi un void(*pf)()). Cette dernière fonction est une fonction dont on ne revient pas ...

Spécification d'exceptions dans les fonctions Les exceptions que peuvent générer les fonctions sont une caractéristique importante de ces fonctions, il est donc utile qu'elles figurent dans l'interface de cette fonction: pour un utilisateur de fonction, afin de pouvoir traiter les comportements ``anormaux'' il faut connaître les exceptions que peuvent lever cette fonction. On peut donc en C++ préciser dans l'entête de la fonction les exceptions qui pourront être levées à partir de cette fonction. Exemple: void f() throw (erreur, char *p, int){ //... }

Spécification d'exceptions dans les fonctions f ne pourra lever que des exceptions des types précisés après le throw, cette déclaration permet de définir correctement l'interface avec d'autres fonctions en tenant compte des exceptions. Si une exception non prévue dans la liste apparaît, la fonction unexpected() sera appelée. S'il n'y a pas de spécification d'exception, toutes les exceptions possibles sont autorisées : void f() throw() //aucune exception { //... }; void g() //toutes exceptions { //...

exception exemple I class erreur{ //... public: erreur(const char *p){ } }; double racine(double d){ if(d<0) throw "arg. negatif"; return(sqrt(d));

exception exemple I void essai(double d){ double r; try{ r=racine(d); // ... } catch(const char *p){ cerr<<p<<endl; throw erreur(p); Dans le cas d'un appel de essai avec un argument négatif, une exception sera levée dans racine, qui sera traitée dans essai, et qui lèvera elle-même une exception de type erreur.