G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.
tema_anterior Tema 5: Mecanismo de tratamiento de Excepciones y Errores tema_siguiente
  1. Introducción.
  2. Control de excepciones.
  3. Generación excepciones.
  4. Definición de nuevas excepciones.[ejercicios]

5.1- Introducción

Germán Bordel - Docencia - Doctorado (con Angel Franco)

En la ejecución de sentencias de un programa, pueden producirse situaciones diferentes de las deseadas: por ejemplo la imposibilidad de abrir un fichero por diversos motivos, la imposibilidad de efectuar una división porque la expresión denominador da cero como resultado de su evaluación, la imposibilidad de acceder a un determinado objeto por utilizar erroneamente una referencia nula, etc.

Todas estas situaciones requieren un control por parte del progamador de modo que cada situación "no deseada" tenga una actuación consecuente de modo que se lleven a cabo las actuaciones necesarias para "repararla" o para terminar "ordenadamente" la ejecución del programa.

En los lenguajes de programación "clásicos" no se dispone de otro mecanismo para llevar a cabo esta función que la sentencia condicional, que permite establecer dos caminos de ejecución, uno para la situación "deseada", y otro para la "problemática". De este modo ambos caminos forman parte del algoritmo, que ya no solo es el algoritmo de ejecución de una determinada tarea, sino que es esto más el contorl de toda la combinatoria de posibles situaciones "problemáticas".

En los lenguajes orientados a objeto, con su mayor capacidad de modularización, se cuenta con otro mecanismo más potente (en terminos estructurales) de gestion de estas situaciones. Este mecanismo permite separar el algoritmo de ejecución de una tarea de los algoritos de solución de las diversas situaciones "problemáticas" que pueden surgir en el anterior. Para ello, cuando se da una de dichas situaciones, la ejecución del algoritmo "principal" se aborta y se trasfiere a otro punto donde se encuentra el algoritmo de gestion del problema concreto producido, pasandole información de lo sucedido. A este mecanismo, cuya estructuración estudiaremos a continuación, se le denomina "mecanismo de excepciones" ya que permite tratar las situaciones "excepcionales" que surgen en la ejecución "normal" de un programa. En Java se distinguen "excepciones" y "errores" para separar aquellas situaciones que, en principio, podrian ser recuperables, de las que determinan la imposiblidad de seguir adelante en la ejecución del programa, aunque esta distinción no sea estricta al cien por cien. En todo caso el mecanismo es exactamente igual para ambas consideraciones.

La mecánica para el paso de información desde el punto en que se produce la situación "excepcional" al punto en que se atiende a dicha situación consiste en el paso de un objeto, es decir, al producirse la situación excepcional se crea un objeto conteniendo información sobre lo sucedido, y la parte de código que atiende a la situación recibe este objeto como si se tratara de una función recibiendo un parámetro.

Si bien esta mecánica de paso de información es similar a la usada en el paso de parámetros a métodos, no existe una llamada explicita al código que trata la situación excepcional, por lo que suele decirse que dichos objetos son "arrojados" en el momento de la excepcion (arrojados "al aire" ya que no se especifica un destinatario para los mismos en ese momento), y "capturados" por el bloque de código que se hace cargo de la situación.

Todos los objetos que se "arrojan" se encuentran en un subárbol de la jerarquía de clases que comienza con la clase Throwable y que tiene a su vez dos subárboles cuyas raices son Error y Exception. El los siguientes apartados vamos a ver cómo programar separando el algoritmo para la situción correcta y los que atienden a situaciones excepcionales, cómo producir excepciones utilizando objetos de los ya existentes en la mencionada jerarquía, y, por último, como generar nuevos objetos "arrojables".

Siguiente punto: 5.2- Control de excepciones


Plataforma de soporte a curso y contenidos (c) German Bordel 2005.