Programación Orientada a Objetos. Java: Excepciones



Documentos relacionados
Programación Orientada a Objetos. Java: Excepciones

Uso de excepciones en Java

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones

Introducción - por qué usarlas?(1)

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

8. Sentencia return y métodos

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

Tema 14: Excepciones

Introducción al lenguaje Java

Modelo de Objetos Distribuidos

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Pruebas de unidad con JUnit

TEMA 5. EXCEPCIONES EN JAVA DEFINICIÓN DE EXCEPCIONES EN PROGRAMACIÓN TIPOS DE EXCEPCIONES / ERRORES Y CÓMO TRATARLOS

Repaso de las características más importantes de la programación Java y su adaptación a Android

Primer Parcial Septiembre 5 de 2009

Elementos léxicos del lenguaje de programación Java

2. Estructura de un programa en Java

Programación Orientada a Objetos con Java

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Programación orientada a objetos

Práctica 2: Java Remote Method Invocation (RMI)

Curso de Java POO: Programación orientada a objetos

Manual del Protocolo XML-RPC de Mensajería Negocios

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

11. Algunas clases estándar de Java (II)

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Examen de Prácticas de Programación Ingeniería Informática

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción al lenguaje de especificación JML

Tema 2. El lenguaje de programación Java (Parte 1)

Modulo 1 El lenguaje Java

Java en 2 horas. Rodrigo Santamaría

Clases y Objetos. Informática II Ingeniería Electrónica

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

FACULTAD DE INGENIERÍA

Programación Orientada a Objetos en Java

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Capitulo 3. Test Driven Development

Caso práctico Alquiler de películas en un vídeo-club

Ejercicios - Persistencia en Android: ficheros y SQLite

Desarrollo de Servicios Web con JBuilder

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Manejo de Excepciones

15. Parámetros o argumentos

Parte I: Programación en un lenguaje orientado a objetos

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Un breve resumen del lenguaje Java

Tema 3. Test Driven Development

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Universidad de Cantabria

FACULTAD DE INGENIERÍA

EJEMPLO DE PRUEBAS UNITARIAS Y DE INTEGRACIÓN.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

MANUAL COPIAS DE SEGURIDAD

9. Objetos y clases Clases

Objetivo de aprendizaje del tema

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

Concurrencia. Primitivas IPC con bloqueo

CONCEPTOS BASICOS DEL LENGUAJE JAVA

JAVA PARA PRINCIPIANTES

RMI [Remote Method Invocation]

Multitarea en Java. Rafa Caballero - UCM

El lenguaje de programación Java

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Programación en Java. Programación en OO

Técnicas Avanzadas de Testing Automatizado

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Benemérita Universidad Autónoma del Estado de Puebla

Java Inicial (20 horas)

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Introducción a la Programación Orientada a Objetos

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Aquí se declaran los. Aquí se declaran los métodos de la clase. *Atributos de la clase

Universidad ORT - Arquitectura de Software. Requisitos

Java: control de excepciones

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Parsear HTML con htmlparser para Android Guillem Pérez

SINAUTO. (Captura Requirimientos) GRUPO 03

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

SOLUCION EXAMEN junio 2006

(volver a Tabla de Contenidos)

Programación Orientada a Objetos en Java

ESPOCH ESCUELA DE MEDICINA HERNANDEZ MAYRA FORMULAS Y DUNCIONES BASICAS ESPOCH

ALGORITMICA Y PROGRAMACION POR OBJETOS I

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

Transcripción:

Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey LIDIA Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Índice 1. Introducción 2. Clases de excepciones 3. Excepciones personalizadas 4. La construcción try catch 5. Aserciones 6. Conclusiones finales Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 2

Solución tradicional Excepciones Introducción La solución tradicional consistía en que los métodos devolvieran un valor en el que indicaran si en su ejecución se había producido alguna incidencia que pudiera dar lugar a un error en el futuro. Por ejemplo la función fopen del C se utiliza para abrir un fichero en el disco. Si este fichero no puede ser abierto la función devuelve el valor null. Desventajas de la solución tradicional El encargado de llamar a la función debe acordarse de recoger el valor de retorno. El código puede convertirse en una sucesión de comprobaciones de situaciones erróneas. El encargado de llamar a la función puede no saber tratar el error y necesite pasárselo a métodos de niveles superiores. Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 3

