CAPÍTULO 14 MANEJO DE EXCEPCIONES



Documentos relacionados
Programación Orientada a Objetos en C#.NET CAPÍTULO 8 EXCEPCIONES. Ing. Bruno López Takeyas, M.C.

INTRODUCCION A LA PROGRAMACION EN JAVA

Práctica: Creación de un programa C# sencillo

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

Excepciones. Excepciones. Dos tipos de situaciones excepcionales. Excepciones. Dos tipos de situaciones excepcionales. Tipos de excepciones

UD 4 GESTIÓN DE ERRORES. Pedro J. Ponce de León. Versión

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Tema: Introducción al IDE de Microsoft Visual C#.

Columnas

Tema 4. Excepciones en Java

Capítulo 2. Cómo utilizar la ayuda

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Excepciones. Excepciones

COMPILACIÓN CONDICIONAL

Los números naturales

Estructuras de control condicionales

Clase adicional 2. Estructuras básicas de control. Temas

TEMA 8. Excepciones en Java. Curso de Java. Manejo de Excepciones

La sintaxis básica para definir una clase es la que a continuación se muestra:

Curso de Java Introducción a la Programación I

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.

Tema 7: Polimorfismo. Índice

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Las listas son una sucesión de cero o más elementos. Esta es una definición muy simple y que no aclara demasiado en términos informáticos.

Manual para importar ficheros CSV en la aplicación de Comunicación de pagos

Sumar datos con las funciones SUMAR. SI Y SUMAR.SI.CONJUNTO

MANEJO DE EXCEPCIONES en C++ Dr. Oldemar Rodríguez R. Escuela de Informática Universidad Nacional

Excepciones. Una excepción es una situación anómala a la que llega la ejecución de un programa

Guia#9: Punteros en C#.

4.2 COMBINAR CORRESPONDENCIA UTILIZANDO OTROS ORÍ-

Si bien hay gran cantidad de excepciones, todas derivan de la clase Exception, además de las excepciones ya manejadas, se pueden crear propias.

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Introducción Programación Modular y a Métodos: Consideremos el siguiente ejercicio:

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Los delegates no necesitan saber la clase de objeto al cual referencian. Lo que necesitan saber es la definición del método al que referencian.

Ejercicio 1: Realiza las siguientes divisiones por el método tradicional y por Ruffini: a)

Oracle Database 11g: Programación con PL/SQL Nuevo

CORPORACIÓN UNIFICADA NACIONAL DE EDUCACIÓN SUPERIOR FACULTAD DE INGENIERIAS LINEA INFORMÁTICA

Tema: Clases y Objetos en C++. Parte II.

Manual del Usuario de Microsoft Access Consultas - Página 1. Tema IV: Consultas. IV.1. Creación de Consultas

CURSOSO. Aritmética: Númerosnaturalesyenteros. Númerosracionalesyfraciones. MATEMÁTICAS. AntonioF.CostaGonzález

POTENCIAS. MÚLTIPLOS Y DIVISORES. MÁXIMO COMÚN DIVISOR Y MÍNIMO COMÚN MÚLTIPLO.

Manejo de Excepciones

Modulo 11. Clases y Objetos en Java

Definición Es una directiva using que ayuda al compilador a localizar una clase que se usa en la aplicación.

HP LaserJet serie CM1312 MFP Tareas de impresión

Tema 2 Divisibilidad

Práctica 1: Introducción a SPSS 1

HP Color LaserJet serie CP Tareas de impresión

Unidad 1: Números reales.

MATEMÁTICAS 5º PRIMARIA DIVISIBILIDAD: MÚLTIPLOS Y DIVISORES

Objetivos. Introducción

Tema: Estructuras de Selección en C#.

Excepciones e hilos. Acceso a la red - Ejercicios

PRUEBA DE NIVEL DE ACCES

Arreglos Unidimensionales En este tipo de arreglo se hace uso de un índice solamente para hacer referencia a una posición particular del arreglo.

2.2. CREAR Y MODIFICAR CAMPOS.

Java: control de excepciones

Introducción a las sentencias de control

Capítulo 3. Introducción a la programación. Continuar

FRONTPAGE I LECCIÓN N 1

Abrir y cerrar Outlook 2010

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Estructuras de control. Secuencial, condicional y repetitivas.

