• Aucun résultat trouvé

2I002 EXCEPTIONS PERSONNALISÉES

N/A
N/A
Protected

Academic year: 2022

Partager "2I002 EXCEPTIONS PERSONNALISÉES"

Copied!
14
0
0

Texte intégral

(1)

2I002

EXCEPTIONS

PERSONNALISÉES

Vincent Guigue

(2)

Exceptions

Uneexception est une rupture de calcul.

Elle est utilisée :

pour éviter les erreurs de calcul division par zéro

accès à la référencenull ouverture d’un fichier inexistant . . .

comme style de programmation

En Java une exception est un objet

(3)

Définir ses exceptions personnalisées Idée

Une exception est un objet... On peut définir ses propres exceptions

1 // E x c e p t i o n de b a s e p o u r t o u s l e s p r o b l e m e s de p i l e

2 p u b l i c c l a s s P i l e E x c e p t i o n e x t e n d s E x c e p t i o n {

3 p u b l i c P i l e E x c e p t i o n ( S t r i n g m e s s a g e ) {

4 s u p e r(" P r o b l e m e ␣ de ␣ p i l e ␣ : ␣ " + m e s s a g e ) ;

5 }

6 }

On peut même définir une hiérarchie d’exception:

1 // E x c e p t i o n s p e c i f i q u e p o u r l a p i l e p l e i n e

2 p u b l i c c l a s s P i l e P l e i n e E x c e p t i o n e x t e n d s P i l e E x c e p t i o n {

3 p u b l i c P i l e P l e i n e E x c e p t i o n ( ) {

4 s u p e r(" P i l e ␣ p l e i n e ") ;

5 }

6 }

Utile pour le transport d’informations (Attributs de l’exception personnalisée)

2i002 – Exceptions (2) 3/13

(4)

Récupération des interruptions avec des hiérarchies d’exceptions 1/3

+ Exception() + Exception(String s) +… [autres constructeurs]

Exception

+ PileException(String s) - infos sur la pile [OPT]

PileException

Une PileException EST UNE Exception... Le principe de subsomption s’applique.

1 t r y{

2 // P i l e p v i d e . . .

3 S y s t e m . o u t . p r i n t l n ( p . d e p i l e r ( ) ) ; // l e v e une P i l e E x c e p t i o n

4 }

5 }c a t c h( E x c e p t i o n e ) { // P i l e E x c e p t i o n e s t a t t r a p e e

6 // c a r c ’ e s t UNE E x c e p t i o n

7 . . .

8 }

(5)

Récupération des interruptions avec des hiérarchies d’exceptions 2/3

Possibilité de raffiner le traitement en fonction du type de l’exception

+ Exception() + Exception(String s) +… [autres constructeurs]

Exception

+ PileException(String s) - infos sur la pile [OPT]

PileException

Possibilité de faire plusieurs catch: traitement séquentiel, le premier qui correspond est utilisé (et les autres non)

1 t r y{

2 // P i l e p v i d e . . .

3 S y s t e m . o u t . p r i n t l n ( p . d e p i l e r ( ) ) ; // l e v e une P i l e E x c e p t i o n

4 }

5 }c a t c h(P i l e E x c e p t i o n e) { // P i l e E x c e p t i o n e s t a t t r a p e e i c i

6 . . .

7 }c a t c h(E x c e p t i o n e) { // On ne p a s s e p a s i c i

8 . . .

9 }

2i002 – Exceptions (2) 5/13

(6)

Récupération des interruptions avec des hiérarchies d’exceptions 3/3

+ Exception() + Exception(String s) +… [autres constructeurs]

Exception

+ PileException(String s) - infos sur la pile [OPT]

PileException

On définit obligatoirement les Exception les plus spécialisée en premier Sinon erreur de compilation Car code non accessible Le programme suivant ne compile pas...

1 t r y{

2 // P i l e p v i d e . . .

3 S y s t e m . o u t . p r i n t l n ( p . d e p i l e r ( ) ) ; // l e v e une P i l e E x c e p t i o n

4 }

5 }c a t c h( E x c e p t i o n e ) {

6 . . .

7 }c a t c h( P i l e E x c e p t i o n e ) { // Code non a c c e s s i b l e

8 . . .

9 }

(7)

Distinction entre Exception et RuntimeException

Les Exception susceptibles d’être levées dans une méthodedoivent être déclarée dans la signature de la méthode via le mot cléthrows.

Les RuntimeException sont des Exception particulières qui ne requièrent pas cette déclaration.

2i002 – Exceptions (2) 7/13

(8)

Déclaration d’une Exception

+ Exception() + Exception(String s) +… [autres constructeurs]

Exception

+ PileException(String s) - infos sur la pile [OPT]

PileException

Dans le cas d’un héritage à partir

d’Exception, la déclaration est obligatoire:

Sinon le code ne compile pas Signature de la méthode:

public <Retour> fonction(<args>) throws <typeException>

Sur un exemple:

1 p u b l i c v o i d e m p i l e r (i n t i t e m ) t h r o w s P i l e E x c e p t i o n{

2 i f( n i v e a u >=c a p a c i t e )

3 throw new P i l e E x c e p t i o n (" La ␣ p i l e ␣ e s t ␣ p l e i n e : ␣ i m p o s s i b l e ␣ d ’ a j o u t e r ␣ d e s ␣ e l e m e n t s ") ;

4 i t e m s [ n i v e a u ++] = i t e m ;

5 }

