Está en la página 1de 6

EVALUACIÓN: Capítulo 3

1. ¿Qué es una excepción y para que se utiliza el mecanismo de gestión de


excepciones?

Las excepciones son eventos que ocurren durante la ejecución de un programa,


haciendo que éste salga de su flujo normal de instrucciones. Para que el sistema pueda
continuar su ejecución resulta necesario usar el mecanismo de gestión de excepciones.

2. Comenta la clasificación de las excepciones según su detección e indica ejemplos


de cada caso.

Tenemos cuatro tipos de excepciones:

Detectadas por el entorno y lanzadas de forma síncrona: Por ejemplo, una


división por cero, un intento de acceso a un array fuera de los límites, o un
acceso a un puntero no inicializado.

Detectadas por el entorno y lanzadas de forma asíncrona: Por ejemplo una


excepción debida a un fallo de alimentación, o al funcionamiento incorrecto de un
componente hardware.

Detectadas por el programa y lanzadas de forma síncrona: Entre las que se


encuentran una excepción lanzada por la violación de un aserto.

Detectadas por el programa y lanzadas de forma asíncrona: Por ejemplo, si una


tarea detecta una condición de error que provocará que otra tarea no pueda
terminar correctamente.

3. ¿Qué es el dominio de un manejador de excepciones?

El dominio especifica la zona del código en la que el manejador será activado si se


lanza la excepción. Es posible que dentro de un programa existan diferentes
manejadores para una excepción en particular, cada uno de los cuales lleva asociado un
dominio. Será, por tanto, la definición del dominio la que determine cuál es el manejador
encargado de tratar una ocurrencia de una excepción, según la parte del código en la
que ésta haya sido generada. Mientras mayor sea la precisión con la que se puede
definir un dominio mayor será también la precisión con la que puede detectar la fuente
del error.
4. ¿Cuáles son los modelos de gestión de excepciones y en que se diferencian entre
sí? Para cada modelo, Indica algunos lenguajes de programación que lo implementen.

Existen 3 tipos de modelos de gestión de excepciones: de reanudación, de terminación


e híbrido o mixto.

Modelo de reanudación: El modelo de reanudación se basa en asumir que el manejador


de excepciones ha sido capaz de reparar el problema que causó la excepción. Una vez
restaurado el estado válido, el invocador puede continuar la ejecución. Por ejemplo, en
caso de que ocurra un error al reservar memoria, debido a que no hay espacio
disponible, es posible que el manejador sea capaz de liberar algo de memoria y por
tanto es conveniente reanudar la ejecución en el punto en que se lanzó la excepción.

El modelo de reanudación lo soportan algunos lenguajes de programación como Pearl y


Mesa. También se han propuesto implementaciones para lenguajes que soportan el
modelo de terminación, como Java.

Modelo de terminación: En este modelo el invocador no retoma el control del flujo del
programa finalizando así la ejecución del código dentro del cual se produjo la
excepción.

Entre los lenguajes que soportan el modelo de terminación se encuentran Java, Ada, y
C++.
Modelo híbrido: es posible definir un modelo híbrido que comparta características de los
dos descritos, siendo el propio manejador el responsable de decidir si continúa la
operación que causó la excepción (por ejemplo, en caso de que sea un error
reparable), o por el contrario se termina.

5. ¿En qué consiste la propagación de excepciones? ¿Qué ocurre si una excepción no


es gestionada?

Es un enfoque utilizado por muchos lenguajes de programación modernos. En caso de


que no exista un manejador local definido para tratar la excepción, ésta se propaga hacia
atrás en la cadena de invocación. Esta búsqueda se realiza en tiempo de ejecución, por
lo que se considera un “enfoque dinámico”. El problema de este enfoque es que una
excepción puede propagarse fuera de su ámbito de visibilidad. Para evitar este
problema, se pueden utilizar manejadores por defecto, que atrapan cualquier tipo de
excepción. En caso de que no se encuentre un manejador adecuado, la excepción no
atrapada provocará la terminación de un programa secuencial. Si el programa contiene
más de un proceso, normalmente lo que se hace es abortar el proceso en el que
aparece la excepción no manejada. Sin embargo, no existe un consenso sobre si la
excepción debería propagarse o no al proceso padre.

6. ¿Cuándo es recomendable el uso de excepciones? Indica algunas de sus ventajas e


inconvenientes.

Las excepciones deben ser usadas para tratar con condiciones anormales, no para
realizar el control del flujo normal de ejecución de una aplicación. Qué es una condición
anormal y qué no lo es puede depender del contexto y del criterio del programador. Por
ejemplo, si se espera que la condición ocurra a menudo, debería considerarse normal,
ya que lanzar una excepción conlleva unos sobrecostes asociados. Se recomienda
además que throw sólo debería ser utilizado para señalizar un error, no para depurar
errores de programación. Por último, un manejador de excepción sólo debería atrapar
una excepción en caso de que esté capacitado para recuperar la situación, por ejemplo,
corrigiendo la causa del error o relanzando como un nuevo tipo de excepción.