Microsoft Outlook. Microsoft Outlook

Tema: Estructuras de Selección en C#.

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Ayuda. Mensajes del sistema. Iniciar/Cerrar sesión. Iconos del panel de control

MANUAL: PROBLEMAS CON IMPRESORAS

Uso de excepciones en Java

La herramienta ArtEM: Aritmética Entera y Modular

Estructuras de control repetitivas/iterativas

Bienvenido a JAZZTEL Internet Móvil. Guía de instalación rápida. Módem JAZZTEL (WU-260)

Prof. Dr. Paul Bustamante

EJERCICIOS PRACTICOS CON EL USO DE PSeINT

HP LaserJet serie P3010 Tareas de impresión

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

2. APLICAR FÓRMULAS Y FUNCIONES

Tema 14: Excepciones

Expresión, Operador, Operando, Asignación, Prioridad

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

6 DIBUJAR CON GIMP (1)

DeclarEASE DECLARACIÓN PATRIMONIAL

Práctica 2 Estadística Descriptiva

Presentación. Programación I. Programación Orientada a Objetos. :: Prof. Yeniffer Peña

RELACIONES ACCESS TIPOS DE RELACIONES QUE PODEMOS UTILIZAR

Capítulo 4 Memoria virtual

Transcripción:

CAPÍTULO 14 MANEJO DE EXCEPCIONES Objetivos...2 14.1 Tratamiento de excepciones...2 14.2 Excepciones predefinidas comunes...2 14.3 Bloque Try Catch...3 14.4 Captura de excepciones. Instrucción try...4 14.5 (*)Depuración Just - in-time...5 14.6 Añadir tratamiento de excepciones a un programa C#...6 14.6.1 Ejemplo de programa sin tratamiento de excepción...6 14.6.2 Añadir bloque TRY - CATCH...8 14.7 Prácticas...10

14.2 VISUAL C# FÁCIL C. PALACIOS Y C. PALACIOS OBJETIVOS Asimilar el concepto de excepción. Comprender los problemas generados por la excepciones. Aprender a utilizar el bloque TRY CATCH para tratamiento de las excepciones. Analizar el funcionamiento de la estructura TRY CATCH. Diseñar aplicaciones Windows y de consola de capítulos anteriores introduciendo el tratamiento de excepcioenes. 14.1 TRATAMIENTO DE EXCEPCIONES Una buena aplicación C# debe tener capacidad para enfrentarse a lo inesperado. Por muchas comprobaciones de error que se añadan al código, siempre habrá algo que pueda ir mal. El usuario puede dar una respuesta imprevista a una pregunta, por ejemplo, o tratar de escribir a un archivo en una carpeta que ha sido borrada. Las posibilidades son infinitas. Si se produce un error de tiempo de ejecución en una aplicación C#, el sistema operativo lanza una excepción. Las excepciones se pueden capturar con una combinación de las instrucciones try y catch, como se explica más adelante. Si alguna de las instrucciones en la parte try de la aplicación hace que se produzca una excepción, la ejecución pasará al bloque catch. 14.2 EXCEPCIONES PREDEFINIDAS COMUNES Hay predefinidas múltiples excepciones que se corresponden con los errores más comunes que pueden surgir durante la ejecución de una aplicación. En la siguiente tabla recogen algunas:

