Manejo de Excepciones Agustín J. González ELO329.

Slides:



Advertisements
Presentaciones similares
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
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.
EXCEPCIONES UNIDAD 5.
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
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
UNIVERSIDAD LATINA (UNILA)
EXCEPCIÓN DE ERRORES.
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
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Unidad I Java y C++ : Similitudes y diferencias
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
Manejo de Vectores y Matirces
Tema 11: Excepciones Antonio J. Sierra.
ELO3201 Vectores (Vector) Agustín J. González ELO320.
El lenguaje de programación Java
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
Programación Orientada a Objetos Temario Excepciones – Definición. – Funcionalidad – Tipos de Excepciones – API de las Excepciones – Captura de Excepciones.
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.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
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.
Módulo 8: Manejo de Errores y Excepciones
Manejo de Punteros y objetos en memoria dinámica en C++
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.
Unidad III Manejo de Excepciones en Java y C++
Excepciones Unidad 5.
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
1 Funciones Agustín J. González Versión Original de Kip Irvine ELO329.
Programación orientada a objetos Capítulo 12 Manejo de errores.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
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.
1 Funciones en C++: Nota: Este material es de estudio personal, en clases sólo revisaremos las láminas con. Usted revise todo. Agustín J. González ELO329.
MANEJO DE EXCEPCIONES. 21/11/2005 E.T.S de Ingenieros de Telecomunicacion.2 Índice ¿Qué es una excepción? Tipos de situaciones. Manejo de excepciones.
¿Qué son? – tipos – manejo - ejemplos
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Desarrollador Profesional de Juegos Programación III Unidad I El manejador universal.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
SCITMina | by Microsoft Bienvenidos Eduardo Daniel Tenorio Mayo Microsoft Student Partner Taller de Programación Orientada a Objetos Con C# Edgar Edel.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
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
Manejo de Excepciones Agustín J. González ELO329 ELO329.
Diseño y Programación Orientada a Objetos
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 Agustín J. González ELO329 ELO329.
Manejo de Excepciones en C++
Manejo de Excepciones en C++
Transcripción de la presentación:

Manejo de Excepciones Agustín J. González ELO329

Diseño y Programación Orientados a Objetos 2 Manejo de Excepciones El Manejo de Excepciones es un mecanismo interno para comunicar estados de error desde una parte del programa a otra. Comúnmente, una parte del programa detecta una error, pero no es conveniente mezclar las situaciones de excepción con el flujo normal y más probable del programa. Otra parte del programa puede hacerse cargo de todos los errores, pero éstos no siempre se generan en esa sección del código. No hay gran diferencia con Java

Diseño y Programación Orientados a Objetos 3 Diferencias respecto de Java La sentencia throw admite objetos argumentos escalares u objetos. Podemos o no indicar en una función o método el tipo de dato lanzado. Si se indica sólo podemos lazar ese tipo de dato. Si no se indica cualquier tipo puede ser lanzado. La biblioteca estándar de C++ provee la clase exception de la cual podemos crear clases derivadas.

Diseño y Programación Orientados a Objetos 4 Veremos algunos ejemplos: Situación común Una función recibe el requerimiento de inserción de un número en la posición n de un vector. La función descubre que n es mayor que el tamaño del vector, por lo tanto lanza o envía un excepción, la cual hace retornar inmediatamente la función al segmento de código llamador. El código llamador presumiblemente repite el lazo solicitando un nuevo índice y vuelve a llamar a la función.

Diseño y Programación Orientados a Objetos 5 Función Insert() en el escenario previo La función Insert usa la sentencia throw para retornar tan pronto como se detecta que el índice es muy grande. El throw causa el retorno inmediato de la función. Notar que no hay restricciones para la clase del objeto retornado. void Insert( vector & array, int index, int value )‏ { if( index = array.size())‏ throw string("Index out of bounds in Insert()"); array[index] = value; } El prototipo pudo ser: Void Insert(vector &array, int index, int value) throw(String)

Diseño y Programación Orientados a Objetos 6 Función Insert() en el escenario previo El bloque try rodea cada sección de código siendo probado. Una o más sentencias catch siguen al bloque try. try { cout << "Enter an index between 0 and " << (VECSIZE-1) << ": "; cin >> index; Insert( scores, index, value ); cout << "Insertion successful.\n"; } catch( string & S ) { cout << S << endl; }