Introducción Ventajas de las excepciones Si no se quiere las excepciones no pueden ser obviadas El lenguaje provee de construcciones del tipo try - catch - finally que facilitan la escritura del código en presencia de excepciones y evita tener que incluir sentencias condicionales cada vez que se llama a un método que puede generar una excepción Los métodos que no sepan cómo tratar una excepción pueden pasarla a niveles superiores a través de la cláusula throws Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 4

Introducción Piscina sencilla class Piscina private int nivel; public final int MAX_NIVEL; public Piscina(int max) if (max<0) max=0; MAX_NIVEL=max; public int getnivel() return nivel; public void vaciar(int cantidad) nivel=nivel-cantidad; public void llenar(int cantidad) nivel=nivel+cantidad; Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 5

Piscina con excepciones Excepciones Introducción class Piscina private int nivel; public final int MAX_NIVEL; public Piscina(int max) if (max<0) max=0; MAX_NIVEL=max; public int getnivel() return nivel; public void vaciar(int cantidad) throws Exception if (nivel-cantidad < 0) throw new Exception(); else nivel=nivel-cantidad; public void llenar(int cantidad) throws Exception if (nivel+cantidad > MAX_NIVEL) throw new Exception(); else nivel=nivel+cantidad; Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 6

Clases de Excepciones Throwable Error Exception LinkageError VirtualMachineError CloneNotSupportedException PrinterException RuntimeException IOException ArithmeticException NullPointerException ArrayIndexOutOfBoundsException Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 7

Características generales Excepciones Clases de Excepciones Las clases predefinidas están en el paquete java.lang Las clases personalizadas pueden estar en cualquier paquete Throwable Describe la funcionalidad básica de todo aquello que se puede lanzar en forma de excepción. Dos constructores: uno sin parámetros y otro en el que se le puede incluir una cadena de texto que describa el error producido Error Destinada a representar problemas graves o condiciones anormales que no deberían ocurrir normalmente por lo que no es necesario que las aplicaciones se ocupen de gestionarlos Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 8

Exception Excepciones Clases de Excepciones Es la clase base de aquellas excepciones que puede lanzar un programa, por lo que es la clase que más interesa al programador. Tanto Exception como sus subclases (sin incluir RuntimeException) son excepciones comprobadas, en el sentido de que el compilador comprueba que si se lanza una excepción en un método esta debe ser capturada por el propio método o incluida en su cláusula throws. RuntimeException Junto con sus subclases representan excepciones en tiempo de ejecución que no necesitan ser capturadas obligatoriamente, por lo tanto se trata de excepciones no comprobadas. Las RuntimeException pueden ocurrir en cualquier parte de un programa y, normalmente, de forma muy numerosa. Por ese motivo el coste de comprobar obligatoriamente si ha ocurrido una RuntimeException es mayor que el beneficio que se produce por dicha captura obligatoria. De esta forma Java permite que la captura de estas excepciones sea algo opcional. Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 9

Excepciones personalizadas class PiscinaNivelException extends Exception int nivel; public PiscinaNivelException (String descripcion, int valor) super (descripcion); nivel=valor; class Piscina private int nivel; public final int MAX_NIVEL; public Piscina(int max) if (max<0) max=0; MAX_NIVEL=max; public int getnivel() return nivel; public void vaciar(int cantidad) throws PiscinaNivelException if (nivel-cantidad < 0) throw new PiscinaNivelException("Vaciado excesivo", nivel-cantidad); else nivel=nivel-cantidad; public void llenar(int cantidad) throws PiscinaNivelException if (nivel+cantidad > MAX_NIVEL) throw new PiscinaNivelException("Llenado excesivo", nivel+cantidad); else nivel=nivel+cantidad; Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 10

La construcción try - catch Captura de excepciones con try - catch class PiscinaCliente public static void operacionespiscina(piscina P) try for (int i=1;i<=3;i++) P.llenar((int)(Math.random()*100)); System.out.println ("llenado..." + P.getNivel()); P.vaciar((int)(Math.random()*100)); System.out.println ("vaciado..." + P.getNivel()); catch (PiscinaNivelException e) System.out.println(e.toString() + ' ' + e.nivel); System.out.println("El nivel de la piscina es..." + P.getNivel()); public static void main (String [] args) Piscina P = new Piscina(100); operacionespiscina(p); Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 11

