MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste...

17
MANEJO DE ERRORES 1

Transcript of MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste...

Page 1: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

MANEJO DE ERRORES

1

Page 2: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador deberá contemplar esos errores.

� Uno de los puntos más vulnerables son los parámetros que se pasan a constructores y métodos de los objetos. Esos parámetros deberán ser comprobados para evitar funcionamientos erróneos.funcionamientos erróneos.

� Cuando se detecta un error hay dos posibles enfoques de notificación:

o Notificar al usuario.o Notificar al objeto cliente. Dos maneras:

� Devolver un valor que indique que se ha producido un error durante el proceso (false, -1, null,..)

� Lanzando una excepciónexcepciónexcepciónexcepción desde el método en el que se ha producido el error.

2

Page 3: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Una excepción es un objeto que representa los detalles de un fallo de un programa.

� Se lanza una excepción para indicar que se ha producido un fallo.

� Para lanzar una excepción usaremos la palabra reservada throw .

� Lo que lanzamos es un objeto de una de las clases de excepción.

if (clave == null){throw new NullPointerException(“Mensaje de error”);

}

3

Page 4: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Un objeto de excepción es siempre una instancia de una clase de una jerarquía de herencia especial.

� Podemos crear nuevos tipos de excepción creando subclases en esta jerarquía.

� Java divide las excepciones en:� Excepciones comprobadas: normalmente

supondrán errores de programación

esperados.

� Excepciones no comprobadas:

generalmente indican un error de

programa.

4

Page 5: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Cuando se lanza una excepción la ejecución del método que la disparó termina inmediatamente.

5

Page 6: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Tipo de excepción cuyo uso no requerirá controles por parte del compilador.

� Mas fáciles de usar dado que el compilador impone muy pocas reglas para su uso.impone muy pocas reglas para su uso.

� Una de las mas comunes son excepciones en tiempo de ejecución. Si dicha excepción no es capturada la aplicación se cerrará como consecuencia del error.

6

Page 7: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Las excepciones comprobadas excepciones comprobadas excepciones comprobadas excepciones comprobadas son un tipo de excepción cuyo uso requiere controles adicionales del compilador.

� Estas excepciones requieren del uso de cláusulas throws y de sentencias try .

� Un método que lanza excepciones deberá agregar en su encabezado un indicador que que lanza un determinado tipo de excepciones, para ello usa la palabra throws:

pubic void grabarEnArchivo(String archivo)throws IOException { ….}

7

Page 8: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Si un método invoca a otro método que lanza excepciones el compilador nos va a obligar a incluir un bloque manejador de excepciones.

� El manejador de excepciones proporciona información y/o código para recuperarse del información y/o código para recuperarse del error.

try {//Sentencias que pueden producir una excepción.

catch (Exception e){//Sentencias de información o recuperación

}

8

Page 9: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Un método puede lanzar excepciones de varios tipos.

� En la definición del método se indicará que tipos de excepciones lanza.tipos de excepciones lanza.

public void proceser()

throws EOException, FileNotFoundException {…}

9

Page 10: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Podemos generar manejadores de excepciones que reaccionen de distinta manera según sea el tipo de excepción.

try {

//Sentencias que pueden producir una excepción.

catch ( EOException e){catch ( EOException e){

//Medidas necesarias para atender una excepción de

//fin de fichero.

} catch (FileNotFoundException e){

//Medidas necesarias para atender una excepción de

//fichero no encontrado.

} catch (Exception e){

//Medidas para atender excepción que no pertenezcan

//a uno de los dos tipos de excepción anteriores.

}

10

Page 11: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� El compilador nos obliga a incluir un manejador de excepciones cuando se llama a un método que puede producir una excepción.

� Si no deseamos que sea el método que estamos escribiendo el que maneje esa excepción podemos propagarla indicando que nuestro método a su vez throws los tipos de excepciones que recibe.

11

Page 12: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Podemos completar nuestro manejador de excepciones con una cláusula finally.

� El código que se incluya en dicho bloque se ejecutará independientemente de que se produzca una excepción o no.produzca una excepción o no.

try {//Sentencias que puede producir una excepción.

} catch (Exception e){//Sentencias que atienden la excepción.

} finally {//Acciones comunes independientemente de que se//produzca excepción o no.

}

12

Page 13: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Podemos definir nuestras propias clases de excepción creando subclases de los tipos de excepción de java.

public class miTipoExcepcion extends Exception {public class miTipoExcepcion extends Exception {

public miTipoExcepcion (String error){

super(error);

}

}

13

Page 14: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� Una aserción es la afirmación de un hecho que debe ser verdadero en la ejecución normal del programa.

� Podemos usar aserciones para establecer � Podemos usar aserciones para establecer explícitamente lo que asumimos y para detectar errores de programación más fácilmente.

assert !claveEnUso(clave);

assert tamañoConsistente;

14

Page 15: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� La serialización de objetos permite leer y escribir objetos y jerarquias de objetos en una única operación.

� Cada objeto involucrado debe ser de una � Cada objeto involucrado debe ser de una clase que implemente el interfaz Serilizable .

15

Page 16: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� El siguiente ejemplo muestra como realizar la seriación de objetos hacia fichero.

FileOutputStream fos = new FileOutputStream(“datos”);

ObjectOutpusStream oos = new ObjectOutputStream(fos);

oos.writeUTF(“Fichero de datos”);

oos.writeObject(new CPersona(nombre,dirección,teléf ono));

oos.Close();

16

Page 17: MANEJO DE ERROREShorarioscentros.uned.es/archivos_publicos/qdocente...MANEJO DE ERRORES 1 Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador

� El siguiente ejemplo muestra como extraer del fichero los objetos guardados previamente.

FileInputSream fin = new FileInputStream (“ datos ”);FileInputSream fin = new FileInputStream (“ datos ”);

ObjectInputStream ois = new ObjectInputStream(fis);

String srt = (String)ois.readUTF();

CPersona persona = (CPersona)ois.readObject();

ois.close();

17