46

Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Embed Size (px)

Citation preview

Page 1: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 2: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Par:Par:

Manaf hamzaManaf hamza

Bassir saidBassir said

Bouchkri abd Bouchkri abd ellahellah

Prof:Prof:

Rahmouni ossamaRahmouni ossama

Page 3: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Introduction Introduction

Définition des exceptionsDéfinition des exceptions

Les mots clés try, catch et finally Les mots clés try, catch et finally

Quelques exceptions prédéfinies en Quelques exceptions prédéfinies en JavaJava

Arbre des exceptionsArbre des exceptions

Astuce d'EclipseAstuce d'Eclipse

Des exercicesDes exercices

Page 4: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

1_Introduction1_Introduction

• Tout programme comporte des Tout programme comporte des erreurs, même si celui-ci semble erreurs, même si celui-ci semble fonctionner à merveille. Chaque fonctionner à merveille. Chaque programmeur essaye de réduire programmeur essaye de réduire au minimum le nombre d'erreurs, au minimum le nombre d'erreurs, mais toutes les erreurs ne mais toutes les erreurs ne peuvent pas forcément être peuvent pas forcément être prévues. prévues.

Page 5: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

• Les erreurs syntaxiques sont la Les erreurs syntaxiques sont la plupart interceptées lors de la plupart interceptées lors de la compilation, mais il reste souvent compilation, mais il reste souvent des erreurs "imprévisibles". des erreurs "imprévisibles". Ces erreurs se produisent Ces erreurs se produisent généralement de façon généralement de façon exceptionnelle, c'est-à-dire suite à exceptionnelle, c'est-à-dire suite à une action de l'utilisateur, ou de une action de l'utilisateur, ou de l'environnement l'environnement

Page 6: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

2_Définition des 2_Définition des exceptionsexceptions• Les exceptions représentent le Les exceptions représentent le

mécanisme de gestion des erreurs mécanisme de gestion des erreurs intégré au langage Java. Il se intégré au langage Java. Il se compose d'objets représentant les compose d'objets représentant les erreurs et d'un ensemble de trois erreurs et d'un ensemble de trois mots clés qui permettent de mots clés qui permettent de détecter et de traiter ces erreurs détecter et de traiter ces erreurs ( try, catch et finally ) et de les lever ( try, catch et finally ) et de les lever ou les propager (throw et throws).ou les propager (throw et throws).

Page 7: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

• Lors de la détection d'une erreur, un Lors de la détection d'une erreur, un objet qui hérite de la classe objet qui hérite de la classe Exception est créé (on dit qu'une Exception est créé (on dit qu'une exception est levée) et propagé à exception est levée) et propagé à travers la pile d'exécution jusqu'à ce travers la pile d'exécution jusqu'à ce qu'il soit traité.qu'il soit traité.

• Ces mécanismes permettent de Ces mécanismes permettent de renforcer la sécurité du code Java.renforcer la sécurité du code Java.

Page 8: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Exemple :Exemple :

publicpublic classclass Test Exception { Test Exception {

publicpublic staticstatic voidvoid main(java.lang.String[] args) { main(java.lang.String[] args) {

int int j = 20, i = 0;j = 20, i = 0;

System.out.println(j/i); System.out.println(j/i); System.out.println("coucou toi !"); System.out.println("coucou toi !");

}}}}

Page 9: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Résultat:Résultat:

Vous devriez avoir un message Vous devriez avoir un message d'erreur Java (en rouge) comme d'erreur Java (en rouge) comme celui-ci :celui-ci :

Page 10: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

3 Les mots clés try, 3 Les mots clés try, catch et finallycatch et finallyLe bloc Le bloc trytry est exécuté jusqu'à ce qu'il se termine avec est exécuté jusqu'à ce qu'il se termine avec

succès ou bien qu'une exception soit levée. succès ou bien qu'une exception soit levée.

