PDF de programación - Excepciones

Imágen de pdf Excepciones

Excepcionesgráfica de visualizaciones

Publicado el 15 de Octubre del 2018
468 visualizaciones desde el 15 de Octubre del 2018
509,3 KB
63 paginas
Creado hace 17a (06/03/2007)
ditdit

UPM

Excepciones

Juan Antonio de la Puente

DIT/UPM

Transparencias basadas en el capítulo 6 del libro de A. Burns y A. Wellings Real­Time Systems and Programming Languuages, 3ª edición (2001)

Objetivos

u Veremos algunos modelos de tratamiento de excepciones 

en lenguajes de programación

u También veremos cómo utilizar las excepciones para 

realizar sistemas que toleran fallos 

STRL ­  

©2001 Juan Antonio de la Puente

 2

Índice

u Tratamiento de excepciones

– métodos primitivos
– métodos avanzados

u Tratamiento de excepciones en Ada
u Tratamiento de excepciones en Java
u Tratamiento de excepciones en C
u Excepciones y bloques de recuperación

STRL ­  

©2001 Juan Antonio de la Puente

 3

Introducción

Un mecanismo de excepciones debe cumplir una serie de 
requisitos

– ser fácil de entender y de usar
– separación de código normal y código de tratamiento de 

excepciones

– eficiencia (sólo debe haber sobrecoste cuando se trata la 

excepción)

– tratamiento uniforme de excepciones detectadas por el entorno de 

ejecución y por el software de aplicación

– acciones de recuperación programables (no sólo predefinidas)

STRL ­  

©2001 Juan Antonio de la Puente

 4

Excepciones en lenguajes primitivos (1)

u Código de error en el resultado de un subprograma

– Ejemplo: C

if ( function_call (params) != 0){
-- tratamiento de errores
} else {
-- actividad normal
};

– Inconvenientes:

» el código no está separado de la actividad normal
» hay sobrecoste cuando no hay errores
» no se pueden tratar fácilmente los errores del entorno

STRL ­  

©2001 Juan Antonio de la Puente

 5

Excepciones en lenguajes primitivos (2)

u Retorno condicional

– Se usa en lenguaje ensamblador

call ROUTINE
jmp ERROR_1
jmp ERROR_2
; tratamiento normal

– Inconvenientes:

» difícil de usar y entender
» poca abstracción
» difícil de integrar con la detección de errores por el entorno

STRL ­  

©2001 Juan Antonio de la Puente

 6

Excepciones en lenguajes primitivos (3)

u Salto incondicional global 

– Algunos lenguajes permiten saltar a otra parte del programa, fuera 

del módulo donde se realiza el salto

– Hay que combinarlo con un retorno de subprograma anormal

» difícil de usar y entender
» poco abstracto

STRL ­  

©2001 Juan Antonio de la Puente

 7

Ejemplo (RTL/2)

svc data rrerr
label erl; %a label variable %
enddata
proc WhereErrorIsDetected();
...
goto erl;
...
endproc;

proc Caller();
...


endproc;

WhereErrorIsDetected();
...

proc main();
...
restart:
...
erl := restart;
...
Caller();

...
end proc;

STRL ­  

©2001 Juan Antonio de la Puente

 8

Excepciones en lenguajes primitivos (4)

u Variable de procedimiento

– El manejador se pasa como un procedimiento variable

» muy difícil de usar y de mantener
» en C++ se usa una variante de este método para el tratamiento de 

excepciones cuando no hay manejador (funciones por defecto)

STRL ­  

©2001 Juan Antonio de la Puente

 9

Ejemplo (RTL/2)

proc main();
...
erl := fail;
erp := recover;
...
Caller();
...
fail:
...
end proc

svc data rrerr;

proc(int) erp; % erp is a

label erl;

procedure variable %

enddata;

proc recover(int);
...
endproc;

proc WhereErrorIsDetected();
...
if recoverable then erp(n)
else goto erl end;
...
endproc;

proc Caller();
...
WhereErrorIsDetected();
...
endproc;

STRL ­  

©2001 Juan Antonio de la Puente

 10

Excepciones en lenguajes de modernos

u Son elementos de lenguaje que permiten integrar los dos 

tipos de detección de errores
– detección por el entorno de ejecución
– detección por el software de aplicación

u Las excepciones pueden ser

– síncronas

» aparecen inmediatamente cuando un proceso intenta ejecutar una 

operación incorrecta

– asíncronas

» aparecen algún tiempo después, en el proceso que intentó la 

operación errónea o en otro distinto

STRL ­  

©2001 Juan Antonio de la Puente

 11

Clases de excepciones

u Detectadas por el entorno, síncronas

– ejemplos: error en índice de array, división por cero

u Detectadas por la aplicación, síncronas

– ejemplo: error en comprobación de aserción
u Detectadas por el entorno, asíncronas

– ejemplo: avería en dispositivo externo

u Detectadas por la aplicación, asíncronas

– ejemplo: detección de límite de tiempo en una acción de otro 

proceso

Las excepciones asíncronas se suelen llamar señales 
– Las veremos más adelante

STRL ­  

©2001 Juan Antonio de la Puente

 12

Excepciones síncronas

u Las excepciones se pueden declarar de varias formas
– con un nombre específico, de forma similar a una constante
» en este caso hace falta una declaración explícita de todas las 

excepciones
» ejemplo: Ada

– como objetos de un tipo o clase

