11ième Classe (Mardi, 18 novembre) CSI2572

Slides:



Advertisements
Présentations similaires
GESTION ET TRAITEMENT DES ERREURS
Advertisements

6ième Classe (Mercredi, 17 novembre) CSI2572
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.
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.
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,
CINI – Li115 1 Semaine 6 Les fonctions ● Pourquoi écrire des fonctions ? ● Définition de fonctions ● Fonction main ● Appels de fonctions ● Portée des variables.
CINI – Li115 1 Semaine 10 Les pointeurs ● Notion d'adresse ● Déclaration et utilisation de pointeurs ● "Types pointeur" et initialisation des pointeurs.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
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.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.
Semaine 8 Retour sur les tableaux : fonctions et récursivité
Module de gestion des tournées de livraison
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Modèle objet : les classes
Pas de variable globale
Les notions de classe et d'objet
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Pointeurs et langage C.
Détection des erreurs.
Qu'est-ce que POSIX? Une librairie en langage C
Semaine #1 INF130 par Frédérick Henri.
Chapitre 6 La gestion des Exceptions et les assertions
Javadoc et débogueur Semaine 03 Version A17.
Collecte de données CAPI
I21 Algorithmique et programmation II
Principes de programmation (suite)
Algorithmique Langage C
Master Réseaux et Systèmes Distribués (RSD)
Semaine 11 Les pointeurs (suite)
Les fonctions.
Matrices, déclaration en CSharp
Programmation en C++ Fonctions
Gestion dynamique de la mémoire : new / delete
Routage S 7 - Questionnaire N°1
Javadoc et débogueur Semaine 03 Version A16.
Tableaux à plusieurs dimensions en langage C
La factorisation Formule
5ième Classe (Mardi, 6 octobre) CSI2572
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.
Détection et correction des erreurs
Bonnes pratiques Orienté Objet et Java
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
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.
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Programmation en C++ Fonctions
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Calculs des incertitudes Lundi 30 Avril 2018 Master de Management de la Qualité, de la Sécurité et de l’Environnement.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
STS Web Services libres Créer un service libre
STS Web Services libres Constituer les services libres
Les classes et les objets
SYSTèMES à évènements discrets
Semaine #3 INF130 par Frédérick Henri.
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.
Définition :. Pourquoi le GEMMA ? GEMMA : l'acronyme GEMMA signifie : Guide d'Etude des Modes de Marche et d'Arrêt. Comme son nom l'indique, c'est un guide.
Principes de programmation (suite)
QCM Pointeurs 2 / Q1 On considère la déclaration suivante : char *ptc ; ptc peut contenir : 1) des valeurs de variables de type caractère 2) des adresses.
Présentation Chaînage dynamique Retour sur les tableaux
STREAMS (et fichiers).
Boulain Joris, Handouz Yassine, Regnier Fabien, Giraud Antoine
Conception d’un QCM F. Loizeau ; Clermont-Ferrand.
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.
Transcription de la présentation:

11ième Classe (Mardi, 18 novembre) CSI2572

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 : template <class T> Table{ T *tab; int sz; public: Table(int n){ tab=new T[sz=n]; // que faire si tab==0 ? } T& 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 T[sz=n]; assert(tab != 0); } T& operator[](int i){ assert(i<sz && i>=0); return tab[i];

Les exceptions en C++ Table(int n){ tab=new T[sz=n]; if(tab==0) throw Alloc(); } //... T& 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, 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); } T& 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<int> 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.