excepciÓn de errores. Índice introducción tipos de excepciones propagación de excepciones y...
TRANSCRIPT
![Page 1: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/1.jpg)
EXCEPCIÓN DE ERRORES
![Page 2: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/2.jpg)
ÍNDICE
• Introducción• Tipos de excepciones• Propagación de excepciones y
Acción posterior a la excepción
![Page 3: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/3.jpg)
1. Introducción al manejo de excepciones
•Excepción
•Manejador de excepción
•Levantamiento de una excepción
![Page 4: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/4.jpg)
Esperando lo inesperado !!
• Ocurrencia de sucesos que se consideran excepcionales.
![Page 5: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/5.jpg)
¿QUÉ ES UNA EXCEPCIÓN?
DEFINICIÓN DE EXCEPCIÓN:
Una excepción es un evento que ocurre durante la ejecución de un programa y que interrumpe el flujo normal de ejecución
![Page 6: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/6.jpg)
Un mecanismo de manejo de excepciones debe cumplir una serie
de requerimientos generales
• Debe ser simple de usar y entender.• Separación del código para el manejo de las
excepciones del código normal• Tratamiento uniforme de las excepciones• Debe permitir que las acciones de
recuperación sean programadas.
![Page 7: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/7.jpg)
¿QUÉ HACER CUANDO OCURRE UNA EXCEPCIÓN?
Se levanta la excepción:
• Detener la ejecución normal del programa.
• Llamar a un subprograma (manejador de excepciones) que debe ejecutar acciones especiales.
![Page 8: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/8.jpg)
Conceptos fundamentales
• MENEJADOR DE EXCEPCIONES
Subprograma encargado de llevar acabo un conjunto de instrucciones que se ejecutan después de una excepción.
• LEVANTAR EXCEPCIÓN
Acción de advertir una excepción en tiempo de ejecución.
![Page 9: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/9.jpg)
2. Tipos de excepciones:
1. Manejo en lenguajes que no contenían implícito el manejo de excepciones
2. Manejo en lenguajes que sí lo contienen y permiten tener:
– Excepciones predefinidas por el lenguaje
(Implícitas)– Excepciones definidas por el programador
(Explícitas)
![Page 10: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/10.jpg)
Ejemplo C:
if (function_call(parameters) == AN_ERROR) {/* Código para el manejo del error */} else {/* Código de retorno normal */};
• Cumple la propiedad de la simplicidad • Permite que las acciones de recuperación
sean programadas • El código no está separado de la actividad
normal
![Page 11: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/11.jpg)
Técnica de Bifurcación forzada:
– Es una técnica de muy bajo nivel que se utiliza en lenguaje ensamblador.
call rutina
jmp error_1
jmp error_2
; Procesamiento normal
• Difícil de comprender y usar
• El código no está separado de la actividad normal
• Permite programar las acciones de recuperación
![Page 12: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/12.jpg)
Procedure sub is
valorprohibido: exception;
--otras declaraciones de sub
Begin
--enunciados para procesamiento de sub
Exception
when valorprohibido =>
--manejador explícito
when Constraint_Error =>
--manejador implícito
when others =>
--manejador para resto excepciones
End; --EJEMPLO DE ADA
![Page 13: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/13.jpg)
Ejemplo Constraint_Error (restricción para sensor de temperatura):
declare
subtype Temperatura is Integer range 0..100;
begin
-- Leer la temperatura del sensor y calcular su valor . . .
exception
-- manejador para Constraint_Error
end;
![Page 14: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/14.jpg)
Algunas veces no es posible determinar la causa de la excepción:
declare
subtype Temperatura is Integer range 0..100;
subtype Presión is Integer range 0..50;
begin
-- Leer el sensor de temperatura
-- Leer el sensor de presión
. . .
exception
-- manejador para Constraint_Error
end;
![Page 15: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/15.jpg)
Solución (aumentar el número de bloques)begin
begin-- Leer el sensor de temperatura y calcular su valor exception-- Manejador para Constraint_Error para la temperaturaend;
begin-- Leer el sensor de presión y calcular su valor exception-- Manejador para Constraint_Error para la presiónend;
exception-- manejador para otras excepciones
end; --Problema: la realización es larga y pesada.
![Page 16: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/16.jpg)
Levantamiento con restricción explícita de una excepción
Una excepción puede ser levantada mediante una operación primitiva del propio lenguaje.
Donde, alternativamnete, el programador podría plantear de manera explícita una restricción (dependerá de si el lenguaje posee algún medio para instrumentarla)
![Page 17: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/17.jpg)
Ejemplo (ADA):
If X=0 then
raise valorprohibido end if;
• El lenguaje contiene un subprograma con el manejador para la excepción planteada.
• La instrucción raise transfiere el control al manejador asociado.
![Page 18: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/18.jpg)
Manejo de errores (ML):
Exception denominadormalo of int;
Fun InnerDivide(a:int, b:int):real=
if b=0 then raise DenominadorMalo(b)
else real(a)/real(b);
Fun Divide(a,b)=InnerDivide(a,b) handle
DenominatorMalo(b) => (print(b); “indeterminación, se usó=0”; 0.0);
La ejecución continua
![Page 19: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/19.jpg)
Ejemplo C++:
Try{
Enunciado1;
...
If condicionmala {throw Nombreexcepción};
Catch Nombreexcepción { instrucción1 ...}
}
La ejecución se detiene
![Page 20: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/20.jpg)
3. Propagación de excepciones y Acción posterior a la excepción
Propagación de excepciones
• Cuando no existe un manejador local para una excepción, se busca un manejador a lo largo de la cadena de invocadores en tiempo de ejecución.
Problema: Una excepción se puede propagar fuera de su ámbito de visibilidad.
Solución: Manejadores por defecto para excepciones desconocidas (catch all).
![Page 21: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/21.jpg)
Propagación de excepciones
Subprog A
Subprog B
Excepción E
E Es manejada por el manejador definido en B, y sino existe se propaga a A. De lo contrario se invoca al manejador Estandar definido por el programa.
![Page 22: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/22.jpg)
¿Qué hacer Después de manejar la excepción?
Cuando el manejador termina se pueden hacer dos cosas:
• Reanudar la ejecución del bloque
• Terminar la ejecución del bloque y devolver el control al punto de invocación.
![Page 23: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/23.jpg)
Modelo de reanudaciónvuelve a ejecutar el procedimiento desde donde se
levanto el error
![Page 24: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/24.jpg)
Modelo de terminaciónse regresa a ejecutar a partir del procedimiento
invocador
![Page 25: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/25.jpg)
Ejemplo (ADA):
package body Pila isMax : constant:= 100;p : array (1..Max) of Integer;top : Integer range 0..Max;
procedure Push( x : Integer) is begintop:= top+1;p(top):= x;end Push;end Pila;
![Page 26: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/26.jpg)
Si creamos un procedimiento llamado Principal que invoque a Push cuando la pila esté llena, el incremento de top producirá Constraint_Error. Ya que Push no maneja excepciones, la excepción se propagará al contexto del invocante.
¿Podemos asegurar que cuando se levante Constraint_Error en Principal es siempre debido a un desbordamiento de pila?
![Page 27: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/27.jpg)
Una mejor forma:
![Page 28: EXCEPCIÓN DE ERRORES. ÍNDICE Introducción Tipos de excepciones Propagación de excepciones y Acción posterior a la excepción](https://reader033.vdocuments.pub/reader033/viewer/2022061301/54d4c6e8497959c9288b47ba/html5/thumbnails/28.jpg)
FIN DE MANEJO DE EXCEPCIONES