La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Manejo de excepciones Escuela de Ingeniería de Sistemas y Computación Universidad del Valle INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (IPOO)

Presentaciones similares


Presentación del tema: "Manejo de excepciones Escuela de Ingeniería de Sistemas y Computación Universidad del Valle INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (IPOO)"— Transcripción de la presentación:

1 Manejo de excepciones Escuela de Ingeniería de Sistemas y Computación Universidad del Valle INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (IPOO)

2 2 Excepciones Son anomalias (condiciones de error no esperadas) producidas durante la ejecución del programa. Debido a: División por cero, desbordamientos positivos o negativos, argumentos fuera de dominio,indice de array fuera de rango etc Cuando un programa detecta una excepcion, se notifica al resto del sistema o lanzando (throwing) una excepción. En alguna parte del programa existe un código que maneja o captura (catch) la excepcion. C++ puede levantar directamente una excepción en un bloque try utilizando la expresión throw.

3 3 Los manejadores de excepciones se evalúan en el orden en que se encuentran. Una excepción se captura cuando su tipo coincide con el tipo de la sentencia catch. Una vez que existe correspondencia de tipos, el control del programa se transfiere al manejador. El manejador especifica que acciones se realizaran para tratar la anomalia del programa. Excepciones

4 4 AGB Excepciones Usan tres palabras clave: try // Bloque donde pueden lanzarse excepciones. { // etc. throw dato; // Lanza una excepción con un dato. / etc. // Dato es cualquier tipo de dato (clase o primitivo) } catch(Dato dato) // Captura las excepciones que hayan { // ocurrido dentro del bloque try. // etc. }

5 5 La excepción se debe lanzar (throw) en el caso de que haya una situación anómala, imposible de corregir en ese nivel del código. Las excepciones se pueden lanzar (throw) dentro del bloque try o de cualquier función que se ejecute dentro del bloque try en cualquier nivel de profundidad. Puede haber bloques try anidados. Lo que no capture el interno, lo deja para el externo. O en el catch() del interno se pueden lanzar nuevas excepciones para que las capture el externo. Excepciones

6 6 Al lanzar una excepción (throw) se debe pasar un parámetro adicional (por valor, por referencia, por puntero, por referencia constante o por puntero a una constante). Y entonces el catch() recibe ese parámetro. Puede haber varios bloques catch() sobrecargados, es decir, cada uno capturando un tipo distinto de dato lanzado con throw. Puede haber, al final de todos, un catch(...). Los tres puntos significan que capturan cualquier otro dato no especificado en los catch() anteriores. Excepciones

7 7 Lo mas sencillo y eficiente es capturar las excepciones por referencia. Así nos evitamos duplicar objetos en memoria. Además, el manejo de memoria (creación y destrucción del objeto lanzado) se hace automáticamente. try { throw dato; // Se lanza el dato } catch(Dato &dato) // Se captura el dato por referencia { } Excepciones

8 8 Dentro de un catch(), la excepción se puede relanzar con el mismo parámetro que traía. Para ello hay que poner throw; sin ningún parámetro. La función que lanza excepciones puede declararse opcionalmente con un filtro de tipo de datos para el throw. De este modo, la función se compromete a lanzar únicamente tipos de datos especificados en el filtro. Si el throw lanza otro tipo de dato no incluido en el filtro, el resultado es indefinido. Excepciones

9 9 Hay unas cuantas clases que mantienen excepciones predefinidas del sistema: exception /* agrupa todos los errores */ logic_error /* errores que se podrían haber detectado antes de la ejecución del programa */ domain_error invalid_argument lenght_error out_of_range bad_cast bad_typeid runtime_error /* errores que solo pueden detectarse durante la ejecución del programa */ range_error overflow_error bad_alloc Excepciones

10 10 Excepciones Al lanzar una excepción, todos los objetos construidos automáticamente en ese ámbito se destruyen (los objetos dinámicos no se destruyen). Si se detecta un error en un constructor, es conveniente lanzar una excepción, ya que es la única manera de advertir que el objeto no fue correctamente construido. Ojo: en ese caso no se llama a su destructor. Es mala idea lanzar excepciones desde destructores.

11 11 También se puede intentar recuperarse de una excepción: bool correcto = true; do { try { correcto = true; // etc. Aquí puede haber un throw } catch(...) { // Aquí se corrigen las condiciones que produjeron la excepción correcto = false; } } while(!correcto); Excepciones


Descargar ppt "Manejo de excepciones Escuela de Ingeniería de Sistemas y Computación Universidad del Valle INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (IPOO)"

Presentaciones similares


Anuncios Google