Algoritmos y Programación 3

Anuncio
Excepciones
Algoritmos y Programación 3
A3F
Conceptualización
Representan situaciones EXCEPCIONALES que
alteran el flujo normal de la aplicación.
El uso de excepciones, simplifica el flujo principal
de ejecución del código, a diferencia de lo que
ocurren en lenguajes como C, donde la lógica de
manejo de excepciones está muy mezclada en el
código principal
A3F
Pasos en el manejo de excepciones
Dado un bloque de código que puede lanzar una
excepción, debemos:
Atrapar la excepción
Manejar de la excepción
(registro, reintento, acción alternativa)
Finalizar la acción en curso*
A3F
Atrapar una excepción
"La division por cero produce una exception del tipo ZeroDivide que
deriva de Error. Error es una clase hermana de Abort, por lo cual al
ejecutar el siguiente bloque se lanzará una excepción que no será
atrapada"
[ 1/0] on: Abort do: [:ex | Transcript show: ex].
"Si por el contrario esperamos atrapar un excepción del tipo
ZeroDivide, Error o Excepcion, la excepción será manejada
imprimiendo la misma en el transcript"
[ 1/0] on: Error do: [:ex | Transcript show: ex].
A3F
Manejar una excepción
"devolver una valor al manejar la excepción"
|valor|
valor := [1/0] on: Error do: [:ex | ex return: 0].
Transcript show: valor.
^valor
"reintentar"
divisor := 0.
[resultado := 5/divisor]
on: Exception do: [:ex | divisor :=divisor+1. ex retry.]
A3F
Finalizar la acción en curso
"asegurar una accion ante una Excepcion"
[archivo := File openFile('myfile'). ''hacer algo con el archivo"]
ensure:[ archivo cerrar]
A3F
try
{
Excepciones en la familia C
"aquí va el código que puede lanzar una excepción”
}
catch (IndexOutOfRangeExcepcion ex)
{
"Este código solo se ejecutará si salta una excepción del tipo
especificado o descendiente”
}
finally
{
"Este código se ejecutará SIEMPRE, haya o no excepción”
}
A3F
Recursos
●
Apunte de excepciones en Pharo:
https://gforge.inria.fr/frs/download.php/26600/PBE2-Exceptions-2010-03-02.pdf
A3F
¿Preguntas?
Material disponible en site de la materia
A3F
Descargar