From f7f768ecf57e96932dc7c893ae89e1036f588965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9sar=20Tom=C3=A1s=20Gonz=C3=A1lez=20Gr=C3=BCnwaldt?= <164582306+cesartomasG@users.noreply.github.com> Date: Fri, 22 Nov 2024 12:00:35 -0300 Subject: [PATCH] Add files via upload --- parcial_obj/intensamente.wlk | 173 +++++++++++++++++++++++++++++ parcial_obj/intensamenteTest.wtest | 92 +++++++++++++++ 2 files changed, 265 insertions(+) create mode 100644 parcial_obj/intensamente.wlk create mode 100644 parcial_obj/intensamenteTest.wtest diff --git a/parcial_obj/intensamente.wlk b/parcial_obj/intensamente.wlk new file mode 100644 index 0000000..0acafa5 --- /dev/null +++ b/parcial_obj/intensamente.wlk @@ -0,0 +1,173 @@ +class Persona{ + //atributos + const nombre + var edad + var emocionElevada = 100 + var emociones = #{} + + //mensajes de consulta + method esAdolescente() = edad>=12 && edad<=19 + + method estaPorExplotar(){ + //busca en la lista una emocion que no pueda liberarse, si no la encuentra devuelve 0 + const condicion = emociones.findOrDefault({emocion=>!emocion.puedeLiberarse(emocionElevada)}, 0) + + //si la condicon es igual a 0, todas las emociones pueden liberarse y esta por explotar + return condicion==0 + } + + //mensajes de modificacion + method otorgarEmocion(emocion) { + emociones.add(emocion) + } + method modificarLimiteIntensidad(nuevoValor) { + emocionElevada=nuevoValor + } + + method aceptarEvento(descripcion, impactoEvento) { + emociones.forEach({emocion=>emocion.analizarSituacion(emocionElevada, descripcion, impactoEvento)}) + } +} + + +class Evento{ + var descripcion + var impacto + + method ocurrir(persona) { + persona.aceptarEvento(descripcion, impacto) + } + + method ocurrirColectivamente(personas) { + personas.forEach({persona => self.ocurrir(persona)}) + } +} + + +class Emocion { + //atributos + var intensidad + var cantidadEventosVividos = 0 + + //mensajes de consulta + method informarEventosVividos() = cantidadEventosVividos + + method informarIntensidad() = intensidad + + method puedeLiberarse(limiteIntensidad) { + return intensidad>=limiteIntensidad && intensidadpalabrota.length()>=7}, 0) + + return condicion!=0 && intensidad>=limiteIntensidad + } + + //mensajes de modificacion + method aprenderPalabrota(palabrota) { + palabrotas.add(palabrota) + } + + override method liberarEmocion(descripcion, impactoEvento) { + //aca no me acordaba como obtener el primer elemento pero la logica creo que esta ok + const element = palabrotas.get(0) + palabrotas.remove(element) + intensidad-=impactoEvento + } + +} + +class Alegria inherits Emocion { + //mensajes de consulta + override method puedeLiberarse(limiteIntensidad) { + return intensidad>=limiteIntensidad && cantidadEventosVividos.even() + } + + + + //mensajes de modificacion + override method liberarEmocion(descripcion, impactoEvento) { + intensidad-=impactoEvento + if(intensidad<0){ + intensidad = intensidad*-1 + } + } +} + +class Tristeza inherits Emocion { + var causa = "melancolia" + + //mensajes de consulta + override method puedeLiberarse(limiteIntensidad) { + return intensidad>=limiteIntensidad && causa!="melancolia" + } + + //mensajes de modificacion + override method liberarEmocion(descripcion, impactoEvento) { + causa=descripcion + intensidad-=impactoEvento + } + +} + +//desagrado y temor no fue necesario realizarlas ya que utilizan solo lo gestionado en la clase principal + +// class Desagrado inherits Emocion + +// class Temor inherits Emocion + + + +//INTENSAMENTE 2 +/*En este caso, la ansiedad solo va a poder liberarse cada 5 eventos (el resto de la cantidad de eventos vividos / 5 == 0) +cuando su intensidad sea >= al limite establecido, cuando eso suceda se libera la emocion y ocurre un "momento ansioso" +cuando hayan transcurrido al menos 3 momentos ansiosos, su intensidad sera de 100 puntos + +En este caso se utiliza HERENCIA de la clase emocion para conocer la intesidad, la cantidadEventosVividos +y para gestionar el analisis de la situacion (lo que gestiona la liberacion de las emociones) + +Por otro lado, se aplica POLIMORFISMO cuando se reescriben los metodos puedeLiberarse y liberarEmocion, los cuales son +los encargados de aplicar los cambios al liberar emociones o corroborar que dichas emociones estan aptas para liberarse +En este caso se sobreescriben para sumarles funcionalidad +*/ +class Ansiedad inherits Emocion { + var momentosAnsiosos = 0 + + //mensajes de consulta + override method puedeLiberarse(limiteIntensidad) { + return intensidad>=limiteIntensidad && (cantidadEventosVividos%5==0) + } + + method desestabilizado() = momentosAnsiosos>3 + + //mensajes de modificacion + override method liberarEmocion(descripcion, impactoEvento) { + momentosAnsiosos+=1 + intensidad-=impactoEvento + if(self.desestabilizado()){ + intensidad=100 + momentosAnsiosos=0 + } + } +} \ No newline at end of file diff --git a/parcial_obj/intensamenteTest.wtest b/parcial_obj/intensamenteTest.wtest new file mode 100644 index 0000000..5dfbdcd --- /dev/null +++ b/parcial_obj/intensamenteTest.wtest @@ -0,0 +1,92 @@ +import intensamente.* + +//Todos los integrantes de un grupo viven un mismo evento +test "La furia de Juan deberia mantenerse con intensidad 100" { + const evento = new Evento(descripcion="asesinato", impacto=50) + + const furia = new Furia(intensidad = 100) + const alegria = new Alegria(intensidad = 20) + const tristeza = new Tristeza(intensidad = 10) + const desagrado = new Emocion(intensidad = 35) + const temor = new Emocion(intensidad = 68) + const ansiedad = new Ansiedad(intensidad = 40) + + const Juan = new Persona(nombre="Juan", edad=14) + const Pedro = new Persona(nombre="Pedro", edad=16) + const Jesus = new Persona(nombre="Jesus", edad=19) + + furia.aprenderPalabrota("Hojota") + + Juan.otorgarEmocion(furia) + Juan.otorgarEmocion(alegria) + Pedro.otorgarEmocion(tristeza) + Pedro.otorgarEmocion(desagrado) + Jesus.otorgarEmocion(temor) + Jesus.otorgarEmocion(ansiedad) + + const personas = [Pedro,Juan,Jesus] + + evento.ocurrirColectivamente(personas) + + assert.equals(furia.informarIntensidad(), 100) +} + +test "La alegria de Juan deberia tener intesidad 50 tras el evento" { + const evento = new Evento(descripcion="asesinato", impacto=50) + + const furia = new Furia(intensidad = 100) + const alegria = new Alegria(intensidad = 100) + const tristeza = new Tristeza(intensidad = 10) + const desagrado = new Emocion(intensidad = 35) + const temor = new Emocion(intensidad = 68) + const ansiedad = new Ansiedad(intensidad = 40) + + const Juan = new Persona(nombre="Juan", edad=14) + const Pedro = new Persona(nombre="Pedro", edad=16) + const Jesus = new Persona(nombre="Jesus", edad=19) + + Juan.otorgarEmocion(furia) + Juan.otorgarEmocion(alegria) + Pedro.otorgarEmocion(tristeza) + Pedro.otorgarEmocion(desagrado) + Jesus.otorgarEmocion(temor) + Jesus.otorgarEmocion(ansiedad) + + const personas = [Pedro,Juan,Jesus] + + evento.ocurrirColectivamente(personas) + evento.ocurrirColectivamente(personas) + evento.ocurrirColectivamente(personas) + + assert.equals(alegria.informarIntensidad(), 100) +} + +test "La tristeza de Pedro deberia mantenerse con intensidad 100" { + const evento = new Evento(descripcion="asesinato", impacto=50) + + const furia = new Furia(intensidad = 100) + const alegria = new Alegria(intensidad = 200) + const tristeza = new Tristeza(intensidad = 100) + const desagrado = new Emocion(intensidad = 35) + const temor = new Emocion(intensidad = 100) + const ansiedad = new Ansiedad(intensidad = 40) + + const Juan = new Persona(nombre="Juan", edad=14) + const Pedro = new Persona(nombre="Pedro", edad=16) + const Jesus = new Persona(nombre="Jesus", edad=19) + + Juan.otorgarEmocion(furia) + Juan.otorgarEmocion(alegria) + Pedro.otorgarEmocion(tristeza) + Pedro.otorgarEmocion(desagrado) + Jesus.otorgarEmocion(temor) + Jesus.otorgarEmocion(ansiedad) + + const personas = [Pedro,Juan,Jesus] + + evento.ocurrirColectivamente(personas) + evento.ocurrirColectivamente(personas) + evento.ocurrirColectivamente(personas) + + assert.equals(temor.informarIntensidad(), 100) +} \ No newline at end of file