“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 93 — #103
i
i
i
i
i
i
i
i
2.7 Les exceptions
93
B=200
Maintenant 210 est affiché dans le Browser. Toute opération, pas uniquement l’addition, bloquera si elle n’a pas assez d’informations pour calculer son résultat. Par
exemple, les comparaisons peuvent bloquer. La comparaison d’égalité X==Y bloquera
si elle ne peut pas décider si X est égal à ou différent de Y. Cela arrivera, par exemple,
si l’une ou l’autre des variables est non liée.
Des erreurs de programmation donnent souvent lieu à des suspensions dataflow. Si
vous exécutez une instruction qui devrait afficher un résultat et que rien n’est affiché, la
cause probable du problème est une opération bloquée. Il faut soigneusement vérifier
que les arguments de toutes les opérations sont liés. Idéalement, le débuggeur du
système doit détecter quand un programme a des opérations bloquées qui ne peuvent
pas continuer.
2.7 LES EXCEPTIONS
Trouvons d’abord la règle, ensuite nous tenterons d’expliquer les exceptions.
– Le Nom de la Rose, Umberto Eco (1932-)
Comment traiter une situation exceptionnelle dans un programme ? Par exemple, une
division par zéro, l’ouverture d’un fichier ou la sélection d’un champ d’un enregistrement qui n’existe pas ? Comme ces situations n’arrivent pas dans un programme
correct, elles ne doivent pas encombrer le style de programmation normal. Néanmoins,
elles arrivent parfois. Il doit être possible pour un programme de les gérer simplement. Le modèle déclaratif ne peut pas faire cela sans l’ajout de tests encombrants
partout dans le programme. Une manière plus élégante est d’étendre le modèle avec
un mécanisme de traitement d’exceptions. Cette section montre comment on peut le
faire. Nous donnons la syntaxe et la sémantique du modèle étendu et nous expliquons
comment les exceptions apparaissent dans le langage complet.
2.7.1 La motivation et les concepts de base
Dans la sémantique de la section 2.4, nous parlons de « lever une erreur » quand
une instruction ne peut pas continuer correctement. Par exemple, une instruction
conditionnelle lève une erreur quand son argument est une valeur non booléenne.
Nous avons été délibérément vague sur ce qui se passe ensuite. Maintenant, nous
pouvons être plus précis. Nous définissons une erreur comme une différence entre le
comportement d’un programme et son comportement souhaité. Il y a beaucoup de
sources d’erreurs. Elles peuvent être internes ou externes au programme. Une erreur
interne peut résulter de l’invocation d’une opération avec un argument de type ou de
valeur illégal. Une erreur externe peut résulter de l’ouverture d’un fichier non-existant.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
2.7 Les exceptions
93
B=200
Maintenant 210 est affiché dans le Browser. Toute opération, pas uniquement l’addition, bloquera si elle n’a pas assez d’informations pour calculer son résultat. Par
exemple, les comparaisons peuvent bloquer. La comparaison d’égalité X==Y bloquera
si elle ne peut pas décider si X est égal à ou différent de Y. Cela arrivera, par exemple,
si l’une ou l’autre des variables est non liée.
Des erreurs de programmation donnent souvent lieu à des suspensions dataflow. Si
vous exécutez une instruction qui devrait afficher un résultat et que rien n’est affiché, la
cause probable du problème est une opération bloquée. Il faut soigneusement vérifier
que les arguments de toutes les opérations sont liés. Idéalement, le débuggeur du
système doit détecter quand un programme a des opérations bloquées qui ne peuvent
pas continuer.
2.7 LES EXCEPTIONS
Trouvons d’abord la règle, ensuite nous tenterons d’expliquer les exceptions.
– Le Nom de la Rose, Umberto Eco (1932-)
Comment traiter une situation exceptionnelle dans un programme ? Par exemple, une
division par zéro, l’ouverture d’un fichier ou la sélection d’un champ d’un enregistrement qui n’existe pas ? Comme ces situations n’arrivent pas dans un programme
correct, elles ne doivent pas encombrer le style de programmation normal. Néanmoins,
elles arrivent parfois. Il doit être possible pour un programme de les gérer simplement. Le modèle déclaratif ne peut pas faire cela sans l’ajout de tests encombrants
partout dans le programme. Une manière plus élégante est d’étendre le modèle avec
un mécanisme de traitement d’exceptions. Cette section montre comment on peut le
faire. Nous donnons la syntaxe et la sémantique du modèle étendu et nous expliquons
comment les exceptions apparaissent dans le langage complet.
2.7.1 La motivation et les concepts de base
Dans la sémantique de la section 2.4, nous parlons de « lever une erreur » quand
une instruction ne peut pas continuer correctement. Par exemple, une instruction
conditionnelle lève une erreur quand son argument est une valeur non booléenne.
Nous avons été délibérément vague sur ce qui se passe ensuite. Maintenant, nous
pouvons être plus précis. Nous définissons une erreur comme une différence entre le
comportement d’un programme et son comportement souhaité. Il y a beaucoup de
sources d’erreurs. Elles peuvent être internes ou externes au programme. Une erreur
interne peut résulter de l’invocation d’une opération avec un argument de type ou de
valeur illégal. Une erreur externe peut résulter de l’ouverture d’un fichier non-existant.
© Dunod – La photocopie non autorisée est un délit
