Programación Orientada a Objetos - Unidad 5 Excepciones

20
TECNOLÓGICO NACIONAL DE MÉXICO Instituto Tecnológico Superior de Guasave Ingeniería en Sistemas Computacionales Programación Orientada a Objetos Unidad 5: Excepciones PROGRAMACIÓN ORIENTADA A OBJETOS

Transcript of Programación Orientada a Objetos - Unidad 5 Excepciones

Page 1: Programación Orientada a Objetos - Unidad 5 Excepciones

TECNOLÓGICO NACIONAL DE MÉXICOInstituto Tecnológico Superior de Guasave

Ingeniería en Sistemas ComputacionalesProgramación Orientada a Objetos

Unidad 5: Excepciones

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 2: Programación Orientada a Objetos - Unidad 5 Excepciones

Competencia de la unidad:Comprende y aplica la clasificación de archivos y operacionesbásicas sobre éstos para manipular su información.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 3: Programación Orientada a Objetos - Unidad 5 Excepciones

¿Qué son las Excepciones?

• Ocasionalmente es posible que ciertas instrucciones no funcionenadecuadamente o se encuentren con problemas de ejecución nocontemplados. C++ proporciona un mecanismo para manejar este tipode situaciones o errores en tiempo de ejecución llamado Excepciones.

• El mecanismo de excepciones está basado en las palabras clave: try,catch y throw.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 4: Programación Orientada a Objetos - Unidad 5 Excepciones

¿Qué son las Excepciones?

• La forma en que trabaja éste mecanismo es que cuando ocurre unevento o error inesperado C++ busca un segmento de código neutral,esto es, la sección final del mecanismo, el bloque catch.

• Si todo salió bien y no se presentaron errores, únicamente se ejecutaráel código del bloque try, por lo tanto en éste caso el bloque catch escompletamente ignorado.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 5: Programación Orientada a Objetos - Unidad 5 Excepciones

¿Qué son las Excepciones?

• Es importante señalar que los únicos errores que se pueden controlarson los producidos en tiempo de ejecución dentro del propio programa,conocidos como errores síncronos.

• Es imposible controlar errores debido al mal funcionamiento del sistemapor cortes eléctricos, bloqueos de la computadora, etc.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 6: Programación Orientada a Objetos - Unidad 5 Excepciones

• Podemos decir que el programa se prepara para cierta acción, decimos que "lo intenta". Para ello se especifica un bloque de código cuya ejecución se va a intentar ("try‐block") utilizando la palabra clave try:

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 7: Programación Orientada a Objetos - Unidad 5 Excepciones

• Un ejemplo sencillo sería la operación en la que se dividen dosnúmeros, no puede realizarse una división entre cero por lo que C++regresa un error crítico que provoca el cierre de la aplicación en caso deno ser controlado por medio de una excepción.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 8: Programación Orientada a Objetos - Unidad 5 Excepciones

El bloque catch

• Mediante la palabra clave catch especificamos el código encargado dereaccionar ante una determinada excepción o conjunto de excepciones.

• En C++ es obligatorio que tras un bloque try se incluya al menos unbloque catch, por lo que la sintaxis anterior quedaría completa de lasiguiente forma:

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 9: Programación Orientada a Objetos - Unidad 5 Excepciones

Lanzamiento de una excepción throw()

• Las excepciones no sólo las lanzan las funciones incluidas dentro de laslibrerías externas, sino que nosotros podemos querer informar que algono ha ido bien dentro de la lógica de nuestro programa, esto se realizapor medio de la instrucción throw().

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 10: Programación Orientada a Objetos - Unidad 5 Excepciones

El sistema tiene un número de excepciones predefinidas, que pueden, a su vez, ser base para nuevas excepciones definidas por el programador.

