PDF de programación - Parte I: Programación en Ada - 5. Tratamiento de errores

Imágen de pdf Parte I: Programación en Ada - 5. Tratamiento de errores

Parte I: Programación en Ada - 5. Tratamiento de erroresgráfica de visualizaciones

Publicado el 6 de Junio del 2017
749 visualizaciones desde el 6 de Junio del 2017
182,4 KB
13 paginas
Creado hace 15a (16/10/2008)
Parte I: Programación en Ada

UNIVERSIDAD DE CANTABRIA

1. Introducción a los computadores y su programación
2. Elementos básicos del lenguaje
3. Modularidad y programación orientada a objetos
4. Estructuras de datos dinámicas
5. Tratamiento de errores
6. Abstracción de tipos mediante unidades genéricas
7. Entrada/salida con ficheros
8. Herencia y polimorfismo
9. Programación concurrente y de tiempo real

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

1

5.1. Excepciones

UNIVERSIDAD DE CANTABRIA

Representan circunstancias anormales o de error

Ventajas de este mecanismo:
• El código de la parte errónea del programa está separado

del de la parte correcta

• Si se te olvida tratar una excepción, te das cuenta al probar

el programa, porque éste se detiene

• Se puede pasar la gestión del error de un módulo a otro de

modo automático
- agrupar la gestión del error en el lugar más apropiado

Las excepciones pueden ser predefinidas, o definidas por el
usuario

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

2

5.2. Excepciones predefinidas

UNIVERSIDAD DE CANTABRIA

En el lenguaje:
• Constraint_Error : variable fuera de rango, índice de

array fuera de rango, uso de un puntero nulo para acceder
a un dato, etc.

• Program_Error: programa erróneo o mal construido; por
ejemplo, ocurre si una función se acaba sin haber ejecutado
su instrucción return. No se trata.

• Storage_Error: Memoria agotada. Ocurre tras una

operación new, o al llamar a un procedimiento si no hay
espacio en el stack.

• Tasking_Error: Error con las tareas concurrentes

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

3

Excepciones predefinidas
(cont.)

UNIVERSIDAD DE CANTABRIA

En librerías estándares hay muchas

Un par de ellas que son frecuentes:
• Ada.Numerics.Argument_Error: Error con un argumento

de las funciones elementales (p.e., raíz cuadrada de un
número negativo)

• Ada.Text_IO.Data_Error: Formato de dato leído es

incorrecto
- p.e., si se leen letras pero se pretende leer un entero

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

4

5.4. Declaración de
excepciones propias

UNIVERSIDAD DE CANTABRIA

Las excepciones definidas por el usuario se declaran como
variables especiales, del tipo exception

nombre : exception;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

5

5.3. Elevar y tratar
excepciones

UNIVERSIDAD DE CANTABRIA

Las excepciones se elevan, para indicar que ha habido un
error:
• las predefinidas se elevan automáticamente
• las definidas por el usuario se elevan mediante la

instrucción raise:

raise nombre_excepcion;

Una excepción que se ha elevado, se puede tratar
• Esto significa, ejecutar un conjunto de instrucciones

apropiado a la gestión del error que la excepción representa

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

6

5.4. Tratamiento de
excepciones

Se hace dentro de un bloque:

encabezamiento

declaraciones

begin

instrucciones

exception

manejadores

end;

UNIVERSIDAD DE CANTABRIA

Los manejadores gestionan las excepciones que se producen
en las instrucciones del bloque

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

7

Manejadores de excepción

UNIVERSIDAD DE CANTABRIA

Los manejadores se escriben así:

when Nombre_Excepcion =>

instrucciones;

Se pueden agrupar varias excepciones en el mismo
manejador

when excepcion1 | excepcion2 | excepcion3 =>

instrucciones;

Se pueden agrupar todas las excepciones no tratadas en un
único manejador final

when others =>

instrucciones;

• es peligroso ya que puede que el tratamiento no sea

adecuado a la excepción que realmente ocurre

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

8

5.5. Funcionamiento de las
excepciones

UNIVERSIDAD DE CANTABRIA

Cuando una excepción se eleva en un bloque:

a) Si hay un manejador:
• se abandonan las restantes instrucciones del bloque
• se ejecuta el manejador
• se continúa por el siguiente bloque en la secuencia de

programa

b) Si no hay manejador
• se abandona el bloque
• se eleva la misma excepción en el siguiente bloque en la

secuencia del programa

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

9

Funcionamiento de las
excepciones (cont.)

UNIVERSIDAD DE CANTABRIA

El siguiente bloque en la secuencia es:
• para un subprograma, el lugar posterior a la llamada
• para un bloque interno (declare-begin-end) la

instrucción siguiente al end

• para el programa principal, nadie

