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.

Slides:



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

Les fonctions A quoi ça sert ?
Formation universitaire à .NET: Introduction à C#
C++ 6ème cours Patrick Reuter maître de conférences
Le mécanisme des exceptions
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.
C.
Programmer en JAVA par Tama
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Javascript les spécificités du langage - Partie 7 -
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Récursivité.
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.
Algorithmique et Programmation
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.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
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.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT-2000: Structures de données Plan de cours Théorie du contrat Types abstraits Dominic Genest, 2009.
IFT-2000: Structures de données
Page de garde C++ Les exceptions Maîtrise dinformatique Février 2002.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Conteneurs STL.
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.
Chapitre XI Gestion des erreurs et exceptions. 2 La gestion des erreurs et exceptions De nombreux problèmes peuvent survenir pendant lexécution dun programme:
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();
COURS DE PROGRAMMATION ORIENTEE OBJET :
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
Héritage et composition
(Vient du grec et signifie « Peut prendre plusieurs formes »)
2.1 - Historique Chapitre 2 : Introduction au langage C++
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
La notion de type revisitée en POO
GESTION ET TRAITEMENT DES ERREURS
Notions avancées du C++
Communication avec l’environnement
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
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.
Les classes Introduction aux Langages Orientés Objets
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.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
6ième Classe (Mercredi, 17 novembre) CSI2572
Chapitre VII Techniques plus avancées à travers le concept de classe.
Héritage Conception par Objet et programmation Java
Langage de programmation
PRO-1027 Programmation Scientifique en C
Langage de Programmation Orientée Objet : C++
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.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
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:

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

Gestion des erreurs en C : code de retour des fonctions typedef enum { NO_ERROR = 0, BAD_ALLOC, INDEX_OUT_OF_BOUNDS, FILE_NOT_FOUND, UNKNOWN_ERROR } t_error;

Gestion des erreurs t_error f(long *t, long util, long index) { t_error errno = NO_ERROR; if (index >=util) || (index<0) { errno = INDEX_OUT_OF_BOUNDS; } else { t[index] = 0; } return errno; } // appel par : f(tab, util, position);

Exceptions Structure de gestion des erreurs hors du code de la fonction en cause écrire ce qui devrait se passer intercepter les erreurs

Exceptions structure de traitement try { //code à tester } catch (…) traitement des erreurs

Exceptions fonction "lançant" des exceptions : détection d'une erreur : instruction throw signalant une exception (comportement anormal…) qui interrompt le déroulement de la fonction.

Exceptions throw : suivi d'un objet ou d'une variable (type de base) on peut thrower n'importe quoi ! int nawak=2; throw nawak; // ok

Exceptions classe des exceptions : std::exception méthode virtuelle what() retournant une chaîne de caractères virtual const char * what ();

Exceptions définir ses propres classes par héritage class myException : public std::exception { // redéfinir la méthode what(); }; exemple : myExceptionClass.dev

Exceptions définir ses propres classes par héritage class myException : public std::exception { // redéfinir la méthode what(); }; exemple : myExceptionClass.dev

Exceptions spécificateur throw. throw : liste des exceptions pouvant être lancées repérées par le compilateur donc : à respecter !

Exceptions 3 possibilités : void f(); peut tout lancer void f() throw(); ne lance aucune exception void f() throw(liste de types/classes); ne lance que les exceptions listées que la fonction soit membre d'une classe ou non.

importance du catch exception non attrapée : appel à la fonction : terminate() mr main() ? fin du programme brutale : pas de destructeurs

importance du catch donc toute fonction lançant une exception : dans un bloc try…catch catch : spécifier le type d'exception plusieurs blocs catch possibles

blocs catch() syntaxe : catch(classe objet) // définition { traitement de l'objet; } le plus souvent : message affiché

blocs catch() le bloc 'attrape-tout' : catch(…) mais pas d'objet, donc aucune information (une exception est apparue…)

blocs catch() dès qu'une correspondance entre classe attendue et classe lancée apparaît : traitement différent du switch/case : pas de break; un seul bloc catch traité. Attention à l'héritage !

Ordre des blocs catch() class probleme {}; class petit: public probleme {}; class gros : public probleme {}; void f(int a) { if (a==0) { throw gros(); } else { cout << a << endl; }

Ordre des blocs catch() int main(int argc, char *argv[]) { try { f(0); } catch(probleme) { cout << "il y a un probleme" << endl; } catch(petit) { cout << "il y a un petit probleme" << endl; } catch(gros) { cout << "il y a un gros probleme" << endl; } return 0; }

Exception dans les constructeurs Valide car pas de valeur de retour : pas de code d'erreur erreur de construction  pas de destruction. restitution de ressources ? au bloc catch associé !

Exception dans les constructeurs class X { private : long *valeurs; long nb; X(int count=1):nb(count) { valeurs=new long[count]; throw 2; // pour l'exemple } ~X() { if (valeurs) { delete[] valeurs; } };

Exception dans les constructeurs class X { private : long *valeurs; long nb; X(int count=1):nb(count) try { valeurs=new long[count]; throw 2; // pour l'exemple } catch(int i) { delete[] valeurs; }

Espaces de nommage Pour éviter les ambiguïtés lors du nommage de classes, de fonctions. définition de namespace utilisation d'un namespace

Espaces de nommages définir un namespace : attribuer un nom plus complet à une classe, variable, fonction syntaxe : namespace nom { déclarations & définitions; } découpable en plusieurs morceaux

Espaces de nommages utiliser un namespace : donner le nom complet de ce à quoi on veut accéder : résolution de portée :: nom_du_namespace::nom_à_accéder ou using namespace nom_du_namespace;

Espaces de nommages déclarer et définir / séparation.h/.cpp dans le fichier.h namespace mon_espace { class T { T(); ~T(); long foo(); }; }

Espaces de nommages dans le fichier cpp mon_espace::T::T() {} mon_espace::T::~T() {} long mon_espace::T::foo() { return 0; }

Restez simple, car… Si, dans un espace de nommage, un identificateur est déclaré avec le même nom qu'un autre identificateur déclaré dans un espace de nommage plus global, l'identificateur global est masqué. De plus, l'identificateur ainsi défini ne peut être accédé en dehors de son espace de nommage que par un nom complètement qualifié à l'aide de l'opérateur de résolution de portée. Toutefois, si l'espace de nommage dans lequel il est défini est un espace de nommage anonyme, cet identificateur ne pourra pas être référencé, puisqu'on ne peut pas préciser le nom des espaces de nommage anonymes.