Desarrollador Profesional de Juegos Programación III Unidad I El manejador universal.

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones.
Ordenamiento de Arreglos
EXCEPCIONES UNIDAD 5.
Programación Interactiva Manejo de Excepciones
Instrucciones y excepciones
Ejemplo de Programa C++
A partir del lenguaje C Entorno de programación Visual C++
MANEJO DE EXCEPCIONES EN C++
Excepciones Las excepciones son señales (en forma de objeto) que se generan en ejecución en casos de errores, para que puedan ser gestionadas en el programa.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
Informática II Prof. Dr. Gustavo Patiño MJ
INFORMATICA I Funciones CLASE 13.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD LATINA (UNILA)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Prof. Franklin Cedeño. FUNCIONES EN C++ Cuando tratamos de resolver un problema, resulta muy útil utilizar la filosofía de “divide y vencerás”. Esta estrategia.
SOBRECARGA DE FUNCIONES
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Manejo de excepciones en Java
Chapter 7 Functions Dale/Weems/Headington. 2 Tópicos Capítulo 7 l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Tema 4: Sentencias de control
POO en C++ Programación Orientada a Objetos. Declaración de clases con struct Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo:
Manejo de Excepciones Agustín J. González ELO329.
Sección 5-2 Estructuras de Control de Decisión Expresiones Lógicas.
El lenguaje de programación Java
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Capítulo 1 “Elementos de Programación”
Conversión cadena a número
Tema 11: Excepciones Antonio J. Sierra.
Preparado por: Nelliud D. Torres Enero/2003 Versión 1.0
Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.
Computación II Unidad X Manejo de Excepciones. Presentación de la Unidad Objetivos: –Saber manejar situaciones inesperadas dentro de un programa –Comprender.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CUATRO CONTROL DE FLUJOS, EXCEPCIONES Y ASERSIONES.
Programación orientada a objetos Capítulo 12 Manejo de errores.
Control de errores visual basic
Módulo 8: Manejo de Errores y Excepciones
Manejo de excepciones en Java ELO329: Diseño y Programación Orientados a Objetos Agustín J. González.
Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación.
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
ELO3291 Manejo de Excepciones Lectura sugerida de texto en linea: Eckel, Bruce. Thinking About C++, 2nd Edition, Prentice-Hall, Gratis en
Programación avanzada en Java Miguel Ángel Corella 26 de Septiembre de 2005.
Manejo de errores: Excepciones en Java
Tema ‧ Comando - while Repeticiones. Comando while ‧ Un ciclo es cualquier construcción de programa que repite una sentencia ó secuencia de sentencias.
Sesión 12: Herencia (2) – herencia múltiple /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Tratamiento de excepciones
Manejo de errores: Excepciones en Java ELO329: Diseño y Programación Orientados a Objetos.
ELO3291 Manejo de Excepciones Agustín J. González ELO329.
¿Qué son? – tipos – manejo - ejemplos
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
ESTRUCTURAS DE DECISION MULTIPLE
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Excepciones en C++
Manejo de Excepciones en C++
Transcripción de la presentación:

Desarrollador Profesional de Juegos Programación III Unidad I El manejador universal

También existe la posibilidad de definir un manejador que pueda capturar cualquier excepción. La sintaxis es la siguiente: catch (...) { } La sentencia catch captura cualquier excepción sin importar el tipo. Existe solamente un catch para el bloque try. Ejemplo: #include using namespace std; bool ok; class Out { }; void foo(bool pvez) { if (pvez) throw Out(); } void test() try { foo(true); } catch(...){ ok = true; } // puede capturar cualquier excepción } int main() { ok = false; test(); return ok ? (cout<<“Excepción capturada",0) : (cout<<“No hay excepción",1); } Salida Excepción capturada

Salto a una etiqueta Es posible también utilizar un sentencia goto para transferir el control del programa afuera de un manejador. Vemos el ejemplo visto en el modulo 2 modificado. #include bool ok; class Out { }; // Clase para instanciar el objeto a lanzar void foo(bool pvez); // prototipo de una funcion int main() { try { // bloque try ok = true; foo( true ); } catch( Out o) { // manejador que captura la excepción goto fallo; // salta a la etiqueta fallo } return (cout<<"Acierto!“, 0); fallo:// etiqueta return (cout<<"¡Fallo!“, 1); } void foo(bool pvez){ // definición de la function foo if( pvez ) throw Out(); // Lanza la excepción }

