1 / 33

Informática II

Informática II. Clase 5: Excepciones y Manejo de E rrores. Diego Fernando Serna Restrepo. Semestre 2011/2. Chiste del Día. Cuando usar referencias o punteros. Contenido. Introducción a las excepciones. 1. Como utilizar excepciones ?. 2. Cómo crear excepciones?. 3. Ejemplo. 4.

lowell
Download Presentation

Informática II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informática II Clase 5: Excepciones y Manejo de Errores Diego Fernando Serna Restrepo Semestre 2011/2

  2. Chiste del Día Informática II 2011/2

  3. Cuando usar referencias o punteros Informática II 2011/2

  4. Contenido Introducción a lasexcepciones 1 Como utilizarexcepciones? 2 Cómo crear excepciones? 3 Ejemplo 4 Informática II 2011/2

  5. Manejo de errores • Los programas tienen errores, y mientras mas grandes sean los algoritmos, mayor será la probabilidad de tenerlos. • Corregir y encontrar errores es uno de los enfoques mas costosos en la industria del desarrollo del software. • Las comunidades de software libre son entornos ideales para hallar y corregir errores. Informática II 2011/2

  6. Manejo de errores • Los errores pueden ser encontrados desde diferentes etapas del desarrollo, ya sea por sintaxis inapropiada o problemas lógicos del programa. • Existen errores que un programador puede predecir cuando se desarrolla un aplicativo (operaciones inválidas, recursos escasos, etc). • A estos errores se les denomina “excepciones”. Informática II 2011/2

  7. Manejo de errores • En la programación, existen circunstancias que pueden llevar a que un aplicativo se comporte de manera inadecuada. • Algunas de ellas se pueden evitar pero existen algunas otras que simplemente son inevitables (ej. recursos escasos). • Para estos casos será posible preparar el programa para que responda de manera predeterminada a dichos estímulos. Informática II 2011/2

  8. Manejo de errores • ¿Qué haría su programa si causa uno de los más comunes errores matemáticos, división por cero? • Sus opciones incluyen: • Romper el flujo del programa. • Informar al usuario y salir con elegancia. • Informar al usuario y permitirle tratar de recuperarse y continuar. • Tomar medidas correctivas y continuar sin perturbar a el usuario. Informática II 2011/2

  9. Contenido Introducción a lasexcepciones 1 Como utilizarexcepciones? 2 Cómo crear excepciones? 3 Ejemplo 4 Informática II 2011/2

  10. Excepciones • Las excepciones son errores que ocurren durante la ejecución del programa, por lo que es vital tratarlos en tiempo real para evitar que el programa simplemente colapse y termine abruptamente sin guardar los datos procesados o sin liberar de manera correcta los recursos utilizados, además de no tener la oportunidad de dar aviso alguno al usuario sobre las causas del problema. Informática II 2011/2

  11. Manejo de errores • La idea básica detrás de las excepciones es bastante sencillo: • El equipo intenta ejecutar un trozo de código. • Se incluye lógica (código) para estar preparados en caso de que el código que está tratando de ejecutar falla por alguna razón excepcional. • En caso de que su código presente un problema (excepción), debe haber un camino desde el código donde se produce un problema con el código que puede manejar la condición de error. El manejo de excepciones hace que estos tres puntos se unen, y lo hacen de una manera relativamente sencilla. Informática II 2011/2

  12. Excepciones Informática II 2009/2

  13. Partes del manejo de excepciones • C++ otorga bloques de código que pueden capturar las excepciones que ocurran en dicho espacio. • Esto bloques se denominan bloques try-catch. • Estos bloques además de capturar las excepciones, ofrecen un espacio de código que sólo se ejecutará cuando ocurra la excepción. Informática II 2011/2

  14. Bloques try-catch • Se pueden tener múltiples bloques catch después del bloque try, donde cada uno se hace cargo de un tipo diferente de error, asemejándose a los casos de una sentencia switch. Informática II 2011/2

  15. Bloques try-catch Informática II 2011/2

  16. Bloque try-catch Informática II 2011/2

  17. Contenido Introducción a lasexcepciones 1 Como utilizarexcepciones? 2 Cómo crear excepciones? 3 Ejemplo 4 Informática II 2011/2

  18. Bloques try-catch • La biblioteca estándar “exception” contienela implementación de algunas excepciones comunes en la programación (ej. overflow_error, out_of_range, entre otros) • Para el resto de las excepciones será necesario indicarle al programa cuando como serán el resto de las excepciones. • Ver ejemplo2.cpp Informática II 2011/2

  19. Biblioteca exception Informática II 2011/2

  20. stdexcept #include <iostream> #include<stdexcept> //excepciones estándar usingnamespacestd; intmain() { int *x; int y = 1000000000; try { x = new int[y]; cout << "Puntero: " << x << endl; delete[] x; //no existe throw } catch(bad_alloc e) { cout << "Error:" << e.what()<<endl; } return 0; } • #include<stdexcept> • Este encabezado define un conjunto de excepciones estándar, tales que la librería como los programas creados por el usuario pueden utilizarlos para reportar errores comunes. • Al utilizar el operador new, si no hay memoria suficiente, se produce una excepción. Luego se hace un throwimplícito de un objeto de la clase bad_alloc, que es tratado por el bloque catchrespectivo. • bad_alloc e instancia un objeto de la clase bad_alloc, permitiéndonos ingresar al método what(), que nos da acceso a el mensaje estándar predefinido. • . Informática II 2009/2

  21. Crear excepciones • Para declarar una excepción será necesario usar la palabra reservada “throw”, y se usa como se muestra a continuación. throwexcepcion; • Una vez creada, el bloque try la capturará se la enviará al bloque catch para que ésta se haga cargo de ella. Informática II 2011/2

  22. throw Informática II 2011/2

  23. throw Informática II 2009/2

  24. Clases de excepciones • Son usadas para crear excepciones. • Es posible encontrar dichas clases sin datos ni métodos adicionales a los que el compilador regala. Class Clase { ... public: classexcepcion{}; //excepción ... } //Ver ejemplo4.cpp Informática II 2011/2

  25. Clases para las excepciones • Las excepciones son clases, por lo tanto podrán implementar todas las características de las clases (usar herencia, polimorfismo, etc.) • Ver ejemplo5.cpp Informática II 2011/2

  26. Contenido Introducción a lasexcepciones 1 Como utilizarexcepciones? 2 Cómo crear excepciones? 3 Ejemplo 4 Informática II 2011/2

  27. Ejemplo try-catch #include <iostream> usingnamespacestd; carro renault4(11,"renault",120); //Ejemplo uso de clases intmain(){ try{ renault4.arrancar(); for(inti=0; i<30; i++){ renault4.acelerar(); cout<<"velocidad actual:\ "<<renault4.getVel()<<endl; } } catch(carro::problema e){ cout<<"Problema hallado:\ "<<e.what()<<endl; } } //se define la clase para la excepción class carro::problema{ private: char *mensaje; public: problema(); problema(char *_mensaje); char* what(); ~problema(); }; class carro{ private: intgGasolina; char *marca; intvelMax; intvel; boolstart; public: // se declara la clase para la excepción class problema; carro(); carro(int _gGasolina,char *_marca, int _velMax); void arrancar(); void acelerar(); void frenar(); intgetVel() const; ~carro(); }; • carro::carro(){ • gGasolina=0; • marca=0; • velMax=0; • vel=0; • start=false; • } • carro::carro(int _gGasolina,char *_marca, • int _velMax){ • gGasolina=_gGasolina; • marca=_marca; • velMax=_velMax; • vel=0; • } • void carro::acelerar(){ • if(--gGasolina<=0){ • throw problema("no puedeacelerar sin gasolina"); • } • vel++; • } • carro::problema::problema(){ • mensaje="error"; • } • carro::problema::problema(char *_mensaje){ • mensaje=_mensaje; • } • char* carro::problema::what(){ • return mensaje; • } • carro::problema::~problema(){} Informática II 2011/2

  28. Ejemplo try-catch • El parámetro entregado como argumento en la sentenciathrow, pudo ser asignado mediante la declaración de un nuevo objeto tipo problema o directamente como se muestra a continuación. void carro::arrancar(){ start=true; vel=10; gGasolina-=10; if(gGasolina<=0){ throw problema("no puede arrancar sin gasolina"); } } void carro::arrancar(){ start=true; vel=10; gGasolina-=10; if(gGasolina<=0){ //problema error1("no puede arrancar sin gasolina"); problema error1=problema ("no puede arrancar sin gasolina"); throw error1; } } Informática II 2011/2

  29. Ejemplo try-catch catch(carro::problema e){ cout<<"Problema hallado: "<<e.what()<<endl; } catch(carro::problema &e){ cout<<"Problema hallado: "<<e.what()<<endl; } Informática II 2011/2

  30. Ejemplo try-catch catch(carro::problema ){ cout<<"Problema hallado: "<<endl; } Ejercicio: Crear otra clase que maneje la excepción (error) cuando la velocidad del carro luego de acelerarlo, sea mayor a la velocidad máxima permitida. Informática II 2011/2

  31. GRACIAS POR SU ATENCIÓN Informática II 2011/2

  32. Bibliografía • Curso C++ con clase http://c.conclase.net/curso/?cap=043 • Pagina de Referencia lenguaje C++: • http://www.cplusplus.com/reference/std/exception/exception/ • http://www.cplusplus.com/reference/std/stdexcept/ • Sams Teach yourselft C++ in 21 days: http://newdata.box.sk/bx/c/htm/ch20.htm#Heading1 Informática II 2011/2

  33. Gracias ! Informática II 2009/2

More Related