La construcción try - catch Múltiples sentencias catch try... catch (Excepcion_1 identificador_1)... catch (Excepcion_2 identificador_2)... finally... Ejemplo de mala utilización try throw PiscinaNivelException; catch (Exception e) // Captura Exception y PiscinaNivelException catch (PiscinaNivelException e) // Este código nunca se ejecuta Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 12

La construcción try - catch throws como alternativa al try - catch class PiscinaCliente public static void operacionespiscina(piscina P) throws PiscinaNivelException for (int i=1;i<=3;i++) P.llenar((int)(Math.random()*100)); System.out.println ("llenado..." + P.getNivel()); P.vaciar((int)(Math.random()*100)); System.out.println ("vaciado..." + P.getNivel()); System.out.println("El nivel de la piscina es..." + P.getNivel()); public static void main (String [] args) Piscina P = new Piscina(100); try operacionespiscina(p); catch (PiscinaNivelException e) System.out.println(e.toString() + ' ' + e.nivel); Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 13

La construcción try - catch throws y la sobreescritura PiscinaCliente + operacionespiscina(p: Piscina): void + main(args: String[*]): void Captura PiscinaNivelException Piscina - nivel: int + MAX_NIVEL: int leaf + Piscina(max: int) constructor + getnivel():int + vaciar(cantidad: int): void + llenar (cantidad: int): void Lanzan PiscinaNivelException PiscinaSubclase No pueden lanzar una excepción que no sea PiscinaNivelException o alguna de sus subclases + vaciar(cantidad: int): void + llenar (cantidad: int): void Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 14

Aserciones Excepciones Aserciones Comprobaciones introducidas en el código fuente para verificar precondiciones, invariantes de bucle, postcondiciones, etc. Formato assert expresión_booleana; assert expresión_booleana : expresión_2; Funcionamiento La expresión booleana se evalúa y en caso de ser falsa se lanza la excepción AssertException expresión_2 es una expresión que devuelve un valor (no puede devolver void). Este valor es convertido a String y pasado al constructor de AssertException para detallar más en profundidad la aserción Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 15

Ventajas Excepciones Aserciones Introducir aserciones en nuestro código facilita la detección de errores Además las aserciones pueden deshabilitarse para que, una vez finalizado el periodo de pruebas, no afecten al rendimiento del sistema Recomendación En las precondiciones de métodos se suele recomendar no usar aserciones sino excepciones (NullPointerException, IllegalArgumentException) porque suelen dar más información que un genérico AssertException Utilización assert es una palabra clave desde la versión 1.4 de Java Por lo que al compilar con el JDK 1.4 es necesario hacer lo siguiente: javac source 1.4 fichero.java (con el JDK 1.5 no es necesario) Al interpretar código java con aserciones hay dos posibilidades java ea fichero (ea enable assertions) activa las aserciones java da fichero (da disable assertions) desactiva las aserciones (es la opción por defecto) Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 16

Aserciones Ejemplo switch(palo) case Palo.ESPADAS:... break; case Palo.COPAS:... break; case Palo.BASTOS:... break; case Palo.OROS:... break; default: assert false : palo; Para más información http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 17

Conclusiones finales Las excepciones comprobadas tiene la característica de que obligas al programador a tenerlas en cuenta, pero lo que generalmente se hacía era capturarlas con cláusulas catch vacías => cuando suceda una excepción el error puede pasar inadvertido. Mas grave aún era ver construcciones que declaran la excepción en la cláusula throws de todos los métodos de la pila de ejecución (incluido el main). Por dicho motivo la gente ha preferido usar las RuntimeException y dejar la posibilidad de capturar o no la excepción al programador (menos seguro pero menos molesto) La norma general es que se restrinja el uso de excepciones a aquellas situaciones erróneas o inesperadas, no utilizarlas para capturar situaciones previsibles (llegamos al final de un fichero de entrada). Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña 18