Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle



Documentos relacionados
Tema 5 Corrección y Robustez Excepciones en Java

Corrección y Robustez (2ª parte)

Tema 4 Corrección y Robustez. Programación Orientada a Objetos Curso 2010/2011

Corrección y Robustez

Excepciones. Una excepción es una situación anómala a la que llega la ejecución de un programa

Guía práctica de estudio 10: Excepciones y errores

Consiste en asumir que el usuario podrá usar de forma incorrecta y por tanto el programador deberá contemplar esos errores.

Fundamentos de Computadores y Lenguajes

TEMA 4 GESTIÓN DE ERRORES. Cristina Cachero, Pedro J. Ponce de León. 1 Sesión (1.5 horas) Versión 0.6. Depto. Lenguajes y Sistemas Informáticos

TEMA 4 GESTIÓN DE ERRORES. Cristina Cachero, Pedro J. Ponce de León. 1 Sesión (1.5 horas) Versión 0.6 POO

Parte I: Programación en un lenguaje orientado a objetos

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3

TEMA 8. Agenda. Excepciones

Tema 5 Corrección y Robustez Excepciones en Java

Programación orientada a objetos. Capítulo 12 Manejo de errores

Tema 6: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2013/2014

Manejo de excepciones en Java. ELO329: Diseño y Programación Orientados a Objetos Agustín J. González

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

Tema 6 Corrección y Robustez Excepciones en Java. Programación Orientada a Objetos Curso 2016/2017

Manejo de errores: Excepciones en Java. ELO329: Diseño y Programación Orientados a Objetos

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle

Excepciones. Excepciones

Tema 4: Corrección y Robustez en Java. Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz

7. Manejo de excepciones y tratamiento de errores

Programación en Java. Instructor:

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Manejo de Excepciones

LENGUAJES DE PROGRAMACIÓN. Solución al examen de Septiembre 2016

Java: control de excepciones

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Formato para prácticas de laboratorio

Corrección y Robustez

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Escuela Politécnica Nacional I. Bernal. Iván Bernal, Ph.D. 4

Manejo de Excepciones

Excepciones. Excepciones. Excepciones. Excepciones. Condiciones inesperadas en un programa

TEMA 8. Excepciones en Java. Curso de Java. Manejo de Excepciones

Tema 5. Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2010/2011

Presentación. Programación I. Programación Orientada a Objetos. :: Prof. Yeniffer Peña

UD 4 GESTIÓN DE ERRORES. Pedro J. Ponce de León. Versión

Examen Teórico Convocatoria de Junio de 2012

PROGRAMACION ORIENTADA A OBJETOS EN C++

Excepciones e hilos. Acceso a la red - Ejercicios

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

fundamentos de programación (unidad 7) herencia y relaciones entre clases

Diseño de compiladores Recordando la clase anterior

Sebastián García Galán

Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Si bien hay gran cantidad de excepciones, todas derivan de la clase Exception, además de las excepciones ya manejadas, se pueden crear propias.

Resumen Manejo de Excepciones

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

Sesión 2: Introducción a Java

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 EXCEPCIONES. Ing. Bruno López Takeyas, M.C.

Curso Informática Lección 4. Instrucciones de control

Excepciones LSUB, GSYC, URJC. Monday, February 4, 13

Ejercicios de tratamiento de errores

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

MANEJO DE EXCEPCIONES en C++ Dr. Oldemar Rodríguez R. Escuela de Informática Universidad Nacional

MASTER EN MODELIZACIÓN MATEMÁTICA, ESTADÍSTICA Y COMPUTACIÓN Curso: Bases de datos y programación orientada a objetos Parte POO

2. Indica cuál de las siguientes afirmaciones es cierta:

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Estructuras de Datos Clase 1 - Introducción

Ejercicios de tratamiento de errores

Soluciones del Examen de Fundamentos de Computadores y Lenguajes

Tema 4. Excepciones en Java

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

INTRODUCCION A LA PROGRAMACION EN JAVA

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

INF 473 Desarrollo de Aplicaciones en Java

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase

Java Optional ifpresent y como utilizarlo

Introducción a C++ Índice

Introducción a Java. Introducción a Java. Programación I

Abstracciones de diseño

Prueba N o 1. Programación II

Prácticas de Programación

El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++

Excepciones. Excepciones. Dos tipos de situaciones excepcionales. Excepciones. Dos tipos de situaciones excepcionales. Tipos de excepciones

Instituto Tecnológico de Celaya

Tema 3. Tratamiento de Excepciones

Construcciones del Lenguaje Java

Examen Teórico. Convocatoria de Febrero de 2015

Apuntadores en C y C++

Tema 3 Herencia en Java Parte 1. Programación Orientada a Objetos Curso 2015/2016

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Soluciones Kata TDD. Solución requisito 1

Programación Orientada a Objetos Curso 2010/2011

Repaso de las características más importantes de la programación Java y su adaptación a Android

Programación estructurada (Introducción a lenguaje C)

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Transcripción:

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Contenido Asertos en C++ Mecanismo de excepciones: Declaración de excepciones Lanzar excepciones Manejo de excepciones Definición de excepciones Excepciones de la librería estándar Tema 4 Corrección y Robustez 2

Asertos en C++ Es posible definir puntos de chequeo en el código utilizando los asertos Ayuda útil para la depuración Ofrece la macro assert() en <assert.h> assert() evalúa su parámetro y llama a abort() si el resultado es cero (false). void Cuenta::ingreso(double cantidad){ } assert(cantidad>0); assert(estado == OPERATIVA); saldo = saldo + cantidad; Tema 4 Corrección y Robustez 3

Asertos en C++ Antes de abortar assert escribe en la salida de error el nombre del archivo fuente y la línea donde se produjo el error. Si se define la macro NDEBUG, se desactiva la comprobación de todos los asertos definidos. Tema 4 Corrección y Robustez 4

Limitaciones asertos Aunque los asertos se pueden utilizar para controlar la corrección del código (precondiciones, postcondiciones, invariantes) tienen las mismas limitaciones que los assert de Java. Las precondiciones no se deben evaluar con assert No se debe abortar un programa como consecuencia de un fallo en la postcondición Para ayudar a la verificación de los programas C++ también existen entornos para la definición de pruebas unitarias CPPUnit es uno de los entornos más utilizado Tema 4 Corrección y Robustez 5

Excepciones en C++ En C++ se utiliza el mecanismo de excepciones para notificar que se ha producido una situación excepcional. A diferencia de Java, una excepción no tiene por qué ser un objeto de una clase: Se puede lanzar cualquier cosa (un entero, una cadena de texto, ) No existen distintas categorías de excepciones Puede ser útil definir una jerarquía de excepciones, aunque no es obligatorio Tema 4 Corrección y Robustez 6

Lanzamiento de excepciones Se utiliza la palabra reservada throw Podemos lanzar un número o una cadena de texto para informar de un fallo en la precondición Se desaconseja esta práctica en un programa OO void Cuenta::ingreso(double cantidad){ if (cantidad<0) throw cantidad; if (estado!= OPERATIVA) throw "Fallo pre. Estado incorrecto"; saldo = saldo + cantidad; } Tema 4 Corrección y Robustez 7

Excepciones en la librería estándar Existe un conjunto de excepciones predefinidas en el espacio de nombres std (<stdexcept>) Todas ellas heredan de la clase std::exception (<exception>) Disponen del método what() que devuelve la cadena de texto con el informe del error La clase exception se puede utilizar como raíz de una jerarquía de excepciones definidas por el programador, aunque no es obligatorio Las nuevas excepciones deben redefinir el método what para que lancen el mensaje de error más conveniente. Tema 4 Corrección y Robustez 8

Excepciones en la librería estándar logic_error: fallo en las precondiciones runtime_error: fallo en las postcondiciones Tema 4 Corrección y Robustez 9

