La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 1 Chapter 8 Excepciones y afirmaciones o invariantes.

Presentaciones similares


Presentación del tema: "©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 1 Chapter 8 Excepciones y afirmaciones o invariantes."— Transcripción de la presentación:

1 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 1 Chapter 8 Excepciones y afirmaciones o invariantes (Exceptions and Assertions)

2 Objetivos –Mejorar la confiabilidad del código incorporando –Escribir métodos para propagar excepciones. –Implementar los bloques try-catch para atrapar y manejar las excepciones. –Escribir clases de excepción programadas. –Diferenciar las excepciones de tiempo de compilación y en tiempo de corrida

3 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 3 Definición Cdo un programa viola las restricciones semánticas del lenguaje, se produce un error y la maq virtual comunica este hecho al programa mediante una excepción. Muchas clases de errores pueden provocar una excepción, desbordamiento de mem, disco estropeado, intento de dividir por 0, acceder a un vector fuera de los límites. Una excepción es un evento que se produce durante la ejecución de un programa, que interrumpe el flujo normal de las instrucciones del mismo.

4 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 4 Se atrapa la excepción si una vez lanzada se interrumpe el flujo normal de ejecución y se ejecuta la rutina de manejo de excepciones. Cdo se crea una excepción la JVM recorre la pila de llamadas de métodos en busca de alguno que sea capaz de tratar la clase de expepción lanzada. Si ninguno de los mét de la pila pueden la JVM muestra un mensaje de error y termina el programa. El uso de excepciones permite separar el código regular del manejo de las excepciones, propagar los errores al método invocante, agrupar los errores por tipo.

5 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 5 Manejo de las excepciones Cuando se produce un error dentro de un método, éste crea un objeto exception Este contine la info sobre el error, tipo y el estado del programa cuando ocurrió. Lanzar una excepción es crear un objeto exception, tambien se puede lanzar explícitamente mediante la instrucción throw Despues que el método crea la excepción, el sistema busca si hay una forma de manejarla. La búsqueda se realiza en la pila de llamadas que se realizaron hasta llegar al método que lanzó la excepción (call stack)

6 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 6 call stack y búsqueda del manejador

7 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 7 Ej. Excepciones no capturadas String inputStr; int age; inputStr = JOptionPane.showInputDialog(null, "Age:"); age = Integer.parseInt(inputStr); java.lang.NumberFormatException: ten at java.lang.Integer.parseInt(Integer.java:405) at java.lang.Integer.parseInt(Integer.java:454) at Ch8Sample1.main(Ch8Sample1.java:20) Mensaje de Error ingreso inválido ¿Que ocurre si el usuario ingresa un valor no numérico?

