Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Excepciones
Excepciones
Programación
Gestión de
Excepciones
Opera
r os n o cio
pa r á met para e nes no váli
Valores de l problema l tipo d
de d at a s
acordes a o
Cómo actuar ante una posible
situación excepcional?
Ignorarla Tomar
c i ó n precauciones
r m ina a
T e b r up t Conozco cuales son las
a precondiciones de una
operación y verifico
previamente cumplirlas
Ejecutar y antes de utilizarlas
comprobar
Comprobación mediante Meca
parámetros de error, propiedades espe nismos
del objeto, valores de retorno (a ciale
gesti s de
cargo del programador) o mediante
variables globales definidas por el exce ón de
pcion
LP para manejo de errores es
Lo más
conveniente ?
Gestión de excepciones: Objetivos
Tratar de recuperarse de los errores
– Datos erróneos: volver a preguntar.
– Archivo no encontrado: preguntar por su ubicación.
– Invocar la excepción para ser manejada por la autoridad superior.
Provocar una salida ordenada si no es posible
recuperarse
– Salida ordenada: liberando recursos, memoria, …
– Termina, pero primero imprime una ayuda en el mensaje de error.
Código más limpio
– Tratamiento de errores separado de la lógica de la aplicación.
Gestión de excepciones
Ocurre una
falla
Disparo de
excepción
no Existe si
manejador? ¿Dónde continúa?
Terminación
abrupta
Modos de manejo
P0 P1 P2
Call P1 Call P2 Se produce la
... Raise E1
... ... excepción
....
Manejador de E1
Reasunción
P0 P1 P2
Call P1 Call P2 ... Raise E1 Se produce la
... ... .... excepción
Manejador de E1
Terminación
....
Tope(dato,P);
....
exception
when Pila_Vacia =>
Text_IO.Put_Line ("Error !!!. La Pila esta Vacia ");
when others =>
Text_IO.Put_Line (“Otros errores!!!");
end;
Gestión de excepciones en C++
Asocia un manejador a un bloque específico, no
necesariamente el cuerpo completo de la operación.
– A ese bloque, se le pueden asociar distintos manejadores de
acuerdo a las distintas excepciones que se pueden generar.
Utiliza el criterio de Terminación.
Mecanismo de manejo de excepciones multinivel.
Permite disparar excepciones definidas por el
programador con la sentencia throw
throw except1;
Las excepciones no requieren una declaración especial.
Pueden ser de cualquier tipo de dato (no necesariamente
objetos) y pueden tener información asociada.
Gestión de excepciones en C++
El manejador se relaciona con las sentencias por medio
de los bloques try-catch
try {
... // sentencias sobre las se quiere controlar las excepciones
}
catch(Except1 e) {...} // manejador correspondiente a Except1
catch(Help msg) {
// manejador correspondiente a un tipo enumerado Help
switch (msg){
case MSG1: ... // atención de este tipo de excepción
...
case MSGn: ... // atención de este tipo de excepción
}
}
Gestión de excepciones en Java
Muy similar a C++
– Asocia un manejador a un bloque específico, no necesariamente
el cuerpo completo de la operación.
– A ese bloque, se le pueden asociar distintos manejadores de
acuerdo a las distintas excepciones que se pueden generar.
– Utiliza el criterio de Terminación.
– Mecanismo de manejo de excepciones multinivel.
– Permite disparar excepciones definidas por el programador con la
sentencia throw
– El manejador se relaciona con las sentencias por medio de los
bloques try-catch
Gestión de excepciones en Java
Diferencias con C++
– Las excepciones siempre son objetos y se organizan
jerárquicamente.
– Todas las excepciones que pueden ser lanzadas explícitamente
deben ser listadas en la cabecera de la rutina con la palabra
reservada throws
void foo() throws Help;
// foo no tiene manejador para la excepción Help
– Los clientes de estas rutinas deben poder reaccionar
apropiadamente:
Capturando la excepción y atendiéndola (bloque try-catch)
Propagando la excepción: declarando en su cabecera las excepciones
no atendidas con la cláusula throws.
– El manejador siempre recibe como parámetro el objeto de la clase
de Excepción ocurrida. Este objeto tiene toda la información
asociada.