(9)

Cas particulier Attention

Si l’exception est traitée au niveau local, la fonction n’est pas susceptible de la lever : pas de déclaration dans ce cas.

1 // a v e c M o n E x c e p t i o n e x t e n d s E x c e p t i o n

2

3 p u b l i c v o i d m a F o n c t i o n ( Type a r g s ) { // p a s de d e c l a r a t i o n

4 . . .

5 t r y{

6 . . . // t r a i t e m e n t s

7 i f( t e s t )

8 throw new M o n E x c e p t i o n (" MonMessage ") ;

9 . . . // r e s t e d e s t r a i t e m e n t s

10 }c a t c h( M o n E x c e p t i o n e ) {

11 . . . // f a i r e qqch

12 }

13 }

Dans ce cas, il est impossible que maFonction soit interrompue par une MonException non traitée

2i002 – Exceptions (2) 9/13

(10)

Usage: méthode causant une interruption Idée (logique)

Si une méthodea utilise une méthode b susceptible de lever l’ExceptionExc, alorsa est susceptible de lever Exc également.

Vision linéaire du déroulement d'un programme

Fonction 1 Fonction 2

Exception levée main

1 Exception traitée dans Fonction2:

aucune déclaration nulle part

2 Exception traitée dans Fonction1 Fonction2 doit déclarerthrows MonException

Délégation du traitement Fonction1 ne déclare rien

3 Exception traitée dans main Les fonctions déclarentthrows NB: suivant les cas, on ne reprend pas

(11)

Cascade d’Exception

Une Exception peut déclencher d’autres Exception Mécanisme: Exception e →catch → Exception e2

Pour certains cas particuliers

Traduction d’exceptions générales vers les exceptions d’un projet particulier

1 p u b l i c v o i d m a F o n c t i o n t h r o w s D e p a s s e m e n t C a p a c i t e E x c e p t i o n {

2 t r y{

3 // g e s t i o n d ’ une s t r u c t u r e t a b u l a i r e de d o n n e e s

4 // r i s q u e de d e p a s s e m e n t d ’ i n d i c e

5 . . .

6 }c a t c h( I n d e x O u t O f B o u n d E x c e p t i o n e ) {

7 // t r a d u c t i o n d ’ une E x c e p t i o n J a v a s t a n d a r d

8 // > E x c e p t i o n p e r s o

9 throw new D e p a s s e m e n t C a p a c i t e E x c e p t i o n ( ) ;

10 }

11 }

2i002 – Exceptions (2) 11/13

(12)

Assertion

(13)

Assertions en Java Idée

Simplifier la syntaxe des Exception Instructionassert

Syntaxe : assert expr1 [ : expr2 ] expr1 est une expression booléenne expr2 de type quelconque

Exécution :

expr1est évaluée

si falseuneAssertionErrorest lancée

expr2, convertie en chaîne, est utilisée comme message java.lang.Object

extended by java.lang.Throwable extended by java.lang.Error

extended by java.lang.AssertionError

Alternative avec des exceptions :

1 i f ( ! e x p r 1 ) {throw new M y E x c e p t i o n ( ) ; }

2i002 – Exceptions (2) 12/13

(14)

Utilisations [E. Chailloux]

1 i f ( x == 0 ) {

2 . . .

3 } e l s e { // x e s t e g a l a 1 . . .

4 a s s e r t x == 1 : x ;

5 }

6 . . .

7 s w i t c h( x ) {

8 c a s e −1 : r e t u r n INF ;

9 c a s e 0 : r e t u r n EGAL ;

10 c a s e 1 : r e t u r n SUP ;

11 d e f a u l t : a s s e r t f a l s e; // i m p o s s i b l e s i x=−1, 0 ou 1

12 }

13 . . .

14 p u b l i c i n t f f ( ) {

15 f o r ( . . . ) {

16 . . . r e t u r n . . . ;

17 }

18 // on ne p a s s e p a s i c i

19 a s s e r t f a l s e;

20 r e t u r n 0 ;

21 }

Références

Documents relatifs

Il existe une autre corrélation aussi nette : c’est aussi dans les pays où l’austérité budgétaire a été la plus sévère que le taux de chômage s’est le plus dégradé (ou

vincialismes dont nous ne saisissons pas tout le sens, Et nous habituons nos enfants et nous invitons tous les correspondants à toujours met- tre entre

• Développement de la petite enfance inclusif pour tous les enfants handicapés dans les secteurs de la nutrition, de la santé, de l’éducation et de l’assainisement:

En Java une exception est un objet Création de l’objet plantage Déclenchement d’un plantage... Et récupération de ce plantage!.. Rupture de calcul = Exceptions. Une exception est

[r]

[r]

Le système optique centré ainsi formé est placé dans l’air d’indice 1 (Figure 2 )?. Les conditions de l’approximation de Gauss

Vivre dans une vill’appart en souplex, c’est faire le choix d’un sublime logement atypique.. Conçu sur deux niveaux, le souplex est le compromis parfait entre la maison