C. PALACIOS Y E. PALACIOS CAPÍTULO 14: MANEJO DE EXCEPCIONES 14.3 Tipo de la excepción Causa de que se produzca la excepción ArgumentException ArgumentNullException Pasado argumento no válido (base de excepciones de argumentos). Pasado argumento nulo. ArgumentOutOfRangeException Pasado argumento fuera de rango. ArrayTypeMistmatchException COMException DivideByZeroException IndexOutOfRangeException InvalidCastException InvalidOperationException InteropException NullReferenceException OverflowException OutOfMemoryException SEHException StackOverflowException TypeInizializationException 14.3 BLOQUE TRY CATCH Asignación a tabla de elemento que no es de su tipo. Excepción de objeto COM. División por cero. Índice de acceso a elemento de tabla fuera del rango válido (menor que cero o mayor que el tamaño de la tabla). Conversión explícita entre tipos no válida. Operación inválida en estado actual del objeto. Base de excepciones producidas en comunicación con código inseguro. Acceso a miembro de objeto que vale null. Desbordamiento dentro de contexto donde se ha de comprobar los desbordamientos (expresión constante, instrucción checked, operanción checked u opción del compilador /checked) Falta de memoria para crear un objeto con new Excepción SHE del API Win32 Desbordamiento de la pila, generalmente debido a un excesivo número de llamadas recurrentes. Ha ocurrido alguna excepción al inicializar los campos estáticos o el constructor estático de un tipo. En InnerException se indica cuál es. Tabla 14-1 Excepciones predefinidas de uso frecuente Los bloques try - catch son la solución que ofrece la orientación a objetos a los problemas de tratamiento de errores. La idea consiste en separar físicamente las instrucciones básicas del programa para el flujo de control normal de las instrucciones para tratamiento de errores. Así, las partes del código que podrían lanzar excepciones se colocan en un bloque try, mientras que el código para tratamiento de excepciones se pone en un bloque catch aparte. La sintaxis de un bloque catch es la siguiente: catch ( tipo-de-clase identificador ) {... El tipo de clase tiene que ser System.Exception o un tipo derivado de System.Exception. El identificador, que es opcional, es una variable local de sólo lectura en el ámbito del bloque catch. catch (Exception capturada) {... Console.WriteLine(capturada); // Error en tiempo de compilación: // capturada está fuera de ámbito Un ejemplo de utilización: try {

14.4 VISUAL C# FÁCIL C. PALACIOS Y C. PALACIOS Console.WriteLine("Escriba un número"); Int numero = int.parse(console.readline()); catch (OverflowExceptioncapturada){ Console.WriteLine(capturada); 14.4 CAPTURA DE EXCEPCIONES. INSTRUCCIÓN TRY Una vez lanzada una excepción es posible escribir código que es encargue de tratarla. Por defecto, si este código no se escribe la excepción provoca que la aplicación aborte mostrando un mensaje de error en el que se describe la excepción producida (información de su propiedad Message) y dónde se ha producido (información de su propiedad StackTrace) Así, dado el siguiente código fuente de ejemplo: using System; class PruebaExcepciones { static void Main() { int divisor = 0; int cociente = 2/divisor; Al compilarlo no se detectará ningún error ya que al compilador no calcular el valor de divisor en tanto que es una variable, por lo que no detectará que dividir 2/divisor no es válido. Sin embargo, al ejecutarlo se intentará dividir por cero en esa instrucción y ello provocará que aborte la aplicación mostrando el siguiente mensaje: Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero. at PruebaExcepciones.Main() Como se ve, en este mensaje se indica que no se ha tratado una excepción de división por cero (tipo DivideByZeroException) dentro del código del método Main() de la clase PruebaExcepciones. Si se desea tratar la excepción hay que encerrar la división dentro de una instrucción try con la siguiente sintaxis: try <instrucciones> catch (<excepción1>) <tratamiento1> catch (<excepción2>) <tratamiento2> De una forma simplificada el significado de try es el siguiente:

C. PALACIOS Y E. PALACIOS CAPÍTULO 14: MANEJO DE EXCEPCIONES 14.5 1º. Si durante la ejecución de las <instrucciones> se lanza una excepción de tipo <excepción1> (o alguna subclase suya) se ejecutan las instrucciones <tratamiento1>, si fuese de tipo <excepción2> se ejecutaría <tratamiento2>, y así hasta que se encuentre una cláusula catch que pueda tratar la excepción producida. 2º. Si no se encuentra ningún catch compatible, entonces se buscaría en el código desde el que se llamó al método que produjo la excepción. Si tampoco allí se encuentra un tratamiento apropiado se aborta dicho programa y se muestra el mensaje de error con información sobre la excepción lanzada ya visto. Así, para tratar la excepción del ejemplo anterior de modo que una división por cero provoque una reacción, se podría añadir un catch de esta otra forma: catch (DivideByZeroException) { d=0; 14.5 (*)DEPURACIÓN JUST - IN-TIME Si no se utiliza tratamiento de excepciones se producirá una excepción en tiempo de ejecución. Si en lugar de ello se prefiere depurar un programa utilizando depuración Just-in-Time, es preciso activarla antes. Una vez activada, depuración Just-in-Time indicará el depurador que hay que utilizar dependiendo del entorno y de las herramientas instaladas. Figura 14-1 Depuración Just In Line Ejecute los siguientes pasos para activar la depuración Just-in-Time: 1. En el menú Tools (Herramientas), pulse Options (Opciones).

14.6 VISUAL C# FÁCIL C. PALACIOS Y C. PALACIOS 2. En el cuadro de diálogo Options, haga clic en la opción Debugging (Depuración). 3. En la carpeta Debugging, pulse Just-In-Time Debugging (Depuración Just-in-Time). 4. Active o desactive la depuración Just-in-Time (JIT) para distintos tipos de programas y pulse OK. Figura 14-2 Habilitar la depuración Just In Line 14.6 AÑADIR TRATAMIENTO DE EXCEPCIONES A UN PROGRAMA C# En este ejemplo escribirá un programa que utiliza tratamiento de excepciones para capturar errores inesperados en tiempo de ejecución. El programa pide al usuario dos valores enteros, divide el primero por el segundo y muestra el resultado. 14.6.1 Ejemplo de programa sin tratamiento de excepción Según lo explicado hasta ahora, el programa sin tratamiento de excepciones podría contener el siguiente código:

C. PALACIOS Y E. PALACIOS CAPÍTULO 14: MANEJO DE EXCEPCIONES 14.7 Figura 14-3 Programa de división sin tratamiento de excepciones Si se prueba el funcionamiento de este programa con dos números enteros cualquiera, producirá el efecto de la siguiente figura: Figura 14-4 Probando el programa de división con dos números enteros Sin embargo si se prueba el programa con un cero como divisor se provoca el lanzamiento de una excepción (división por cero) y la siguiente ventana:

14.8 VISUAL C# FÁCIL C. PALACIOS Y C. PALACIOS Figura 14-5 Probando el programa de división con un divisor cero 14.6.2 Añadir bloque TRY - CATCH Si se añade al programa anterior un bloque try catch como se indica a continuación: static void Main(string[] args) { try { string dato; int dividendo, divisor, cociente; Console.WriteLine("\n División de números ENTEROS:"); Console.Write("\n Escriba el Dividendo: "); dato = Console.ReadLine(); dividendo = Int32.Parse(dato); Console.Write("\n Escriba el Divisor: "); dato = Console.ReadLine(); divisor = Int32.Parse(dato); cociente = dividendo / divisor; Console.Write("\n El resultado es: {0", cociente); Console.ReadLine(); formas:. catch (Exception e) // Captura la excepción de cualquiera de las { Console.WriteLine("\n Excepción lanzada: {0", e); Console.WriteLine("\n\n Excepción lanzada: {0", e.message); Console.WriteLine ("\n El divisor es cero." + "Vuelve a introducir los datos."); Console.ReadLine();

C. PALACIOS Y E. PALACIOS CAPÍTULO 14: MANEJO DE EXCEPCIONES 14.9 Figura 14-6 Programa de división al que se ha añadido tratamiento de excepción divisón entre cero Se observa dos diferencias respecto del código anterior: El método Main se ha situado dentro de un bloque try. Se ha añadido una instrucción catch después del bloque try. La instrucción catch tiene que imprimir un mensaje. Si se vuelve a ejecutar el programa con una división entre cero, el programa sigue provocando el lanzamiento de una excepción (división por cero), pero esta vez el error es capturado y aparece su mensaje. Figura 14-6 Probando el tratamiento de la excepción Este mismo programa permite capturar excepciones de otro tipo, por ejemplo si se introduce un número demasiado grande para almacenarlo en un tipo int (-2147483648 a 2147483647) se obtendría:

14.10 VISUAL C# FÁCIL C. PALACIOS Y C. PALACIOS 14.7 PRÁCTICAS Figura 14-7 Probando el tratamiento de la excepción Ejemplos del capítulo. Practica los ejemplos de este capítulo introduciendo todas las mejoras que estime conveniente, especialmente utilizar siempre que sea posible controles de ventana Windows. Modificar aplicaciones capítulos anteriores. Volver a diseñar aplicaciones de capítulos anteriores introduciendo el tratamiento de las excepciones.