PDF de programación - Prácticas de Programación - Tema 4. Tratamiento de errores

Imágen de pdf Prácticas de Programación - Tema 4. Tratamiento de errores

Prácticas de Programación - Tema 4. Tratamiento de erroresgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.016 visualizaciones desde el 14 de Enero del 2017
245,0 KB
15 paginas
Creado hace 14a (29/03/2010)
1



Prácticas de Programación

Tema 1. Introducción al análisis y diseño de programas
Tema 2. Clases y objetos
Tema 3. Herencia y Polimorfismo
Tema 4. Tratamiento de errores

Tema 5. Aspectos avanzados de los tipos de datos
Tema 6. Modularidad y abstracción: aspectos avanzados
Tema 7. Entrada/salida con ficheros
Tema 8. Verificación y prueba de programas

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

Tema 4. Tratamiento de errores

4.1. Tratamiento de errores por paso de parámetros
4.2. Excepciones
4.3. Bloques de tratamiento excepciones
4.4. Jerarquía de las excepciones
4.5. Lanzar excepciones
4.6. Usar nuestras propias excepciones
4.7. La cláusula finally
4.8. Utilización de excepciones
4.9. Bibliografía

Prácticas de Programación

Tema 4. Tratamiento de errores

parámetros

© M. Aldea y M. González

29/03/10

2

4.1 Tratamiento de errores por paso de

4.1 Tratamiento de errores por paso de parámetros

En los lenguajes de programación más antiguos (C, Fortran, ...)

• Cada método o función retorna un valor

- generalmente un código numérico o un booleano indicando

si había habido error o no, y cuál

Dos inconvenientes:

• el código de chequeo de error aparece por todas partes,

mezclado con el código normal

• en muchos casos el chequeo de error se omite por “pereza” o

desconocimiento
- lleva a situaciones de error que pasan inadvertidas

Prácticas de Programación

© M. Aldea y M. González

29/03/10

3

Tema 4. Tratamiento de errores

4.1 Tratamiento de errores por paso de parámetros

Ejemplo
El método añadeAlumno de una supuesta clase Curso sería:
/** añade un alumno. Retorna false si no se ha
* podido añadir */
public boolean añadeAlumno(Alumno a) {...}
Un fragmento de código que añade dos alumnos sería:
if (!añadeAlumno(a1)) {
error.escribe("Error añadiendo alumno");
return;
}
...
if (!añadeAlumno(a2)) {
error.escribe("Error añadiendo alumno");
return;
}
...

• el tratamiento de los errores hace difícil entender el código

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

4

4.2 Excepciones

4.2 Excepciones
Son un mecanismo especial para gestionar errores

• Permiten separar claramente el tratamiento de errores del

código normal

• Evitan que haya errores que pasen inadvertidos
• Permiten propagar de forma automática los errores desde los

métodos más internos a los más externos

• Permiten agrupar en un lugar común el tratamiento de errores

que ocurren en varios lugares del programa

Las excepciones se pueden elevar (o lanzar):

• automáticamente, cuando el sistema detecta un error
• explícitamente cuando el programador lo establezca
Presentes en lenguajes “modernos” (Java, Ada, C++,...)

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

5

4.2 Excepciones

Ejemplo de elevación automática:

División por cero
import fundamentos.*;
public class DivisionPorCero {
public static void main(String[] args) {
int i, j;
Lectura leer=new Lectura("Enteros");
leer.creaEntrada("i",0);
leer.creaEntrada("j",0);
leer.espera("introduce datos");
i=leer.leeInt("i");
j=leer.leeInt("j");
System.out.println("i/j="+i/j);
System.out.println("Fin");
} // fin main
} // fin DivisionPorCero

cuando j vale 0 se eleva
la excepción
ArithmeticException

cuando se eleva la excepción
esta línea no se ejecuta

Prácticas de Programación

© M. Aldea y M. González

29/03/10

6

Tema 4. Tratamiento de errores

Propagación de excepciones
1. Una línea de código genera o lanza (throw) una excepción
2. El bloque que contiene esa línea de código se aborta en ese

4.2 Excepciones

punto

3. Si el bloque tiene un manejador para esa excepción, el

manejador se ejecuta
• diremos que el bloque ha cogido (catch) la excepción
• la “vida” de la excepción finaliza en este punto

4. Si no tiene manejador, la excepción se propaga al bloque

superior
• que, a su vez, podrá cazar o dejar pasar la excepción

5. Si la excepción alcanza el bloque principal (main) y éste
tampoco coge la excepción, el programa finaliza con un
mensaje de error

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

7

}

}

}