Las excepciones pueden ser anidadas a cualquier nivel (existir bloques try dentro de otros bloques try y bloques catch). Para mantener la regla que indica que un bloque try debe ser seguido inevitablemente por un catch, entonces pueden existir secuencias try-catch dentro de bloques try y de bloques catch. Excepciones anidadas Secuencias anidadas en el try. class Error { }; void foo () {... try { // Bloque-intento 1... try { // Bloque-intento en } catch { // Handler de 1.1 captura excepciones de 1.1 }... // continúa bloque 1 } catch (Error) { //Handler de 1: captura excepciones de 1 }... // sigue a bloque 1 } Secuencias anidadas en el catch class Error { }; void foo () {... try { // Bloque-intento 1... } catch (Error) { // Handler de 1: captura excepciones de 1 try { // Bloque-intento en Handler-H1... } catch { // Handler de H1.1 captura excepc. de H1.1 }... // continúa handler H1 }... // sigue a bloque 1 }

Ejemplo 1: #include class Base{ }; class Derivada1: public Base{ }; class Derivada2: public Base{ }; void foo(int valor); int main() { try { foo(0); } catch(const Derivada1&) { cout<<"Estoy en Derivada 1"<<endl; } catch(const Derivada2&) { cout<<"Estoy en Derivada 2" <<endl; } try { foo(1); } catch(const Derivada1 &) { cout<<"Estoy en Derivada 1"<<endl; } catch(const Derivada2 &) { cout<<"Estoy en Derivada 2"<<endl; } return 0; } void foo(int valor) { if (valor==1) throw( Derivada1() ); else throw( Derivada2() ); } Salida Estoy en Derivada 2 Estoy en Derivada

Ejemplo 2: Vemos que cuando se captura una excepción y esta pertenece a una jerarquía de clases, se comienza por la clase más derivada, sino se pierde la capacidad de discriminar el tipo de excepción acontecido. class Base{ }; class Derivada1: public Base{ }; class Derivada2: public Base{ }; void foo( int valor) { switch(valor){ case 1 : throw( Derivada1() ); break; case 2 : throw( Derivada2() ); break; default : throw( Base() ); break; } int main() { try { foo(0); } // estas sentencias están en el orden adecuado catch(const Derivada1&) { cout<<"estoy en Derivada1"; } catch(const Derivada2&) { cout<<"estoy en Derivada2" ; } catch(const Base& ) { cout<<"estoy en Base" ; } try { foo(1); } catch(const Derivada1& ) { cout<<"estoy en Derivada1"; } catch(const Derivada2&) { cout<<"estoy en Derivada2"; } catch(const Base& ) { cout<<"estoy en Base" ; } try { foo(2); } catch(const Derivada1& ){ cout<<"Base de Derivada1"; } catch(const Derivada2&) { cout<<"Base de Derivada2" ; } catch(const Base& ) { cout<<"Base" ; }

… try { foo(1); } catch(const Base& ) { cout<<"estoy (en donde??)”; } catch(const Derivada1&) { cout<<"estoy en Derivada1"; } catch(const Derivada2&) { cout<<"estoy en Derivada2" ; } try { foo(2); } catch(const Base& ) { cout<<"estoy (en donde??"; } catch(const Derivada1& ) { cout<<"estoy en Derivada1"; } catch(const Derivada2&) { cout<<"estoy en Derivada2" ; } return 0; } Salida estoy en Base estoy en Derivada1 estoy en Derivada2 estoy (en donde??) estoy (en donde??) /* Si en cambio capturamos a la clase base primero entonces perdemos la posibilidad de testear a la sub-clase de la excepción que se lanzó realmente */

Para solucionar el diseño anterior podríamos capturar solamente las excepciones de la clase-base y usar polimorfismo para discriminar la excepción: #include using namespace std; class Base { public: virtual void cartel() { cout << " Estoy en Base" << endl; } }; class Derivada1 : public Base { public: void cartel () { cout << "Estoy en Derivada1" << endl; } }; class Derivada2: public Base { public: void cartel () { cout << "Estoy en Derivada2" << endl; } }; void foo(int valor) { switch(valor){ case 1 : throw( Derivada1() ); break; case 2 : throw( Derivada2() ); break; default : throw( Base() ); break; } // continua

int main() { try { foo(0); } catch(Base& f) { f.cartel(); } try { foo(1); } catch(Base& f) { f.cartel(); } try { foo(2); } catch(Base& f) { f.cartel(); } return 0; } Salida Base Estoy en Derivada1 Estoy en Derivada2