Dans ce dernier cas, les clauses Dans ce dernier cas, les clauses catchcatch sont examinées sont examinées l'une après l'autre dans le but d'en trouver une qui l'une après l'autre dans le but d'en trouver une qui traite cette classe d'exceptions (ou une superclasse).traite cette classe d'exceptions (ou une superclasse).

Les clauses Les clauses catchcatch doivent donc traiter les exceptions doivent donc traiter les exceptions de la plus spécifique à la plus générale.de la plus spécifique à la plus générale.

Si une clause Si une clause catchcatch convenant à cette exception a été convenant à cette exception a été trouvée et le bloc exécuté, l'exécution du trouvée et le bloc exécuté, l'exécution du programme reprend son cours.programme reprend son cours.

Page 11: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Bloc Bloc finallyfinally

Un bloc Un bloc finallyfinally permet au programmeur de permet au programmeur de

définir un ensemble d'instructions qui définir un ensemble d'instructions qui

est toujours exécuté, que l'exception est toujours exécuté, que l'exception

soit levée ou non, capturée ou non.soit levée ou non, capturée ou non.

La seule instruction qui peut faire qu'un La seule instruction qui peut faire qu'un

bloc bloc finallyfinally ne soit pas exécuté est ne soit pas exécuté est

System.exit().System.exit().

Page 12: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

try / catch / finallytry / catch / finallytry { ... }catch (<une-exception>) { ... }catch (<une_autre_exception>) { ... }

...

finally { ... }

Autant de blocs catch que l'on veut. Bloc finally facultatif.

Page 13: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Ce que je vous propose Ce que je vous propose maintenant, c'est de capturer maintenant, c'est de capturer l'exception de division par zéro, l'exception de division par zéro, et d'afficher un message et d'afficher un message personnalisé. Pour ce faire, tapez personnalisé. Pour ce faire, tapez le code suivant dans votre main :le code suivant dans votre main :

Page 14: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

public class public class TestTest { public staticpublic static void main void main(String[] args)

{ intint j = 20 20, i = 0 0; trytry { System.outout.printlnprintln(j/i); } catch catch (ArithmeticException

e) { // TODO Auto-// TODO Auto-generated catch blockgenerated catch block System.outout.printlnprintln("Division par zéroDivision par zéro !"!"); System.outout.printlnprintln(""coucou toicoucou toi !"!");

}} }

Page 15: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Si vous exécutez ce code, vous Si vous exécutez ce code, vous devez avoir :devez avoir :

Page 16: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

4_Quelques exceptions 4_Quelques exceptions prédéfinies en Javaprédéfinies en Java

• Division par zéro pour les entiers : Division par zéro pour les entiers : ArithmeticExceptionArithmeticException

• RRéférence nulle : éférence nulle : NullPointerExceptionNullPointerException

• Tentative de forçage de type illégale : Tentative de forçage de type illégale :

ClassCastExceptionClassCastException

• Tentative de création d'un tableau de taille Tentative de création d'un tableau de taille

négative : négative : NegativeArraySizeExceptionNegativeArraySizeException

• Dépassement de limite d'un tableau : Dépassement de limite d'un tableau :

ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException

Page 17: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

5_Les exceptions 5_Les exceptions personnalisées personnalisées • À partir de maintenant, nous allons nous À partir de maintenant, nous allons nous

servir à nouveau de notre projet Ville (celui servir à nouveau de notre projet Ville (celui que vous avez utilisé dans les premiers que vous avez utilisé dans les premiers chapitres...).chapitres...).Nous allons perfectionner un peu la gestion Nous allons perfectionner un peu la gestion de nos objets Ville et Capitale... Comment ? de nos objets Ville et Capitale... Comment ? Eh bien je vois bien une exception qui Eh bien je vois bien une exception qui pourrait être créée... Et je suis sûr que pourrait être créée... Et je suis sûr que certains petits malins se sont déjà amusés à certains petits malins se sont déjà amusés à créer des villes ou des capitales avec un créer des villes ou des capitales avec un nombres d'habitants négatif.... nombres d'habitants négatif....