Ejemplo: propagación de excepciones
private static int divide(int a, int b) {

System.out.println("divide: antes de dividir");
int div = a/b;
System.out.println("divide: después de dividir");
return div;

4.2 Excepciones

private static void intermedio() {

System.out.println("intermedio: antes de divide");
int div = divide(2,0);
System.out.println("intermedio: resultado:"+div);

public static void main(String[] args) {

System.out.println("main: antes de intermedio");
intermedio();
System.out.println("main: después de intermedio");

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

8

4.2 Excepciones

Ejemplo: propagación de excepciones (cont.)

La salida generada será:

main: antes de intermedio
intermedio: antes de divide
divide: antes de dividir

java.lang.ArithmeticException: / by zero

at Propaga.divide(Propaga.java:13)
at Propaga.intermedio(Propaga.java:20)
at Propaga.main(Propaga.java:26)

Prácticas de Programación

© M. Aldea y M. González

29/03/10

9

Tema 4. Tratamiento de errores

4.3 Bloques de tratamiento excepciones
La forma general de escribir un bloque en el que se tratan
excepciones es:

4.3 Bloques de tratamiento excepciones

try {

instrucciones;

} catch (ClaseExcepción1 e) {

instrucciones de tratamiento;

} catch (ClaseExcepción2 e) {

instrucciones de tratamiento;

}

Los “catch” se evalúan por orden:

• una excepción se coge en el primer “catch” para esa

excepción o para una de sus superclases

© M. Aldea y M. González

29/03/10

10

Prácticas de Programación

Tema 4. Tratamiento de errores

Ejemplo: propagación con bloque try-catch
En el ejemplo “propagación de excepciones” anterior, añadimos
un bloque try-catch al método intermedio:

4.3 Bloques de tratamiento excepciones

private static void intermedio() {
try {
System.out.println("intermedio: antes de " +
"divide");
int div=divide(2,0);
System.out.println("intermedio: resultado:" +
div);
} catch (ArithmeticException e) {
System.out.println("intermedio: cazada " + e);
}
}

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

11

4.3 Bloques de tratamiento excepciones

Ejemplo: propagación con bloque try-catch (cont.)

La salida por consola que obtenemos ahora es:

main: antes de intermedio
intermedio: antes de divide
divide: antes de dividir
intermedio: cazada ArithmeticException: / by zero
main: después de intermedio

• en este caso la excepción es cazada, por lo que

- el programa NO finaliza de forma abrupta
- NO aparece un mensaje del sistema indicando que se ha

producido una excepción

Prácticas de Programación

© M. Aldea y M. González

29/03/10

12

Tema 4. Tratamiento de errores

4.3 Bloques de tratamiento excepciones

Tratamiento específico
En el ejemplo anterior, el manejador realiza únicamente el
tratamiento de la excepción ArithmeticException
try {
...;
} catch (ArithmeticException e) {
...;
}
Es posible poner un tratamiento común para cualquier excepción
try {
...;
} catch (Exception e) {
...;
}

• es cómodo pero no es recomendable, ya que puede ocurrir un

tratamiento inadecuado para una excepción no prevista

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

13

4.4 Jerarquía de las excepciones

4.4 Jerarquía de las excepciones
Throwable

se pueden

tratar

no es

obligatorio
tratarlas

Exception

Error

no se tratan

RuntimeException

ExceptionUsuario

es

obligatorio
tratarlas

RuntimeExceptionUsuario

También denominadas:
Excepciones comprobadas

También denominadas:
Excepciones no comprobadas

© M. Aldea y M. González

29/03/10

14

Prácticas de Programación

Tema 4. Tratamiento de errores

ArithmeticException

ClassCastException

4.4 Jerarquía de las excepciones

ArrayIndexOutOfBoundsException

Algunas excepciones RuntimeException
También se denominan excepciones no comprobadas
Error aritmético (x/0, ...)
Índice de array fuera de límites
(<0 o >=length)
Intento de convertir a una clase
incorrecta
Argumento ilegal en la llamada a un
método
Indice fuera de límites (p.e., en un
Vector)
Tamaño de array negativo
Uso de una referencia nula
Formato de número incorrecto
Indice usado en un String está fuera
de límites

NegativeArraySizeException

IndexOutOfBoundsException

NullPointerException

NumberFormatException

StringIndexOutOfBounds

IllegalArgumentException

Prácticas de Programación

© M. Aldea y M. González

29/03/10

15

Tema 4. Tratamiento de errores

4.5 Lanzar excepciones

4.5 Lanzar excepciones
Se lanzan con la palabra reservada throw:
throw new ClaseExcepción();
En ocasiones puede ser más conveniente usar el constructor con
un string como parámetro
throw new ClaseExcepción("mensaje");

• que sirve para dar información adicional sobre la causa de la

excepción

Ejemplo:
...
if (clave==null) {
throw new NullPointerException("clave es nula");
}
...

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

16

4.5 Lanzar excepciones

Lanzar la misma excepción
En algunas ocasiones un manejador puede volver a lanzar la
misma excepción:
catch (ClaseExcepción e) {
parte del tratamiento de la excepción;
throw e;
}

• puede ser útil cuando se desea realizar en el manejador parte

del tratamiento de la excepción
- y dejar que el resto del tratamiento le haga el método superior

Prácticas de Programación

Tema 4. Tratamiento de errores

© M. Aldea y M. González

29/03/10

17

4.6 Usar nuestras propias excepciones

o RuntimeException

4.6 Usar nuestras propias excepciones
  • Links de descarga
http://lwp-l.com/pdf981

Comentarios de: Prácticas de Programación - Tema 4. 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