8 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 8 Excepción atrapada inputStr = JOptionPane.showInputDialog(null, "Age:"); try { age = Integer.parseInt(inputStr); } catch (NumberFormatException e){ //tipo de excepcion que se captura JOptionPane.showMessageDialog(null, "’" + inputStr + "‘ no es válida\n" + “ingrese sólo dígitos"); } trycatch

9 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 9 Flujo de control try-catch

10 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 10 Obteniendo Información Hay dos métodos que podemos llamar para obtener información sobre una excepción: –getMessage –printStackTrace try {... } catch (NumberFormatException e){ System.out.println(e.getMessage()); System.out.println(e.printStackTrace()); }

11 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 11 Uso de ciclos para ingreso de inf while (true){ inputStr = JOptionPane.showInputDialog(null, prompt); try { age=Integer.parseInt(inputStr); return age; } catch (NumberFormatException e) { JOptionPane.showMessageDialog (null, “ valor ingresado “ + inputStr + “es enválido /n” + “Sólo ingrese nros”); }

12 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 12 Múltiples bloques catch Una sentencia try-catch puede incluir varios bloques de captura, uno para c/ tipo de excepción. try {... age = Integer.parseInt(inputStr);... val = cal.get(id); //cal is a GregorianCalendar... } catch (NumberFormatException e){... } catch (ArrayIndexOutOfBoundsException e){... }

13 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 13 Múltiples atrapadores while (true){ inputStr = JOptionPane.showInputDialog(null, prompt); try { age=Integer.parseInt(inputStr); if (age < 0) { throw new Exception (“No ingrese valores negativos” ); } return age; } catch (NumberFormatException e) { JOptionPane.showMessageDialog (null, “ valor ingresado “ + inputStr + “es inválido /n” + “Sólo ingrese nros”); } catch (Exception e){ JOptionPane.showMessageDialog (null, “Error: “ + e.getMessage()); }

14 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 14 Flujo de control con Múltiples catch

15 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 15 El Bloque finally Hay situaciones en las cuales necesitamos tomar ciertas acciones sin importar si se produce una excepción o no. Las sentencias que deben ejecutarse siempre se ponen en el bloque final. Ej liberar recursos, arch, etc

16 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 16 Multiples atrapadores - Se puede crear una excepción usando la sentencia throw sintaxis : throw dde objet debe se un objeto de la clase Throwable o subclase de la misma. -Cdo creamos la instancia de la clase Exception le pasamos una cadena que describe el error -La excepción lanzada es atrapada por su correspondiente catch -La lista de los atrapadores de excepción deben ir de lo particular a lo genérico pues sólo se ejecuta el primer catch

17 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 17 Fuljo de control try-catch-finally

18 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 18 Propagación de Excepciones En vez de capturar una excepción a través de una sentencia try-catch statement, podemos propagarla hacia el método llamador. En este caso la cabecera del método debe incluir la palabra reservada throws. public int getAge( ) throws NumberFormatException {... int age = Integer.parseInt(inputStr);... return age; }

19 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 19 Propagando Excepciones Podemos escribir un método que propague la excepción directamente Para crear excepciones, def por el usuario, se usa throw para crear una nueva instancia de la excepción. La cabecera del método debe incluir la palabra throws. public void doWork(int num) throws Exception {... if (num != val) throw new Exception("Invalid val");... }

20 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 20 Método lanzador de excepciones Cuando un método puede propagar una excepción, directa o indirectamente, se llama lanzador de excepción Cada excepción lanzada puede ser de uno de los dos tipos, - captada (catcher) - propagada

21 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 21 Tipos de lanzadores de Excepciones Un atrapador de excepciones es un lanzador de excepciones que incluye un bloque catch que maneja la excepción lanzada, es decir la captura.. Un propagador de excepciones no contine ningún bloque cath que coincida con esa excepción Un método puede atrapar unas excepciones y propagar otras.

22 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 22 Ej de secuencia de llamados Nota: output == System.out

23 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 23 Tipos de Excepciones Todos los errores lanzados son casos de la clase Throwable o de sus subclases Los errores serios son representados por instancias de la clase Error o de sus subclasses, fallo de sistema en general no se pueden manejar, fin de conexión, etc. Las excepciones que las aplicaciones pueden manejar se representan con instancias de la clase Exception o por subclases de la misma

24 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 24 Como emplear excepciones ej de Fraction Recordemos el método para obtener el denom de la clase Fraction, este termina abruptamente la ejecución. public void set Denominator (int denom){ if (denom == 0){ System.err.println(“Error fatal”); System.exit(1); } denominator = denom; }

25 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 25 Empleando excepciones en setDenominator de Fraction public void setDenominator (int denom) throws IllegalArgumentException { if (denom == 0) { throw new IllegalArgumentException( “Denominador no puede ser cero”); } denominator = denom; }

26 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 26 Jerarquía de Throwable Hay más de 60 clases in la jerarquía

27 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 27 Checked vs. Runtime Hay dos tipos de excepciones: –Verificadas, se verifican en tiempo de compilación –No Verificadas: Todas las demás, se detectan sólo al momento de ejecutarse el programa

28 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 28 Diferentes Reglas de Manejo Cuando llamamos a un método que puede lanzar una excepción en tiempo de compilación se debe manejar o progagar : –Usar una sentencia try-catch y poner la llamada en el bloque try block, o –Modificar la cabecera del método para incluir la cláusula throws apropiada Cuando llamamos a un método que puede lanzar una excepción en tiempo de ejecución, es opcional el uso de la sentencia try-catch o modificar el método para o incluir la cláusula throws.

29 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 29 Manejo de excepciones en tiempo de compilación (Checked Exceptions) Manejar Propagar

30 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 30 Manejando Excepciones en tiempo de ejecución

31 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 31 Excepciones definidas por el programador Se puede usar el método getMessage de las clases estándard para obtener el mensaje de error Definiendo nuestras propias excepciones se puede obtener más información –Ej podemos definir la excepción FueraDeStock (OutOfStock) e incluir información tal como cuando items hay que ordenar ExcepcionIngresoEdad (AgeInputException) se define como una subclase de Exception e incluye métodos públicos para acceder a: limite máximo y mínimo y la edad ingresada por el usuario

32 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 32 Excepciones declaradas por el usuario Ej AgeInputVer4.java le permite al cliente que usará una clase especificar los limites AgeInputVer4 input = new AgeInputVer4 (10,20); El constructor por defecto podria poner los limites inferior y superior a 0, 99 Cómo responde getAge cuando detecta un ingreso por fuera del rango? En vez de capturarlo deberia propagarlo al método llamador. La captura del error por ingreso de NumberFormatException aun se debe manejar pues no depende del uso que el cliente hace de la clase

33 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 33 Ej excepción pasada al cliente getAge public int getAge (String prompt) throws Exception { String inputStr; int age; while (true) { inputStr = JOptionPane.showInputDialog(null, prompt); try { age = Integer.parseInt (inputStr); if (age upperBound) { throw new Exception (“Ingreso fuera de los lim”); } // excepcion pasada a la clase cliente, no atrapada return age; } cath (NumberFormatException e){ JOptionPane.showMessageDialog( null, “ingreso inválido, ingrese sólo digitos” ); } } }

34 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 34 Excepciones definidas por el programador Para proveer a la clase cliente de información útil cuando se produce una excepción, definir una nueva clase excepción. Hacer que la misma sea subclase de la clase Exception. Ej. Definir una clase AgeInputException como subclase de la clase Exception. Agregemos la infomación útil para el usuario, límite superior, lim inferior, valor ingresado, además del mensaje. Definir métodos públicos para acceder a sus valores. La nueva clase será igual a la anterior con la diferencia que el método getAge dispara una excepción AgeInputException.

35 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 35 Resumen Un prog puede usar excepciones para indicar la ocurrencia de un error Para propagar una excepción se usa throws y un objeto descendiente de Throwable para informar sobre la excepción que se ha producido. Un método puede propagar o atrapar una excepción. Las excepciones verificadas (compilación) deben incluir una cláusula throws Un programa atrapa excepciones empleando try catch finally. El bloque try contiene el código que puede generar una excepción. El catch el código que maneja una excepción en particular. Un try debe tener al menos un catch o un finally y puede tener varios catch. La clase de objeto excepción indica el tipo de excepción lanzada. El objeto puede contener infomación adicional sobre el error, incluyendo mensajes de error.

36 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 36 Afirmaciones La sintáxis para una afirmación (assert) es assert ; donde representa una condición que debe ser verdadera si el código está trabajando correctamente. Si la expresión es falsa, un error AssertionError ( subclase de Error) es lanzada.

37 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 37 Ej. Uso #1 public double deposit(double amount) { double oldBalance = balance; balance += amount; assert balance > oldBalance; } public double withdraw(double amount) { double oldBalance = balance; balance -= amount; assert balance < oldBalance; }

38 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 38 Segunda forma La sentencia tambien tomar la forma: assert : ;

39 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 39 Ej Uso #2 public double deposit(double amount) { double oldBalance = balance; balance += amount; assert balance > oldBalance : "Serious Error – balance did not " + " increase after deposit"; }

40 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 40 Compilando Programas con Afirmaciones Assertions Antes de Java 2 SDK 1.4, la palabra assert es un identificador válido no reservado. Desde la version 1.4 la palabra assert se continua tomando como identificador válido para asegurar. Para habilirar el mecanismo de assertion compilar el código usando –source 1.4 javac –source 1.4

41 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 41 Correr programas con Afirmaciones Para correr programas con afirmaciones habilitadas usar: java –ea Si no se pone la opción –ea option el programa se ejecuta sin verificar las afirmaciones.

42 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 42 Usos de Afirmaciones Precondición verifica que una condición sea verdadera antes de la ejecución de un método. Postcondición verifica que una condición sea verdadera despues de la ejecución de un método. Invariante del flujo de control (control-flow invariant) se utiliza para afirmar que el control debe fluir a casos particulares.

43 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 43 Problema Implementar un Sistema de entrada sin llaves que pide tres datos: el nombre de residente, el número del espacio, y una contraseña. La contraseña es usa secuencia de 4 a 8 caracteres y es única para cada residente Si todo coincide, el sistema desbloquea y se abre la puerta No puede haber dos residentes con el mismo nombre Usaremos las clasesDoor and Dorm. Se pueden usar datos del ejemplo samplelist.dat para el desarrollo

44 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 44 Plan General Tareas: –Debemos primero ver de que son capaces las clases Dorm y Door. –Tambien, para implementar la clase correctamente, necesitamos la especificacion de la clase Resident. Ademas de las clases dadas de ayuda y de la clase Resident, necesitamos diseñar otras clases para esta aplicación. –Como el numero de clases puede aumentar considerablemente, deben planificarse de manera apropiada.

45 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 45 Documento de Diseño ClasePropósito Ch8EntranceMonitorObjeto de control que maneja a los otros objetos del programa. Contiene al método main. DoorClase predefinida que simula la apertura de la puerta (door). DormClase predefinida que mantiene la lista de objetos Resident. ResidentClase que mantiene la informacion de un individuo residente. Debemos escribirla. InputHandlerClase de interfase de usuario para manejar las rutinas de ingreso de informacion. JOptionPaneClase estandard para mostrar mensajes.

46 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 46 Relación de Clases DoorJOptionPane Resident InputFrameCh8EntranceMonitor Dorm (main class)

47 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 47 Pasos de Desarrollo 1.Definir la clase Resident y explorar la clase Dorm. Comenzar con un esqueleto para probar la clase Resident. 2.Definir la clase InputHandler. Modificar la clase de control si es necesario. 3.Finalizar el código haciendo mejoras y limpiando los mensajes no apropiados.

48 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 48 paso 1 Deseño Explorar la clase Dorm Implementar la clase Resident Comenzar con el esqueleto de la clase principal

49 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 49 Paso 1 Código Directory: Chapter8/Step1 Source Files: Resident.java Ch8EntranceMonitor.java Directory: Chapter8/Step1 Source Files: Resident.java Ch8EntranceMonitor.java

50 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 50 Paso 1 prueba El objetivo es verificar que la clase Dorm class se usa correctamente para abrir un archivo y obtener el contenido del mismo Para esto se necesita el arch que contiene la información de los residentes: testfile.dat. –Este contiene informacion de 4 residentes. –Este fue creado ejecutando SampleCreateResidentFile, que puede modificarse para obtener otros datos de prueba

51 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 51 Paso 2 Diseño Diseñar e implementar la clase InputHandler Modificar la clase principal para incorporar las nuevas clases

52 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 52 Paso 2 Código Directory: Chapter8/Step2 Source Files: Resident.java Ch8EntranceMonitor.java InputHandler.java Directory: Chapter8/Step2 Source Files: Resident.java Ch8EntranceMonitor.java InputHandler.java

53 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 53 Paso 2 Prueba El objetivo es verificar el correcto comportamiento de InputHandler. Debemos probar ambos casos éxito y fracaso. –Debemos verificar que la puerta se abre cuando la información ingresada es válida. –y Tambien que muestre un mensaje de error cuando el ingreso es incorrecto. Se puede probar ingresando nombres inexistentes, nombre correcto pero clave errónea, no entrar información, etc

54 ©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 54 Paso 3: Finalizar Posibles extensiones –Mejorar la interfase del usuario haciendo una ventana para ingresar las tres datos de cada residente. –Terminanar el programa cuando se ingresa un código en especial.


Descargar ppt "©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter 8 - 1 Chapter 8 Excepciones y afirmaciones o invariantes."

Presentaciones similares


Anuncios Google