Ventajas: Las excepciones proporcionan un método limpio y simple para separar el flujo
normal de ejecución del código de tratamiento de situaciones anormales o erróneas,
mejorando por tanto la legibilidad y facilidad de mantenimiento del código. Además, no
es necesario maquinaria extra para propagar tanto los casos de éxito como de error al
invocador y con el uso de las excepciones sólo el método interesado en gestionar el
error debe preocuparse de definir el código de recuperación. En el caso de los
lenguajes orientados a objetos, el uso de excepciones conlleva un agrupamiento
jerárquico de los tipos de error, que permite una mejor representación del dominio del
problema, y un tratamiento de los errores en diferentes granularidades.

Desventajas: Para poder implementar el mecanismo de gestión de excepciones, el


compilador introduce código extra. Este código puede tener que ser también verificado
durante las pruebas de la aplicación, lo que incrementa el esfuerzo y coste del
desarrollo. Además, puesto que el flujo de ejecución está determinado por la ocurrencia
de excepciones, puede afectar a la compresión del código por parte del programador,
lo que a su vez dificulta la escritura de código robusto.

7. ¿Cómo se genera una excepción en JAVA? Comenta los tipos básicos de excepción
predefinidos (jerarquía de excepciones) y qué representa cada uno de ellos.

JAVA proporciona un mecanismo avanzado de manejo de excepciones (Oracle, 2017),


(Oracle, The JavaTM Tutorials: Exceptions, 2016) que utiliza un modelo de terminación, es
decir, cuando se produce una excepción se finaliza el flujo de ejecución actual y se
devuelve el control al punto de invocación. Todos los tipos de excepciones se definen
como subclases de una clase base (Throwable, que se encuentra dentro del paquete
java.lang). Un objeto de la clase java.lang.Throwable, o de una de sus clase derivadas,
representa una excepción o error que puede ser lanzado tanto por la máquina virtual de
Java (JVM), como por una sentencia throw de código Java.

Java considera diferentes tipos de excepciones, todas ellas derivadas de la clase


Throwable, que a su vez se especializa en Exception y Error.

Exception y todas sus subclases se utilizan para todas aquellas excepciones de las que el
programa podría querer recuperarse. Un tipo particular de Exception son las
excepciones en tiempo de ejecución, representadas por la clase RuntimeException (que
es subclase directa de Exception), y sus derivadas. Son condiciones de error internas a la
aplicación, que ocurren durante la evaluación de expresiones, tales como un puntero
nulo o un índice fuera de rango, cuya recuperación podría ser posible.
Por otra parte, la clase Error y sus subclases representan condiciones excepcionales que
son externas a la aplicación, y que por tanto ésta normalmente no puede anticipar o
recuperarse del error. En otras palabras, no se espera que la aplicación se recupere.

8. ¿Cuál es la diferencia entre las excepciones comprobadas y las no comprobadas en


el lenguaje de programación JAVA? ¿Qué es el requisito atrapar o especificar?

Excepciones comprobadas: Son la clase Throwable y todas sus subclases que no son
RuntimeException o Error, ni sus subclases. Son condiciones excepcionales que están
sujetas a la comprobación por parte del compilador, por lo que si un método contiene
código que pueda lanzar un tipo de excepción, entonces debe gestionar la excepción
internamente o bien especificarlo en su definición mediante la cláusula throws.

Excepciones no comprobadas : Son las clases RuntimeException y sus subclases, y las


clases Error y sus subclases. Son condiciones excepcionales o de error que el
compilador no verifica, y por tanto es decisión del programador el “atraparlas” o no.

9. ¿Cómo se declara un nuevo tipo de excepción en JAVA? ¿Qué información puede


contener una excepción?

Un nuevo tipo de excepción en Java se define como una subclase de una excepción
existente
10. ¿En qué consiste el encadenamiento de excepciones? ¿Cuándo es útil esta
técnica?

Bajo ciertas condiciones, un manejador de excepciones responde a una excepción


generando otra excepción. No obstante, es útil mantener la información sobre qué
excepción provocó la actual. Habitualmente, este modo de proceder se utiliza para
encapsular una excepción, aportando información adicional y añadiendo capas de
abstracción. En lugar de propagar directamente a los niveles superiores el error ocurrido
en la capa de bajo nivel, se realiza una traducción que permite adaptar el significado a
las abstracciones de la capa superior.

También podría gustarte