sábado, 31 de enero de 2015

Groovy en ejemplos ... no. 6

Seguimos con la serie de ejemplos de código en Groovy. Una de las características de este lenguaje es que podemos añadir "extensiones" a una clase previamente definida.  Esto es definir nuevas funcionalidades por llamarlo de una manera.

Tenemos la siguiente clase:

class Ventana{
  int alto
}

Posee tan solo un atributo de tipo int (alto), pero si queremos agregarle un método/atributo (por ej. ancho) podemos hacerlo mediante  ExpandoMetaClass.

class Ventana{
  int alto
}

//main del programa
Ventana.metaClass.getAncho << {-> 200}
def ventana=new Ventana()

ventana.with{ alto=150 }
println "Alto: $ventana.alto"
println "Ancho:$ventana.ancho"


Con esto obtenemos métodos y atributos de manera dinámica.

En este ejemplo hacemos uso de las "bondades" de ExpandoMetaclass, agregamos nuevos métodos y propiedades a las clases previamente definidas

abstract class SuperHeroe{
abstract void volar()
}

abstract class Vigilante{
boolean tieneArmadura=false

boolean tieneAyudante=false
}

class Superman extends SuperHeroe{
int edad
void volar(){
println "Superman puede volar"
}
}

class Batman extends Vigilante{
String nombre
}

static main(args) {
Batman.metaClass.getEdad << {-> 39 }
Batman.metaClass.getAyudante << {-> "Robin"}

Superman.metaClass.getNombre << {-> "Clark Kent"}


def batman=new Batman(nombre:"Bruce Wayne")
def superman=new Superman(edad:38)

batman.with{
tieneArmadura=true

tieneAyudante=true
}

Batman.metaClass.verDatos << { println "nombre real: $nombre, edad: $edad, ayudante: $ayudante"}
Superman.metaClass.verDatos << {println "nombre real: $nombre, edad: $edad"}
superman.verDatos()
superman.volar()

if(batman.tieneAyudante && batman.tieneArmadura){
   batman.verDatos()

}

}



Esta funcionalidad nos permite agregar constructores, métodos o sobre escribirlos, etc.

No hay comentarios:

Publicar un comentario

Vibe Coding (la programación vía IA): ¿el futuro de la programación?

Vibe Coding es un nuevo paradigma de programación, una nueva forma de crear código. Es un enfoque emergente en el desarrollo de sof...

Etiquetas

Archivo del blog