- el programa se detiene con un mensaje de error

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

10

Creación de bloques para
tratar excepciones

UNIVERSIDAD DE CANTABRIA

Si se desea continuar ejecutando las instrucciones de un
bloque donde se lanza una excepción, es preciso crear un
bloque más interno:

begin

begin -- del bloque interno

instrucciones que pueden fallar

exception

manejadores

end; -- del bloque interno
instrucciones que es preciso ejecutar, aunque haya fallo

end;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

11

5.6. Formas más habituales de
tratar excepciones

UNIVERSIDAD DE CANTABRIA

Dependen de la gravedad del error
• a) ignorar
• b) indicar el error y luego seguir
• c) reintentar la operación (sólo si el error es recuperable)
• d) abandonar la operación

A continuación veremos ejemplos de cada una

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

12

a) Ignorar

UNIVERSIDAD DE CANTABRIA

Escribir una operación, Pon_Mensaje_Doble, que pone un
mensaje en el terminal normal, y en un terminal remoto.

Para el terminal remoto existe el paquete:

package Terminal_Remoto is
procedure Pon_Mensaje (Str : String);
No_Conectado : exception;
end Terminal_Remoto;

Pon_Mensaje eleva No_Conectado si el terminal no está
conectado.

Pon_Mensaje_Doble debe ignorar este error si se produce,
pero siempre escribir el mensaje en el terminal principal

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

13

Implementación

UNIVERSIDAD DE CANTABRIA

with Ada.Text_IO,Terminal_Remoto;
procedure Pon_Mensaje_Doble (Str : String) is
begin
Ada.Text_IO.Put_Line(Str);
Terminal_Remoto.Pon_Mensaje(Str);
exception
when Terminal_Remoto.No_Conectado =>
null; -- para no hacer nada hay que decirlo
end Pon_Mensaje_Doble;

Observar que si no se pone manejador, en lugar de ignorar la
excepción ésta se eleva en el siguiente bloque

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

14

b) Indicar el error

UNIVERSIDAD DE CANTABRIA

Se desea escribir una operación para mostrar los datos de un
alumno, extrayéndolos de una lista

with Alumnos; -- lugar donde se declara el tipo Alumno
package Listas is
type Lista is private;
procedure Busca_Alumno(Al : in out Alumnos.Alumno;
L : in Lista);
procedure Inserta_Alumno(Al : in Alumno; L : in out Lista);
...
No_encontrado : exception;
No_Cabe : exception;
end Listas;

Busca_Alumno busca el alumno por el nombre, y eleva
No_Encontrado si no lo encuentra

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

15

Implementación

UNIVERSIDAD DE CANTABRIA

El tipo Alumno contiene el nombre y datos personales del
alumno

with Ada.Text_IO,Listas,Alumnos;
procedure Muestra_Alumno(L : Lista) is
Al : Alumnos.Alumno;
begin
Leer Al.nombre;
Listas.Busca_Alumno(Al,L);
Muestra datos del alumno;
exception
when Listas.No_Encontrado =>
Ada.Text_IO.Put_Line("Alumno no encontrado");
end Muestra_Alumno;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

16

Comentarios

UNIVERSIDAD DE CANTABRIA

Las instrucciones correspondientes a “mostrar los datos del
alumno” se saltan si hay un error
• eso es lo que se desea

En el código, quedan claramente separadas las instrucciones
normales, de las que corresponden al caso con error

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

17

c) Reintentar

UNIVERSIDAD DE CANTABRIA

Un caso típico de operación que se reintenta es la lectura
errónea de datos del teclado

Se desea escribir un procedimiento para leer un entero
• primero pone un mensaje en la pantalla
• si la lectura falla, se reintenta
• si el entero no está comprendido entre un límite inferior y un

límite superior, se reintenta

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

18

Implementación

UNIVERSIDAD DE CANTABRIA

with Ada.Text_Io,Ada.Integer_Text_Io;
use Ada.Text_Io,Ada.Integer_Text_Io;
procedure Lee_Entero (Mensaje : in String;
Num : out Integer;
Lim_Inf, Lim_Sup : in Integer) is
I : Integer range Lim_Inf..Lim_Sup;
begin
loop
begin
Put(Mensaje);
Get(I);
Skip_Line;
Num:=I;
exit;
exception
when Constraint_Error | Data_Error =>
Skip_Line; Put_Line("Error al leer");
end;
end loop;
end Lee_Entero;

GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS

© Javier Gutiérrez, Michael González

16/oct/08

19

Programa de prueba

UNIVERSIDAD DE CANTABRIA

with Lee_Entero;
procedure Prueba_Entero
  • Links de descarga
http://lwp-l.com/pdf4326

Comentarios de: Parte I: Programación en Ada - 5. Tratamiento de errores (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