Uso de excepciones estándar Para el control de precondiciones se lanzan excepciones compatibles con logic_error void Cuenta::ingreso(double cantidad) { if (cantidad < 0) throw invalid_argument( Cantidad negativa"); if (estado!= OPERATIVA) throw logic_error("estado incorrecto"); saldo = saldo + cantidad; } Tema 4 Corrección y Robustez 10

Excepciones de usuario Cualquier tipo de datos puede ser lanzado en una excepción. Se recomienda crear una clase que herede de runtime_error: class RedNoDisponible: public runtime_error{ public: RedNoDisponible(const char* m); }; RedNoDisponible::RedNoDisponible(const char* msg): runtime_error(msg) {} Las excepciones que heredan de exception disponen del método what() que retorna el mensaje de error. Tema 4 Corrección y Robustez 11

Declaración de excepciones Se utiliza también la palabra reservada throw Se puede especificar el conjunto de excepciones que puede lanzar un método void f(int a) throw (E1, E2); f puede lanzar excepciones de tipo E1 y E2 pero no otras Si no se dice nada, significa que podría lanzar cualquier excepción (o ninguna) int f(); f podría lanzar cualquier excepción Se puede indicar que un método no lanzará ninguna excepción int f() throw(); f no puede lanzar ninguna excepción (lista vacía) Tema 4 Corrección y Robustez 12

Declaración de excepciones A diferencia de Java, el compilador ignora la declaración de las excepciones Si en tiempo de ejecución se intenta lanzar una excepción no declarada, se detecta la violación y termina la ejecución. Se aplica la política confía en el programador : El compilador no obliga al código cliente a manejar las excepciones que puede lanzar un método Si ocurre una excepción y el programador no ha definido como manejarla, la excepción escaparía del método Un método redefinido no puede lanzar más excepciones que las especificadas en el método de la clase padre. La concordancia entre las especificaciones de la clase padre e hija si es controlada por el compilador Tema 4 Corrección y Robustez 13

Declaración de las excepciones void Cuenta::ingreso(double cantidad) throw (invalid_argument, logic_error){ if (cantidad<0) throw invalid_argument("cantidad negativa"); if (estado!= OPERATIVA) throw logic_error("estado incorrecto"); saldo = saldo + cantidad; } Declaramos que el método ingreso SÓLO puede lanzar las excepciones invalid_argument y logic_error Si en el cuerpo del método se produjese alguna otra excepción sería incompatible con la declaración. Tema 4 Corrección y Robustez 14

Manejo de excepciones Como en Java, se debe definir un manejador (catch) por cada excepción que se espera que pueda lanzar la ejecución de un bloque de código (try). A diferencia de Java, no es obligatorio, el compilador no comprueba si esto se hace o no Las excepciones se pueden pasar al manejador por valor o por referencia Cuando las excepciones son objetos se deben pasar por referencia para asegurar el comportamiento polimórfico Tema 4 Corrección y Robustez 15

Manejo de excepciones Igual que en Java, cuando ocurre una excepción se evalúan los tipos definidos en los manejadores y se ejecuta el que sea compatible Hay que tener en cuenta el orden en el caso de utilizar una jerarquía de excepciones Se puede definir un manejador para cualquier tipo de excepción catch( ) Es posible relanzar la misma excepción que se está manejando throw; Tema 4 Corrección y Robustez 16

Método visualizar del navegador web void Navegador::visualiza(string url){ Conexion* conexion; int intentos = 0; while (intentos < 20) { try { conexion = new Conexion(url); break; } catch (RedNoDisponible& e) { intentos++; if (intentos == 20) throw; //relanza } } //Se ha abierto la conexión y se leen las líneas } Si al crear la conexión ocurren las excepciones ServidorNoEncontrado o RecursoNoDisponible (no manejadas) pasarán al cliente Tema 4 Corrección y Robustez 17

Código cliente int main(){ Navegador navegador; try{ navegador.visualiza( http://www.poo.c++"); }catch(errorconexion& e){ cout<<"fin del programa. "<<e.what()<<endl; } //maneja cualquiera de las subclases catch(...){ //maneja cualquier otra excepción cout<<"fin por excepción no prevista"<<endl; } } Tema 4 Corrección y Robustez 18