CSI 1502 Principes fondamentaux en conception des logiciels

  • Slides: 25
Download presentation
CSI 1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions

CSI 1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions

Objectifs du cours: Gestion des exceptions n n Comprendre ce qui suit: n Le

Objectifs du cours: Gestion des exceptions n n Comprendre ce qui suit: n Le fonctionnement de «try-catch» n Propagation d`exception n Créer et lancer les exceptions n types de «I/O stream» Étudiez la section 8. 0 pour l`examen final 2

Que sont les Exceptions? n n Une exception est un objet qui décrit une

Que sont les Exceptions? n n Une exception est un objet qui décrit une situation anormal ou erronée; tel que l`abus Exceptions sont lancé ( «thrown» ) par un programme, et peuvent être attrapé et utilisé par une autre partie du programme Un programme peut-être séparé en: n Un flux normal d`exécution n Un flux d`exception d`exécution Une error est aussi représenté dans Java comme objet mais en général représente une situation sans retour et ne devrait pas être attrapée 3

Prise en charge d`Exception en Java n n Java utilise une ensemble prédéfini d`exceptions

Prise en charge d`Exception en Java n n Java utilise une ensemble prédéfini d`exceptions et d`erreurs qui peuvent arriver durant l`exécution Un programme peut s`occuper d`une exception d`une de 3 façons: n L`ignorer n S`en occuper là ou elle arrive n S`en occuper dans une autre place dans le programme La manière dont l`exception est traité est un aspect important de conception 4

Prise en charge d`Exception en Java n n Le message inclus une pile d`appel

Prise en charge d`Exception en Java n n Le message inclus une pile d`appel qui incluse la ligne ou l`exception à eu lieu La pile d`appel montre aussi quels sont les méthodes (et leur ordre d`invocation) qui ont crée cette situation La méthode get. Message retourne un String expliquant pourquoi l`exception à été lancé n La méthode print. Stack. Trace imprime la pile d`appel Voir Zero. java (p. 449) 5

