2. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Groovy&Grails?
• Combinación perfecta para el desarrollo rápido
de aplicaciones
• Groovy Lenguaje de programación
• Grails Entorno completo de desarrollo
(framework MVC, base de datos, tests,
contenedor web)
3. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Groovy?
• Groovy en inglés significa genial
• Otro lenguaje de la plataforma Java
• Lenguaje de programación ágil y dinámico
• Características típicas de lenguajes como
Python, Ruby o Smalltalk
4. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Groovy?
• Sintaxis típica de Java
• Superclase de Java
• Evita la ceremonia de Java
5. Groovy & Grails: Desarrollo rápido de aplicaciones
¿A quién va dirigido Groovy?
• A los programadores Java
• A los programadores de scripts
• A los programadores ágiles y extremos
6. Groovy & Grails: Desarrollo rápido de aplicaciones
Comparando Java y Groovy
• Java & Groovy • Groovy
• Mecanismo de paquetes • Nuevas expresiones y
• Sentencias operadores
• Definición de clases y métodos • Nuevas formas de declarar
• Estructuras de control objetos
• Operadores, asignaciones y • Nuevas estructuras de control
expresiones • Nuevos tipos de datos con sus
• Manejo de excepciones operadores y expresiones
• Declaración de literales • Todo es un objeto
• Instanciación de objetos y
llámadas a métodos
7. Groovy & Grails: Desarrollo rápido de aplicaciones
Características de Groovy
• Brevedad del lenguaje
• Groovy evita la ceremonía que acompaña a Java
• Aumenta la expresividad del lenguaje (se dice más
con menos)
• Importa automáticamente varios paquetes
8. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Declaración de clases
class Libro {
private String titulo
Libro (String elTitulo){
titulo = elTitulo
}
String getTitulo(){
return titulo
}
}
9. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Scripts en Groovy
Libro cgg = new Libro('Curso GroovyGrails')
assert cgg.getTitulo() == 'Curso GroovyGrails’
assert getTituloAlReves(cgg) == 'sliarGyvoorG osruC'
String getTituloAlReves(libro) {
titulo = libro.getTitulo()
return titulo.reverse()
}
10. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• GroovyBeans
/*Un Bean en Java*/
class Libro{
String titulo;
String getTitulo(){
return this.titulo;
}
void setTitulo(String str){
this.titulo = new String(str);
}
}
11. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• GroovyBeans
/*Un Bean en Groovy*/
class Libro{
String titulo
}
12. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Cadenas de texto
• GString
def part1 = 'groovy'
def part2 = 'grails'
assert "me gusta groovy grails" == "me gusta $part1 $part2"
13. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Los números son objetos
def x = 1
def y = 2
assert x + y == 3
assert x.plus(y) == 3
assert x instanceOf Integer
14. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Listas, mapas y rangos
• Groovy facilita el trabajo con este tipo de colecciones
de datos
15. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Listas, mapas y rangos
def sesiones = [
'Introducción a Groovy',
'El lenguaje Groovy',
'Aspectos avanzados en Groovy']
assert sesiones[1] == 'El lenguaje Groovy'
sesiones[3] = 'Librerías propias de Groovy’
16. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Listas, mapas y rangos
def http = [
100 : 'Continue’,
200 : 'OK’,
400 : 'Bad Request'
]
assert http[200] == 'OK'
17. Groovy & Grails: Desarrollo rápido de aplicaciones
El código de Groovy
• Listas, mapas y rangos
def x = 1..10
assert x.contains(2)
assert x.size() == 10
assert x.reverse() == 10..1
18. Groovy & Grails: Desarrollo rápido de aplicaciones
Closures
• Bloques de código anónimo definido entre llaves
def ayer = {Date dia -> dia - 1}
ayer.call(new Date())
19. Groovy & Grails: Desarrollo rápido de aplicaciones
Closures
• Nos permiten ser más ágiles programando
['Pedro','Lola','Juan'].each { it -> println(it) }
20. Groovy & Grails: Desarrollo rápido de aplicaciones
Estructuras de control en Groovy
• Los típicos if-else, while, switch y try-catch-finally
• El bloque for utiliza la notacion for (i in x)
{ cuerpo}
for(i in 1..10)
println i
for(i in [1,2,3,4,5,6,7,8,9,10])
println i
21. Groovy & Grails: Desarrollo rápido de aplicaciones
Estructuras de control en Groovy
• O mediante closures
def alumnos = ['Pedro','Miguel','Alejandro','Elena']
alumnos.each{nombre -> println nombre}
22. Groovy & Grails: Desarrollo rápido de aplicaciones
Groovy para escribir DSL’s
• Un DSL (Domain Specific Language) es un
lenguaje de programación específico dedicado a
resolver un problema particular
• DSL’s típicos: reglas financieras o de base de
datos
23. Groovy & Grails: Desarrollo rápido de aplicaciones
Groovy para escribir DSL’s
• Con un DSL podremos tener cosas como:
//Funciones para sumar cantidades de tiempo
5.dias + 4.semanas + 3.horas
//Funciones típicas de GORM
def lista = Persona.findByNombre("Manuel”)
24. Groovy & Grails: Desarrollo rápido de aplicaciones
Groovy en el entorno Java
• Groovy puede ser ejecutado en la JVM:
• Compilando con groovyc
• Sin compilar
25. Groovy & Grails: Desarrollo rápido de aplicaciones
GDK: la librería Groovy
• GDK es una extensión a la librería JDK
• Facilita el acceso a base de datos y
procesamiento de XML
• Extiende las funcionalidades de Java
26. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Grails?
• “Grails es un framework para el desarrollo de
aplicaciónes web basado en el lenguaje de
programación Groovy, que a su vez se basa en
la Plataforma Java”
• Se basa en los paradigmas CoC (Convención
sobre Configuración) y DRY (don’t repeat
yourself)
27. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Grails?
• Basado en el patrón Modelo Vista Controlador
• Modelo Clases de dominio
• Controladores
• Vista Páginas GSP (Groovy Server Pages)
28. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Grails?
• El programador se olvida de determinados
aspectos de configuración
• Groovy acorta los tiempos de desarrollo
• Grails es un framework muy ágil
29. Groovy & Grails: Desarrollo rápido de aplicaciones
¿Qué es Grails?
• Grails no sólo es un framework de desarrollo
web que sigue el patrón MVC, sino que es una
plataforma completa de desarrollo
• Contenedor/servidor web
• Gestor de base de datos
• Empaquetado de la aplicación
• Realización de tests
30. Groovy & Grails: Desarrollo rápido de aplicaciones
Características de Grails
• Tests
• Tests unitarios
• Tests de integración
• Tests funcionales
31. Groovy & Grails: Desarrollo rápido de aplicaciones
Características de Grails
• Scaffolding
“Generación automática de código para las
cuatro operaciones básicas de cualquier
aplicación, que son la creación, lectura, edición
y borrado”
32. Groovy & Grails: Desarrollo rápido de aplicaciones
Características de Grails
• Mapeo objeto-relacional
• GORM (Grails Object Relational Mapping)
• Uno a uno
• Uno a muchos
• Muchos a muchos
33. Groovy & Grails: Desarrollo rápido de aplicaciones
Características de Grails
• Plugins
• Seguridad
• AJAX
• Realización de tests
• Búsqueda
• Informes
34. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Grails no sufre del síndrome NIH (Not Invented
Here) e integra las mejores soluciones de
software libre para conseguir un framework muy
robusto
35. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Groovy
• Lenguaje dinámico
• Potente y flexible
• Sintaxis sencilla
• Integración con Java
36. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Framework Spring
• Framework ampliamente utilizado por los
desarrolladores Java
• Muchos años de experiencia
37. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Hibernate
• Framework de persistencia objeto-relacional
• Es la base de GORM
• Mapea clases de dominio contra las tablas de una
base de datos
38. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• SiteMesh
• Renderizado HTML
• Patrón de diseño Decorator
39. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Frameworks AJAX
• Script.aculo.us
• Rico
• Prototype
40. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• Jetty
• Contenedor web
• No es el único sobre el que funciona Grails
41. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• HSQLDB
• Gestor de base de datos
• Almacenamiento en memoria o en disco
42. Groovy & Grails: Desarrollo rápido de aplicaciones
Software de código abierto
• JUnit
• Framework para la realización de tests unitarios
• Muy extendido en Java
44. Groovy & Grails: Desarrollo rápido de aplicaciones
Arquitectura
• Herramientas en línea de comandos
• Facilita la escritura de código
• Facilita la gestión de nuestros proyectos
• Basado en Gant, un sistema de automatización de
tareas basado en Apache Ant
45. Groovy & Grails: Desarrollo rápido de aplicaciones
Arquitectura
• Ejecución de un proyecto en Grails
46. Groovy & Grails: Desarrollo rápido de aplicaciones
Ejemplos desarrollados con Grails
• Jobsket (http://www.jobsket.com)
• Uifi (http://www.uifi.es)
• Aloja (http://www4.uc3m.es/aloja)
47. Groovy & Grails: Desarrollo rápido de aplicaciones
Enlaces de interés
• http://groovy.codehaus.org
• http://grails.org
• http://www.escueladegroovy.com
• http://www.jtech.ua.es/grails
48. Groovy & Grails: Desarrollo rápido de aplicaciones
Contacto
• http://www.frangarcia.net
• fgarciarico@gmail.com
• http://www.twitter.com/frangarcia
• http://www.linkedin.com/in/frangarcia
Editor's Notes
Paraquealgo se autodenominecomo genial, tienequeestarmuyseguro de simismo, al igualquealguiencuando le pone supropionombre a unaempresao un producto. Hay más de 100 lenguajesque se puedenejecutar en la Máquina Virtual de Java. Fuente: http://en.wikipedia.org/wiki/List_of_JVM_languages.
Cuandovemosunaclaseo un script en Groovy, detectaremossusimilitud con JavaSe puededecirque Groovy esunasuperclase de Java, puestoquepuedeutilizartodaslascaracterísticas de Java junto con algunasmáspropias de GroovyUno de los aspectosquemásrechazan de Java muchosdesarrolladoresessuverborrea en determinadasocasionesy se necesitademasiadocódigoparahacermuypoco.
A los programadores Java, puestoque en el fondo Groovy es JavaA los programadores de scripts, puestoquees un lenguajemuyexpresivoyquepuedeconseguir mucho con muypococódigo, algoque a estetipo de desarrolladores les encanta.A los programadoreságilesyextremosyaquepuedenimplementarfácilmentesusteorias (SCRUM, XP)
En Java, un simple programaqueimprima el típicoHolaMundo, suponeescribirmuchaslíneas de código. En Groovy se evita mucho de estecódigoparaconseguir lo mismo.Al evitarestecódigo “innecesario”, se aumenta la expresividad del lenguaje, puestoque con menos se dice másGroovy importaautomáticamente los paquetesgroovy.lang.*, groovy.util.*, java.lang.*, java.util.*, java.net.* yjava.io.*, asícomolasclasesjava.Math.BigIntegeryjava.Math.BigDecimal, asíquesiempre vas a poderutilizartodasestasclases sin necesidad de queseanimportadossuspaquetes al inicio del programa. Estotambiénesdiferente a Java, dondesólo se importaautomáticamente el paquetejava.lang.*.
Este sería un bean en Java que define la clase Libro con una única propiedad, sobre el cual se definen sus getters y sus setters
Este es el mismo bean en Groovy. En Groovy si tenemos una propiedad pública, automáticamente se crea el getter y el setter de dicha propiedad.
Estoque los programadores LAMPven normal, en Java no estan obvio y suele necesitarse mucho código para conseguir lo mismo
De igual forma que antes, esto es obvio para los programadores LAMP, pero no tanto para desarrolladores del mundo Java.
Groovy hereda de Java los típicos if-else, while, switch y try-catch-finally de Java, pero modifica la forma en la que se implementan los bucles for
Los tests unitarios son aquellos que comprueban la validez de nuestras clases sin tener en cuenta las relaciones con el resto del sistema (otras clases, sistema de ficheros, conexiones de red, etc)Los tests de integración comprueban la validez de nuestras clases cuando se relacionan con el resto del sistema (otras clases, sistema de ficheros, conexiones de red, etc)Los tests funcionales comprueban la funcionalidad de nuestra aplicación. Selenium y Canoo son dos frameworks que nos permitirán desarrollar este tipo de tests
Comentar la existenciatanto del scaffolding estáticocomoel dinámico. Comentar que posteriormente veremos en funcionamiento el scaffolding en Grails
El mapeo objeto-relacional nos permite trabajar convertir datos obtenidos de una base de datos relacional para poder trabajar con los paradigmas de los lenguajes orientados a objetos
Comentar la comunidadcadavezmásgrande de pluginsdesarrolladosporlos usuarios. Hay cerca de 350 plugins disponibles para la comunidad de desarrolladores Grails. Este número sigue en aumento.
Comentarque en la versión 1.2 se añade la posibilidad de utilizar Tomcat comocontenedorde aplicaciones. Hacer hincapie en que no es único sobre el que funcionarán nuestras aplicaciones hechas en Grails, sino que simplemente es este el que viene en la distribución de Grails para ejecutar nuestra aplicación
Comentar los tres niveles por defecto con los que viene Grails, (desarrollo, test y producción) y que posteriormente veremos un ejemplo del fichero de configuración del acceso a la base de datos