» no siempre hace falta declaración explícita
» ejemplo: Java

STRL ­  

©2001 Juan Antonio de la Puente

 13

Excepciones en Ada

u En Ada se declaran con un nombre (no son objetos)

package Standard is
...
Constraint_Error : exception;
Program_Error : exception;
Storage_Error : exception;
Tasking_Error : exception;
...
end Standard;

u Estas excepciones están predefinidas
u Las indica el núcleo de ejecución

STRL ­  

©2001 Juan Antonio de la Puente

 14

Excepciones en Java

u Las excepciones son objetos de una clase (Throwable)

– No hace falta declarar los objetos explícitamente
– El código de aplicación o el entorno de ejecución puede tirar 

(throw) una excepción

– El manejador atrapa (catch) la excepción

Debe hacer referencia a la clase o a una superclase

STRL ­  

©2001 Juan Antonio de la Puente

 15

Ámbito de un manejador

u Una misma excepción puede tener varios manejadores en 

un programa

u Cada manejador tiene asociado un ámbito
u Se trata de una región donde, si se produce la excepción, 

se ejecuta el manejador asociado

u En los lenguajes estructurados en bloques, el ámbito de 
un manejador suele ser el bloque donde está declarado

u También puede ser un subprograma

STRL ­  

©2001 Juan Antonio de la Puente

 16

Ámbito de los manejadores en Ada

u Los manejadores se declaran al final de un bloque, que 

constituye el ámbito de los mismos

declare
subtype Temperature is Integer range 0 .. 100;
begin
-- leer sensor y calcular un valor de temperatura
exception
-- manejador de Constraint_Error
end;

u Los procedimientos, funciones, y otras secuencias de 

instrucciones, pueden también definir ámbitos de 
excepciones

STRL ­  

©2001 Juan Antonio de la Puente

 17

Ámbito de los manejadores en Java

u No todos los bloques pueden tener manejadores
u El ámbito de un manejador se indica explícitamente 

mediante un bloque guardado (try­block)

try {
// instrucciones normales
}
catch (excepcion_type E) {
// manejador de excepción
}

STRL ­  

©2001 Juan Antonio de la Puente

 18

Resolución del dominio

declare
subtype Temperature is Integer range 0 .. 100;
subtype Pressure is Integer range 0 .. 50;
subtype Flow is Integer range 0 .. 200;
begin
Read_Temperature_Sensor;
Read_Pressure_Sensor;
Read_Flow_Sensor;
Adjust_Values;
exception
-- manejador de Constraint_Error
end;

u El manejador no puede saber dónde se elevó la excepción

STRL ­  

©2001 Juan Antonio de la Puente

 19

Bloques anidados

declare
...
begin
begin
Read_Temperature_Sensor;
exception
-- manejador de Constraint_Error
end;
begin
Read_Pressure_Sensor;
exception
-- manejador de Constraint_Error
end;
begin
Read_Flow_Sensor;
exception
-- manejador de Constraint_Error
end;
Adjust_values;
exception
-- manejador de Constraint_Error
end;

u Es largo y pesado

STRL ­  

©2001 Juan Antonio de la Puente

 20

Manejadores asociados a instrucciones

declare -- ¡Ojo! No es Ada
...
begin
Read_Temperature_Sensor;
exception -- manejador de Constraint_Error
Read_Pressure_Sensor;
exception -- manejador de Constraint_Error
Read_Flow_Sensor;
exception -- manejador de Constraint_Error
end;
Adjust_values
exception -- manejador de Constraint_Error
end;

u Más compacto, pero código normal y manejadores 

mezclados
– Ejemplo: CHILL

STRL ­  

©2001 Juan Antonio de la Puente

 21

Excepciones con parámetros

u Si se asocia un parámetro a la excepción que indique el 

punto donde se ha elevado, el manejador puede usar esta 
información
– Ada :  procedimientos predefinidos que permiten asociar un 

mensaje a una excepción

– Java : se puede incluir la información en la definición de la clase de 

excepciones

STRL ­  

©2001 Juan Antonio de la Puente

 22

Propagación de excepciones

u Cuando no hay manejador en un bloque se pueden 

hacer varias cosas:
– considerarlo un error de programación

» muy restrictivo
» problemas con procedimientos

– propagar la excepción al punto de invocación

» se busca un manejador en el contexto del punto donde se 

activó el bloque en que se ha producido la excepción

» Una excepción se puede propagar fuera de su ámbito de 

visibilidad

» solución: manejadores por defecto para excepciones 

desconocidas

» si en un proceso o en el programa principal queda sin manejar 

una excepción, aborta

STRL ­  

©2001 Juan Antonio de la Puente

 23

Reanudación y terminación

u 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

u También hay modelos híbridos

STRL ­  

©2001 Juan Antonio de la Puente

 24

Modelo de reanudación

P

1

13

2

12

Q

3

11

7

H r

4

6

8

R

5

raise  r

9

10

STRL ­  

©2001 Juan Antonio de la Puente

 25

Crítica del modelo de reanudación

u Ventajas

– Cuando la excepción se activa asíncronamente, es posible reparar 

el daño y seguir
u Inconvenientes

– Es difícil reparar los errores detectados por el entorno de ejecución

» Ejemplo: desbordamiento aritmético

u puede haber registros con resultados parciale
  • Links de descarga
http://lwp-l.com/pdf13891

Comentarios de: Excepciones (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad