La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.

Presentaciones similares


Presentación del tema: "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."— Transcripción de la presentación:

1 Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2

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

3 Cuando usar referencias o punteros Informática II 2011/2 3 ReferenciasPunteros Las referencias generan un código mas limpio y fácil de usar Trabajan directamente con posiciones de memoria No pueden ser reasignadosSe pueden reasignar, (reuso de punteros) Las referencias no pueden ser nulas.Pueden tomar el valor de nulo en el flujo del programa Poco costoso para manejo de funciones.

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

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 5

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 6

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 7

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 8

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

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 10

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 11

12 Excepciones C++ proporciona un mecanismo potente para detectar y gestionar errores en ejecución (excepciones) se dispone de tres palabras reservadas para ello: trycatchthrow Informática II 2009/2 12

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 13

14 Bloques try-catch Proporciona un bloque o espacio donde se ubican las partes del código que pueden presentar algún problema o son peligrosas. try Captura el evento de error producido por el código alojado en el bloque try. Es el lugar donde se atiende la excepción, tratando el problema de alguna manera (Ejp: mandar un mensaje al usuario). catch Informática II 2011/2 14 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.

15 Bloques try-catch Informática II 2011/2 15 int main(){ try{ //código que posiblemente puede generar un error funcionPeligrosa(); } catch (type1 A){//captura una excepción tipo 'type1' //haga algo //envíe un mensaje } catch (type2 B){//captura una excepción tipo 'type2' //haga algo //envíe un mensaje } catch(...){ //captura cualquier excepción no tratada por los //catch anteriores } return 0; }

16 Bloque try-catch Existe un bloque catch que puede ser llamado en el caso que los anteriores no puedan manejar un tipo de error en particular, se llama catch everything y es declarado así catch (…). Después de una excepción, el flujo del programa continúa luego del bloque catch que atendió la excepción, no después del punto donde esta se genero (bloque try). Informática II 2011/2 16

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

18 Bloques try-catch La biblioteca estándar exception contiene la 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 18

19 Biblioteca exception Informática II 2011/2 19

20 stdexcept Informática II 2009/2 20 #include #include //excepciones estándar using namespace std; int main() { 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 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 throw implícito de un objeto de la clase bad_alloc, que es tratado por el bloque catch respectivo. 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..

21 Crear excepciones Para declarar una excepción será necesario usar la palabra reservada throw, y se usa como se muestra a continuación. throw excepcion; 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 21

22 throw Se comporta como un return dentro del bloque try. Permite que el flujo del programa salte a donde se va a tratar el problema (bloque catch adecuado). Esto lo hace gracias al tipo de dato retornado con esta sentencia. throw Informática II 2011/2 22

23 throw Los tipos de la expresión throw y el especificado en el argumento del bloque catch deben coincidir, La concordancia de tipos es muy estricta. Ejp: no se considera como el mismo tipo int que unsigned int. Si no se encontrara ningún catch adecuado, se abandona el programa, del mismo modo como si se produjese una excepción y no la tratáramos. El tipo de dato que es utilizado como argumento dentro del bloque catch puede ser cualquiera incluso una clase creada por el usuario, además puede ser pasado como referencia. Informática II 2009/2 23

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: class excepcion{}; //excepción... } //Ver ejemplo4.cpp Informática II 2011/2 24

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 25

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

27 Ejemplo try-catch Informática II 2011/2 27 class carro{ private: int gGasolina; char *marca; int velMax; int vel; bool start; 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(); int getVel() const; ~carro(); }; //se define la clase para la excepción class carro::problema{ private: char *mensaje; public: problema(); problema(char *_mensaje); char* what(); ~problema(); }; 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 puede acelerar sin gasolina"); } vel++; } carro::problema::problema(){ mensaje="error"; } carro::problema::problema(char *_mensaje){ mensaje=_mensaje; } char* carro::problema::what(){ return mensaje; } carro::problema::~problema(){} #include using namespace std; carro renault4(11,"renault",120); //Ejemplo uso de clases int main(){ try{ renault4.arrancar(); for(int i=0; i<30; i++){ renault4.acelerar(); cout<<"velocidad actual:\ "<<renault4.getVel()<<endl; } } catch(carro::problema e){ cout<<"Problema hallado:\ "<<e.what()<<endl; } }

28 Ejemplo try-catch El parámetro entregado como argumento en la sentencia throw, pudo ser asignado mediante la declaración de un nuevo objeto tipo problema o directamente como se muestra a continuación. Informática II 2011/2 28 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; } }

29 Ejemplo try-catch Solo puede existir un bloque catch de un tipo de dato determinado, es decir no pueden existir dos bloques catch cuyo tipo de argumento de entrada se repita El boque catch actúa como si se tratase de una función, por lo que sus argumentos de entrada pueden ser pasados por valor o por referencia. Informática II 2011/2 29 catch(carro::problema e){ cout<<"Problema hallado: "<<e.what()<<endl; } catch(carro::problema &e){ cout<<"Problema hallado: "<<e.what()<<endl; }

30 Ejemplo try-catch Incluso es posible llevar como argumento al bloque catch tan solo el tipo de argumento sin un nombre, pero en nuestro caso no se podría acceder a los métodos del objeto (what( )). Informática II 2011/2 30 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.

31 Informática II 2011/2 31

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

33 Informática II 2009/2 33


Descargar ppt "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."

Presentaciones similares


Anuncios Google