• logic_error(str): son, en teoría, predecibles y por lo tanto evitablesmediante chequeos adecuados insertados en lugares estratégicos.(#include <stdexcept>)

domain_error(str)

invalid_argument(str)

length_error(str)

out_of_range(str)

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 11: Programación Orientada a Objetos - Unidad 5 Excepciones

• runtime_error(str): son errores impredecibles y la única alternativa es su manejo en tiempo de ejecución. (#include <stdexcept>)

range_error(str)

overflow_error(str)

underflow_error(str)

• bad_alloc(): lanzada en fallo en new (#include <new>)

• bad_cast(): lanzada en fallo en dynamic_cast (#include <typeinfo>)

• bad_typeid(): lanzada en fallo en typeid (#include <typeinfo>)

• bad_exception(): lanzada en fallo en la especificacion de excepciones lanzadas por una función. (#include <exception>)

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 12: Programación Orientada a Objetos - Unidad 5 Excepciones

Excepciones definidas por el lenguaje

• Como ya lo vimos en diapositivas anteriores es posible utilizar lasexcepciones que el propio lenguaje C++ proporciona para ciertosaspectos, como verificar si se produce un error al asignar memoria a unvector, etc.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 13: Programación Orientada a Objetos - Unidad 5 Excepciones

• Ejemplo: vemos el ejemplo de como validar por medio de excepciones unprograma crea arreglos y les asigna memoria, en este caso utilizamospunteros debido a que los arreglos se crean de forma dinámica por lo quese debe asignar un espacio de memoria para cada uno.

• Definición de puntero: Un puntero es una variable que contiene ladirección de memoria de un dato o de otra variable que contiene al dato enun arreglo.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 14: Programación Orientada a Objetos - Unidad 5 Excepciones

#include <iostream>

#include <exception>

using namespace std;

class arreglos {

public:

double *ptr[50];

arreglos();

void dinamico();

};

arreglos::arreglos() { }

PROGRAMACIÓN ORIENTADA A OBJETOS

void arreglos::dinamico() {

try {

for (int i= 0 ; i < 50; i++) {

// asignación dinámica de memoria

ptr[i] = new double[50000000];

cout << "Reservando memoria "

<< i << endl;

}

} catch (bad_alloc ex){

cout << "Error: " << ex.what() << endl;

}

}

int main(){

arreglos arr;arr.dinamico();return 0;

}

Ejemplo:

Page 15: Programación Orientada a Objetos - Unidad 5 Excepciones

Excepciones lanzadas por el usuarioEjemplo de como lanzar excepciones: Se lanzará una excepción al momento decapturar un numero menor o igual a cero.

try {

cout << “capture num: ”;

cin>>num;

fflush(stdin);

if (num <=0) throw invalid_argument(“Numero no valido”);

} catch (invalid_argument e) {

cout << “Error: ” << e.what();

}

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 16: Programación Orientada a Objetos - Unidad 5 Excepciones

• Otra forma de lanzar excepciones es disparándolas en una funciónindependiente, la cual se encarga de evaluar los argumentos necesariosy determinar si hay o no que lanzar la excepción.

• struct: esta orden se emplea para agrupar variables de tiposiguales o diferentes en un solo registro, con la misma sepueden crear estructuras anónimas o estructuras con nombre;

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 17: Programación Orientada a Objetos - Unidad 5 Excepciones

Ejemplo de como lanzar una excepción por medio de un método auxiliar

PROGRAMACIÓN ORIENTADA A OBJETOS

//creamos una clase que contenga un structclass valNum {public:struct NUM_NOVALIDO { };valNum();valNum(int x);int num;

};valNum::valNum(){ // contructor

num=0;}// metodo que lanza la excepción en caso de recibir un // entero menor o igual a cerovalNum::validar(int x) {if (num <= 0) {

throw NUM_NOVALIDO();}

}

// capturamos un número entero y se llama la validaciónint main() {

valNum v;try {

cout<<"Número: "; cin >> v.num; fflush(stdin);v.validar(v.num);

} catch ( ... ) {// evalua cualquier tipo de excepcion recibidacout << "Error inesperado" << endl;

}cin.get();

}

Page 18: Programación Orientada a Objetos - Unidad 5 Excepciones

Ejercicio:

• Realice un programa utilizando POO, debe capturar un número yobtener su factorial.

• El factorial de un número (n!) es la multiplicación de los número quevan del 1 a dicho número.

• El programa debe validar desde una función independiente que no secapturen números menores o iguales a cero, en caso de hacerlo debedevolver una excepción y mostrar un error en pantalla.

• Debe incluir un menú que permita calcular un número indeterminadode factoriales.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 19: Programación Orientada a Objetos - Unidad 5 Excepciones

Práctica:

• Realice un programa utilizando POO, debe capturar dos números yrealice la división de ambos.

• Cuando un número es dividió entre cero C++ produce un error, en estecaso debes realizar la división en una función que regresa el resultado,en caso de recibir un divisor cero debes lanzar una excepción yregresarla al punto donde llamaste la función y mandar el mensaje a lapantalla.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 20: Programación Orientada a Objetos - Unidad 5 Excepciones

Proyecto para manejo de excepciones

• Utilizando POO desarrolle un programa que capture un número, y despuéspregunte a que raíz se le desea convertir.

• Los números negativos reales tienen la propiedad de que no pueden serconvertidos a raíces pares.

• Cuando un número negativo sea capturado y se intente convertir a una raízpar debes lanzar una excepción e indicar en pantalla que no es posiblerealizar el cálculo.

• Debes utilizar todos los recursos que C++ te proporciona para lograr validary lanzar la excepción.

PROGRAMACIÓN ORIENTADA A OBJETOS