From ac9de6da1f0427e8b72f4d88eb3028b7074eee5c Mon Sep 17 00:00:00 2001 From: rgonzalezt Date: Mon, 30 Sep 2024 14:10:08 -0300 Subject: [PATCH] Create index.md --- content/blog/2024/objetos/clase-21/index.md | 94 +++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 content/blog/2024/objetos/clase-21/index.md diff --git a/content/blog/2024/objetos/clase-21/index.md b/content/blog/2024/objetos/clase-21/index.md new file mode 100644 index 00000000..2b9533a2 --- /dev/null +++ b/content/blog/2024/objetos/clase-21/index.md @@ -0,0 +1,94 @@ +--- +title: Manejo de errores +date: '2024-09-30' +description: Clase 21 +tags: [objetos, excepciones] +--- + +# Tarea + +- Continuar realizando la entrega 2 del tp de objetos. **Hacer diagrama de clases**. +- Realizar los tests del ejercicio de Rick y Morty. + +# Introducción + +Construimos el código para el enunciado de [Rick & Morty](https://docs.google.com/document/d/1nUlXmrR-JS9pM2vG7Q5ggIJzF-AsHopRjZutd2BhLOI/edit) + +Cuando ejecutamos un programa, pueden ocurrir problemas que hacen que éste no se comporte de la manera que esperábamos. En otras palabras, pueden ocurrir **errores.** ¿Qué deberíamos hacer ante un error? + +Si ignoramos el error, se puede convertir en una _bola de nieve_ y desencadenar en otros errores, que pueden ser peores :fire:. Por lo tanto, lo mejor que podemos hacer es **fallar** lo antes posible. Una forma de lograr esto es mediante el uso de **excepciones**. + +# Excepciones + +Una excepción es una indicación de que algo salió mal en la ejecución de nuestro programa. + +¿Y cómo las podemos utilizar en Wollok? +Hay dos maneras de hacerlo: + +- Usando el mensaje `error`, el cual entienden los objetos y nos sirve para lanzar una excepción: + +```java +self.error("mensaje del error") +``` + +- Usando throw y la clase `Exception`: + +```java + throw new Exception(message = "mensaje del error") +``` + +También podemos crear nuestras propias excepciones :wink:. Para esto podemos crear una clase que herede de `Exception`. Esto nos va a ser útil más adelante.: + +```java +class ExcepcionParticularDelPrograma inherits Exception {} +``` + +y la lanzamos como antes: + +```java +throw new ExcepcionParticularDelPrograma(message = "mensaje del error") +``` + +Además, es importante que nuestros mensajes de excepción sean expresivos. Así si algo rompe :boom: sabremos por qué :grinning:. + +Ahora, todo bien, pero ¿para qué me sirven en la ejecución del programa? ¿Qué hacen? + +```java +class Summer inherits Beth{ + override method irseDeViaje(unRick) { + if (self.esLunes()) { + super(unRick) + } else { + throw new NoPuedoIrmeDeViajeException(message = "¡Sólo puedo irme de aventura los lunes!") + } + } + + +} +``` + +Luego de tirar la excepción se corta la ejecución del programa, por lo que si había código después, no será ejecutado. Además, decimos que las excepciones _burbujean_ por lo que si otro objeto manda un mensaje y ese método lanza la excepción, también cortará el flujo de ejecución para ese objeto. + +Entonces, ¿si lanzamos una excepción esta _subirá_ indefinidamente? Bueno, en realidad no, porque si esto pasara cada vez que se lanza una excepción terminaría nuestro programa. Así que ahora veremos una forma de manejar excepciones... + +# Atrapando Excepciones + +Cuando sabemos qué hacer ante una excepción, tenemos la opción de **atrapar** la excepción y utilizar otro código que se tiene que ejecutar si ocurrió tal excepción. :confetti_ball: +En Wollok, esto se realiza de la siguiente forma: + +```java +try { + // código que puede fallar +} catch e : ExcepcionQueQuieroAtrapar { + // código a ejecutar si ocurre ExcepcionQueQuieroAtrapar +} +``` + +Algo a notar, es que la excepción a atrapar tiene que ser **la que quiero atrapar y lo menos general posible.** Si atrapo, por ejemplo, `Exception`, seguramente esté atrapando errores que no hubiese querido atrapar como errores de que no se entiende el mensaje o la división por cero). Por este motivo cobra relevancia crear nuestras propias excepciones. + +## Links útiles + +- [Video de la clase de años anteriores](https://drive.google.com/file/d/1Q1Psk2BOOhWnzcN1-HHqHvOxte3eyJLd/view) +- [Código de la clase](https://github.com/pdep-lunes/pdep-clases-2024/tree/main/Objetos/Clase06/src) +- [Diagrama de clases de la clase](https://github.com/pdep-lunes/pdep-clases-2024/blob/main/Objetos/Clase06/diagrama.png) +