-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6b94c7a
commit f7f768e
Showing
2 changed files
with
265 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 && intensidad<cantidadEventosVividos | ||
} | ||
|
||
//mensajes de modificacion | ||
method liberarEmocion(descripcion, impactoEvento) { | ||
intensidad-=impactoEvento | ||
} | ||
|
||
method analizarSituacion(limiteIntensidad, descripcion, impactoEvento) { | ||
if(self.puedeLiberarse(limiteIntensidad)){ | ||
self.liberarEmocion(descripcion, impactoEvento) | ||
} | ||
cantidadEventosVividos+=1 | ||
} | ||
|
||
} | ||
|
||
|
||
class Furia inherits Emocion { | ||
var palabrotas = #{} | ||
|
||
//mensajes de consulta | ||
override method puedeLiberarse(limiteIntensidad) { | ||
//busca en la lista una palabra con 7 letras, si no la encuetra devuelve 0 | ||
const condicion = palabrotas.findOrDefault({palabrota=>palabrota.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 | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} |