Zero. java public class Zero { // Deliberately divides by zero to produce an

Zero. java public class Zero { // Deliberately divides by zero to produce an exception. public static void main (String[] args) { int numerator = 10; int denominator = 0; System. out. println (numerator / denominator); System. out. println ("This text will not be printed. "); } } java. lang. Arithmetic. Exception: / by zero at Zero. main(Zero. java: 17) Exception in thread "main" ----j. GRASP wedge 2: exit code for process is 1. ----j. GRASP: operation complete. 6

Prise en charge d`Exception : La commande «try» n n n Afin de s`occuper

Prise en charge d`Exception : La commande «try» n n n Afin de s`occuper d`une exception quand elle arrive, l`on met la ligne qui lance l`exception dans un block try Un block try est suivie de un ou plus de clause catch qui s`occupent de l`exception Chaque clause catch à une type exception associé, et est dénommé une «exception handler» Quand une exception prend place, la 1ère clause catch dont le type d`exception correspond s`en occupe Voir Product. Codes. java (page xxx) 7

Product. Codes. java import cs 1. Keyboard; public class Product. Codes { // Counts

Product. Codes. java import cs 1. Keyboard; public class Product. Codes { // Counts the number of product codes that are entered with a // zone of R and district greater than 2000. //--------------------------------public static void main (String[] args) { String code; char zone; int district, valid = 0, banned = 0; System. out. print ("Enter product code (XXX to quit): "); code = Keyboard. read. String(); Continued… 8

Product. Codes. java while (!code. equals ("XXX")) { try { zone = code. char.

Product. Codes. java while (!code. equals ("XXX")) { try { zone = code. char. At(9); district = Integer. parse. Int(code. substring(3, 7)); valid++; if (zone == 'R' && district > 2000) banned++; } catch (String. Index. Out. Of. Bounds. Exception exception) { System. out. println ("Improper code length: " + code); } catch (Number. Format. Exception exception) { System. out. println ("District is not numeric: " + code); } } System. out. print ("Enter product code (XXX to quit): "); code = Keyboard. read. String(); System. out. println ("# of valid codes entered: " + valid); System. out. println ("# of banned codes entered: " + banned); }} 9

La Clause finally n n La commande try peut avoir une clause optionnelle suivant

La Clause finally n n La commande try peut avoir une clause optionnelle suivant les clause catch, dénommé par le mot réservé finally Le code dans la clause finally sont toujours exécuté n Si il n`y a pas d`exception de lancé, le code dans la clause finally est exécuté après que le code du block try ai été exécuté n Si il y a eu une expection de lancée, If an exception is generated, le code dans la clause finally est exécuté après que le code de la clause catch approprié ai été exécuté 10

Propagation d`exception n n Une exception peut-être prise en charge à un niveau plus

Propagation d`exception n n Une exception peut-être prise en charge à un niveau plus haut si il n`est pas approprié de s`en occuper quand elle arrive Les exceptions se propagent vers le haut dans la méthode appelant la hiérarchie jusqu`a ce que elles sont attrapée et prises en charge ou jusqu`a ce que il atteigne la méthode main Un block try qui contient un appel à la méthode dans laquelle une exception est lancé, peut attraper celle-ci Voir Propagation. java (page xxx) Voir Exception. Scope. java (page xxx) 11

Propagation. java public class Propagation { // Invokes the level 1 method to begin

Propagation. java public class Propagation { // Invokes the level 1 method to begin the exception demonstation. static public void main (String[] args) { Exception. Scope demo = new Exception. Scope(); } } System. out. println("Program beginning. "); demo. level 1(); System. out. println("Program ending. "); 12

Propagation: L`imprimé The call stack trace: java. lang. Arithmetic. Exception: / by zero at

Propagation: L`imprimé The call stack trace: java. lang. Arithmetic. Exception: / by zero at Exception. Scope. level 3(Exception. Scope. java: 54) at Exception. Scope. level 2(Exception. Scope. java: 41) at Exception. Scope. level 1(Exception. Scope. java: 18) at Propagation. main(Propagation. java: 17) Level 1 ending. Program ending. 13

Exception. Scope. java public class Exception. Scope { //--------------------------------// Catches and handles the exception

Exception. Scope. java public class Exception. Scope { //--------------------------------// Catches and handles the exception that is thrown in level 3. //--------------------------------public void level 1() { System. out. println("Level 1 beginning. "); try { level 2(); } catch (Arithmetic. Exception problem) { System. out. println (); System. out. println ("The exception message is: " + problem. get. Message()); System. out. println ("The call stack trace: "); problem. print. Stack. Trace(); System. out. println (); } System. out. println("Level 1 ending. "); } 14 Continued. .

Exception. Scope. java public void level 2() { System. out. println("Level 2 beginning. ");

Exception. Scope. java public void level 2() { System. out. println("Level 2 beginning. "); level 3 (); System. out. println("Level 2 ending. "); } //--------------------------------// Performs a calculation to produce an exception. It is not // caught and handled at this level. //--------------------------------public void level 3 () { int numerator = 10, denominator = 0; } } System. out. println("Level 3 beginning. "); int result = numerator / denominator; System. out. println("Level 3 ending. "); 15

L`Hiérarchie de classe d`exception n Figure 8. 1 p. 458 16

L`Hiérarchie de classe d`exception n Figure 8. 1 p. 458 16

Prise en charge d`Exception : la commande throw n n n Un programmeur peut

Prise en charge d`Exception : la commande throw n n n Un programmeur peut définir une exception par extension de la classe Exception class ou l`un de ces descendants Les exceptions sont lancé en utilisant la commande thrown En général un commande throw est intégré dans un commande if qui évalue la condition pour voir si une exception devrait être lancée See Creating. Exceptions. java (page xxx) See Out. Of. Range. Exception. java (page xxx) 17

Creating. Exceptions. java import cs 1. Keyboard; public class Creating. Exceptions { //--------------------------------// Creates

Creating. Exceptions. java import cs 1. Keyboard; public class Creating. Exceptions { //--------------------------------// Creates an exception object and possibly throws it. //--------------------------------public static void main (String[] args) throws Out. Of. Range. Exception { final int MIN = 25, MAX = 40; Out. Of. Range. Exception problem = new Out. Of. Range. Exception ("Input value is out of range. "); System. out. print ("Enter an integer value between " + MIN + " and " + MAX + ", inclusive: "); int value = Keyboard. read. Int(); // Determines if the exception should be thrown if (value < MIN || value > MAX) throw problem; } } System. out. println ("End of main method. "); // may never reach 18

Lancer une exception Enter an integer value between 25 and 40, inclusive: 3 Out.

Lancer une exception Enter an integer value between 25 and 40, inclusive: 3 Out. Of. Range. Exception: Input value is out of range. at Creating. Exceptions. main(Creating. Exceptions. java: 18) Exception in thread "main" ----j. GRASP wedge 2: exit code for process is 1. ----j. GRASP: operation complete. Enter an integer value between 25 and 40, inclusive: 27 End of main method 19

Out. Of. Range. Exception. java public class Out. Of. Range. Exception extends Exception {

Out. Of. Range. Exception. java public class Out. Of. Range. Exception extends Exception { //--------------------------------// Sets up the exception object with a particular message. //--------------------------------Out. Of. Range. Exception (String message) { super (message); } } n L`utilisation d`une exception, une condition, une boucle est un choix important dans la conception 20

 «Checked Exceptions» n n n Une exception est soit «checked» ou «unchecked» Une

«Checked Exceptions» n n n Une exception est soit «checked» ou «unchecked» Une checked exception doit soit être attrapée par une méthode ou doit être encapsulé dans une clause throw de n`importe quel méthode qui peut la lancer ou propager n Une clause throws est rajouté à l`entête d`une méthode Le compilateur va se plaindre si une checked exception n`est pas prise en main correctement 21

 «Unchecked Exceptions» n n n Une unchecked exception n`a pas besoin d`avoir une

«Unchecked Exceptions» n n n Une unchecked exception n`a pas besoin d`avoir une prise en charge implicit, même si l`on peut s`en occuper de tel façon Les seuls unchecked exceptions en Java sont des objets de types Runtime. Exception ou les descendants de cette classe Erreurs sont similaires pour Runtime. Exception et les descendants de cette classe n Les erreurs ne devraient pas être attrapées n Les erreurs ne nécessitent pas de clause throw 22

I/O standard n n n Il y a 3 flux I/O standards: n Entrée

I/O standard n n n Il y a 3 flux I/O standards: n Entrée standard – défini par System. in n Sortie standard – défini par System. out n Erreur standard – défini par System. err System. in représente les entrée par clavier typiquement System. out et System. err représente une fenêtre typiquement Nous utilisons System. out avec la commande println Voir p. 461+ du livre 23

La classe IOException n Les opérations suivantes utilisant les classes I/O peuvent lancer une

La classe IOException n Les opérations suivantes utilisant les classes I/O peuvent lancer une IOException n n Un fichier que l`on veut lire ou dans lequel on veut écrire n`existe pas Même si le fichier existe, un programme ne pourrait peut-être pas le trouver Le fichiers pourrait contenir des donnés dans le mauvais format Une IOException est une checked exception 24

Chapter 8: Summary n n Comprendre ce qui suit: n Le fonctionnement de «try-catch»

Chapter 8: Summary n n Comprendre ce qui suit: n Le fonctionnement de «try-catch» n Propagation d`exception n Créer et utiliser les exceptions n types de «I/O stream» Étudiez la section 8. 0 pour l`examen final 25