Page 18: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Je vous propose simplement de mettre Je vous propose simplement de mettre en oeuvre une exception de notre cru, en oeuvre une exception de notre cru, ceci afin de pouvoir interdire ceci afin de pouvoir interdire l'instanciation d'objet Ville ou Capitale l'instanciation d'objet Ville ou Capitale ayant un nombre négatif d'habitants.ayant un nombre négatif d'habitants.

La procédure pour faire ce tour de La procédure pour faire ce tour de force est un peu particulière :force est un peu particulière :

Page 19: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Page 20: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

• Nous devons créer une classe héritée de Nous devons créer une classe héritée de la classe Exception : appelons-la la classe Exception : appelons-la NombreHabitantException.NombreHabitantException. Par Par convention, les exceptions ont un nom convention, les exceptions ont un nom se terminant par se terminant par Exception.Exception.

• Nous devons renvoyer l'exception levée Nous devons renvoyer l'exception levée à notre classeà notre classe NombreHabitantExceptionNombreHabitantException. .

• Ensuite, gérer celle-ci dans notre classe Ensuite, gérer celle-ci dans notre classe NombreHabitantExceptionNombreHabitantException

Page 21: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Le premier mot cléLe premier mot clé

throwsthrows

Ce mot clé permet de dire à une instruction Java Ce mot clé permet de dire à une instruction Java (condition,(condition,

déclaration de variable...) ou à une classe entière qu'une déclaration de variable...) ou à une classe entière qu'une exception potentielle sera gérée par une classe -exception potentielle sera gérée par une classe -souvent une classe personnalisée- mais ce peut être la souvent une classe personnalisée- mais ce peut être la classe Exception elle-même. Ce mot clé est suivi du classe Exception elle-même. Ce mot clé est suivi du nom de la classe qui va gérer l'exception. Ceci a pour nom de la classe qui va gérer l'exception. Ceci a pour but de définir le type d'exception qui risque d'être but de définir le type d'exception qui risque d'être générée par l'instruction, ou la classe qui précède le générée par l'instruction, ou la classe qui précède le mot clé throws.mot clé throws.

Page 22: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Le deuxième mot cléLe deuxième mot clé

throwthrowCelui-ci permet d'instancier un objet Celui-ci permet d'instancier un objet dansdans

la classe suivant l'instruction throws. la classe suivant l'instruction throws. Cette instruction est suivie du mot clé Cette instruction est suivie du mot clé new ainsi que d'un objet cité avec new ainsi que d'un objet cité avec throws. En fait, il lance une exception, throws. En fait, il lance une exception, tout simplement.tout simplement.

Page 23: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Pour pouvoir mettre en pratique ce Pour pouvoir mettre en pratique ce système, nous devons commencer système, nous devons commencer par créer une classe qui va gérer nos par créer une classe qui va gérer nos exceptions. Celle-ci, je vous le exceptions. Celle-ci, je vous le rappelle, doit être héritée rappelle, doit être héritée d'Exception. Pour commencer, inutile d'Exception. Pour commencer, inutile de créer un constructeur, ce qui nous de créer un constructeur, ce qui nous donnerait une classe Erreur, héritée donnerait une classe Erreur, héritée de Exception, vide.de Exception, vide.Comme ceci :Comme ceci :

Page 24: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

class NombreHabitantException class NombreHabitantException extendsextends Exception{

publicpublic NombreHabitantException NombreHabitantException(){ System.outout.printlnprintln("Vous "Vous essayez d'instancier une classe essayez d'instancier une classe Ville avec un nombre d'habitants Ville avec un nombre d'habitants négatif !"négatif !");

} }

Page 25: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 26: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Ceci signifie qu'à partir de maintenant, dû Ceci signifie qu'à partir de maintenant, dû aux changements dans le constructeur, vousaux changements dans le constructeur, vous devrez gérer les exceptions possibles surdevrez gérer les exceptions possibles sur

cette instruction. Avec un bloc try{} catch{}.cette instruction. Avec un bloc try{} catch{}.On dit aussi que votre constructeur est On dit aussi que votre constructeur est devenu une méthode à risque, et vous avez devenu une méthode à risque, et vous avez laissé le soin au développeur de gérer laissé le soin au développeur de gérer l'exception potentielle !l'exception potentielle !

Page 27: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Donc, pour que l'erreur Donc, pour que l'erreur disparaisse, il nous faut entourer disparaisse, il nous faut entourer notre instanciation avec un bloc notre instanciation avec un bloc try{...}catch{...}.try{...}catch{...}.Comme ceci : Comme ceci :

Page 28: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 29: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Mais si nous déclarons une Ville Mais si nous déclarons une Ville avec unavec un

nombre d'habitants négatif pour nombre d'habitants négatif pour testertester

notre exception ?notre exception ?

Avec ce code, par exemple Avec ce code, par exemple

Page 30: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 31: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Ce qui signifie que si notre instanciation a échoué dans Ce qui signifie que si notre instanciation a échoué dans notre bloc try{}, le programme plantera ! notre bloc try{}, le programme plantera !

Comment empêcher cela, alors ?Comment empêcher cela, alors ?

Vous allez voir, c'est très simple. Il suffit d'instancier un Vous allez voir, c'est très simple. Il suffit d'instancier un objet Ville par défaut dans notre bloc catch{}. Grâce à cela, objet Ville par défaut dans notre bloc catch{}. Grâce à cela, si notre instanciation avec valeur échoue, on fait une si notre instanciation avec valeur échoue, on fait une instanciation par défaut qui, elle, n'est pas une méthode à instanciation par défaut qui, elle, n'est pas une méthode à risque !risque !Voyez plutôt : Voyez plutôt :

Page 32: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 33: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

•Il vous suffit maintenant de Il vous suffit maintenant de définir cette construction de définir cette construction de notre objet hérité d'Exception notre objet hérité d'Exception dans votre classe Ville. Comme dans votre classe Ville. Comme ça :ça :

Page 34: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

publicpublic Ville Ville(String pNom, int int pNbre, String pPays)throwthrow NombreHabitantException

{

ifif(pNbre < 0 0)

throw newthrow new NombreHabitantExceptionNombreHabitantException(pNbre); // on // on appelle le nouveau constructeurappelle le nouveau constructeur

elseelse {

nbreInstance++;

nbreInstanceBis++;

nomVille = pNom;

nomPays = pPays; nbreHabitant = pNbre; this this.setCategoriesetCategorie(); } }

Page 35: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Et si vous exécutez le même code que Et si vous exécutez le même code que précédemment, vous obtiendrez ceci précédemment, vous obtiendrez ceci ::

Page 36: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 37: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

6_Arbre des exceptions6_Arbre des exceptionsThrowableString (message d'erreur)

ErrorException

RunTimeException

VosExceptions...

OutOfMemoryError

NullPointerExceptionClassCastException...

Les erreurs sont graves et il est recommandé de ne pas les corriger.

exceptions prédéfinies

Page 38: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

7_Astuce d'Eclipse

Il y a plusieurs manières de procéder, Il y a plusieurs manières de procéder, mais toutes font la même mais toutes font la même

chose.chose.

L'astuce ici réside dans le fait de L'astuce ici réside dans le fait de générer les blocs try{} catch{} générer les blocs try{} catch{} automatiquement. Bien sûr, il faut automatiquement. Bien sûr, il faut que les clauses de déclenchement que les clauses de déclenchement soient définies au préalable !soient définies au préalable !

Page 39: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Si vous reprenez le code de votre méthode Si vous reprenez le code de votre méthode main, si vous effacez le contenu et ajoutez main, si vous effacez le contenu et ajoutez une instanciation de l'objet Ville sans les une instanciation de l'objet Ville sans les clauses try{} catch{}, vous avez l'erreur clauses try{} catch{}, vous avez l'erreur persistante dont je vous parlais au début persistante dont je vous parlais au début du chapitre.du chapitre.

Si vous cliquez sur la croix rouge, située à Si vous cliquez sur la croix rouge, située à gauche de votre zone de saisie, vous gauche de votre zone de saisie, vous obtenez ceci :obtenez ceci :

Page 40: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 41: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Choisissez l'option Surround with try/catch et Choisissez l'option Surround with try/catch et vous avez votre code, tout beau tout propre vous avez votre code, tout beau tout propre ! !

La deuxième méthode consiste à La deuxième méthode consiste à sélectionner votre (ou vos) ligne(s) de code sélectionner votre (ou vos) ligne(s) de code à risque et de faire : Source / Surround à risque et de faire : Source / Surround with / try/catch block ou d'utiliser le with / try/catch block ou d'utiliser le raccourci clavier Shift + Alt + Z :raccourci clavier Shift + Alt + Z :

Voici l'image en utilisant le menu :Voici l'image en utilisant le menu :

Page 42: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama
Page 43: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Voici l'image en utilisant le raccourci Voici l'image en utilisant le raccourci clavier :clavier :

Page 44: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Exercice 1- Division par Exercice 1- Division par zérozéro

1- Écrire un programme qui effectue une 1- Écrire un programme qui effectue une division par zéro et ne contient aucun division par zéro et ne contient aucun traitement d'exception. Que se passe-t-il? traitement d'exception. Que se passe-t-il? Pourquoi? Quel est le type de l'exception Pourquoi? Quel est le type de l'exception générée.générée.

2- Cette fois, ré-écrire le programme pour 2- Cette fois, ré-écrire le programme pour capturer l'exception.capturer l'exception.

3- Le modifier pour afficher un message 3- Le modifier pour afficher un message d'erreur explicite.d'erreur explicite.

4- Cette fois, le programme corrige lui même 4- Cette fois, le programme corrige lui même et remplace la division par zéro par une et remplace la division par zéro par une division par 1.division par 1.

Remarquons ainsi que lever une exception ne Remarquons ainsi que lever une exception ne signifie forcement l'affichage d'un message signifie forcement l'affichage d'un message d'erreur suivi de l'arrêt du programme mais d'erreur suivi de l'arrêt du programme mais qu'il peut y avoir poursuite normale de qu'il peut y avoir poursuite normale de l'exécutionl'exécution

Page 45: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama

Exercice 2- Saisie d'un mot Exercice 2- Saisie d'un mot de passede passe

Dans les failles de sécurité réseau, on trouve très Dans les failles de sécurité réseau, on trouve très souvent les problèmes de dépassement. Par souvent les problèmes de dépassement. Par exemple, sur certaines anciennes versions de exemple, sur certaines anciennes versions de telnettelnet, un login ou un mot de passe de plus d'un , un login ou un mot de passe de plus d'un mega-octet faisait "planter" le programme et on mega-octet faisait "planter" le programme et on obtenait alors un accès obtenait alors un accès rootroot au système. Ce au système. Ce programme va gérer ce type de problème en programme va gérer ce type de problème en séparant les exceptions pour une meilleure séparant les exceptions pour une meilleure gestion.gestion.

1- Écrire un programme stand-alone qui demande 1- Écrire un programme stand-alone qui demande en boucle un nom d'utilisateur (login) et un mot en boucle un nom d'utilisateur (login) et un mot de passe (pwd) jusqu'à recevoir un login/pwd de passe (pwd) jusqu'à recevoir un login/pwd correct.correct.

Page 46: Par: Par: Manaf hamza Manaf hamza Bassir said Bouchkri abd ellah Prof: Prof: Rahmouni ossama Rahmouni ossama