Diseño y Programación Orientados a Objetos 7 Caso más general: Para capturar varias excepciones posibles: try { // code here } catch (int param) { cout << "int exception"; } catch (char param) { cout << "char exception"; } catch (...) { cout << "default exception"; } Las funciones o métodos puedes indicar tipo lanzado: float myfunction (char param) throw (int); Si queremos prohibir las excepciones: int myfunction (int param) throw(); Si queremos permitir cualquier tipo de excepción: int myfunction (int param);

Diseño y Programación Orientados a Objetos 8 Clases para excepciones Podemos definir nuestras propias clases para manejo de excepciones. Éstas pueden o no derivar de exception Esta clase tiene un método virtual con siguiente prototipo: virtual const char* what() const throw() Si derivamos de exception, agregar #include using namespace std; La clase excepción usualmente lleva por nombre la excepción, por ejemplo RangeException. class RangeException { }; // use for out of range subscripts

Diseño y Programación Orientados a Objetos 9 Esta versión de la función Insert construye y lanza un objeto RangeException si el índice está fuera del rango. void Insert( vector & array, int index, int value )‏ { if( index = array.size())‏ throw RangeException(); array[index] = value; } Clases para lanzar Excepción

Diseño y Programación Orientados a Objetos 10 Atrapando una Excepción Ahora la función llamadora puede nombrar un tipo específico de excepción en la sentencia catch. try { cout << "Enter an index between 0 and " << (VECSIZE-1) << ": "; cin >> index; Insert( scores, index, value ); cout << "Insertion successful.\n"; } catch( RangeException & ) { cout << "A range exception occurred.\n"; }

Diseño y Programación Orientados a Objetos 11 Atrapando múltiples Excepciones Usamos múltiples sentencias catch para atrapar todos los tipos de excepciones que pueden ser lanzadas. try { DoOneThing(); DoAnother(); DoSomethingElse(); }catch( RangeException & ) { cout << "A range exception occurred.\n"; }catch( OpenFileError & ) { cout << "Cannot open file.\n"; } // etc...

Diseño y Programación Orientados a Objetos 12 Clase RangeException Una mejor versión de la clase RangeException nos permite pasar un string a su contructor. También hay un método GetMsg que retorna el mismo string. class RangeException { public: RangeException(const string & msg)‏ { m_sMsg = msg; } string GetMsg() const { return m_sMsg; } private: string m_sMsg; };

Diseño y Programación Orientados a Objetos 13 Clase RangeException Cuando la función Insert detecta un índice errado, ésta pasa un string al constructor de RangeException. void Insert( vector & array, int index, int value )‏ { if( index = array.size())‏ throw RangeException("Index out of bounds in Insert()"); array[index] = value; }

Diseño y Programación Orientados a Objetos 14 Clase RangeException Cuando el llamador atrapa la excepción enviada por Insert, éste ahora puede llamar GetMsg para desplegar el mensaje almacenado en el string. try { cout << "Enter an index between 0 and " << (VECSIZE-1) << ": "; cin >> index; Insert1( scores, index, value ); cout << "Insertion successful.\n"; } catch( RangeException & R ) { cout << R.GetMsg() << endl; }

Diseño y Programación Orientados a Objetos 15 Re-envío de un Excepción Algunas veces es útil lanzar una excepción nuevamente y dejar que la función previa en la cadena se haga cargo de su manejo. void TestVector(vector & scores, int value)‏ { int index; try { cout << "Enter an index between 0 and " << (VECSIZE-1) << ": "; cin >> index; Insert1( scores, index, value ); cout << "Insertion successful.\n"; } catch( RangeException & R ) { throw R; } } // more...

Diseño y Programación Orientados a Objetos 16 Re-envío de excepciones En este ejemplo la función llamadora debe tener una sentencia catch para atrapar la excepción enviada por TestVector. void Example2()‏ { vector scores(VECSIZE); int value = 99; try { TestVector( scores, value ); } catch( RangeException & R ) { cout << R.GetMsg() << endl; }

Diseño y Programación Orientados a Objetos 17 Envío de Múltiples Excepciones Una misma función puede lanzar más de una excepción. Ejemplo: void Insert( vector & array, int index, int value )‏ { if( index = array.size())‏ throw RangeException("Index out of bounds in Insert()"); if( value < 0 )‏ throw BadArrayValue(); array[index] = value; }

Diseño y Programación Orientados a Objetos 18 Capturando Excepciones Desconocidas Si una excepción es lanzada en algún lugar en la cadena de llamados a función y nunca es atrapada, ésta puede ser capturada usando (...) como el parámetro de la sentencia try-catch. void main()‏ { try { Example2(); } catch(... ) { cout << "Caught unknown exception in main()\n"; }