Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin
Quienes soy?
it
Que es Grails?
Framework de desarrollo web Construido sobre frameworks existentes (hibernate, spring, sitemesh, quartz, etc) Utiliza Groovy como lenguaje de programacin Compatible con libreras Java Plugins desarrollados por usuarios Toma principios de RoR
Grails
Struts, Wicket, Cocoon, Click, GWT, JSF, Seam, RIFE, Shale, Spring, Stripes, Tapestry, WebWork, etc
Grails
Grails no reinventa la rueda, se basa en frameworks existentes e introduce un lenguaje dinmico Principios: DRY Dont repeat yourself Convention-over-Configuration - minimiza la configuracin en archivos externos Groovy Permite desarrollo gil De la empresa SpringSource, actualmente comprada por VMWare Versin actual 1.3.4
Rails/Grails
PHP
Ventajas
Desarrollo rpido Alta productividad Reutilizacin de cdigo No debemos reinventar la rueda, permite concentrarnos en la solucin del problema
Bajar y extraer la ltima distribucin de Grails desde la pgina (grails.org) Definir variable GRAILS_HOME apuntando al directorio de Grails Aadir /bin de Grails a la variable PATH del sistema Asegurarse que est definido el JAVA_HOME apuntando a la JDK Descargar IDE
Groovy
Caractersticas Generales
Lenguaje de programacin orientado a objetos Alternativa al lenguaje de programacin Java Dinmico con funcionalidades similares a la de Python, Ruby, Pearl y Smalltalk Puede compilarse a Java bytecode standard y ser usado en cualquier projecto Java
Closures Cdigo reutilizable y asignable Ej: each Operadores pueden ser sobrecargados Ej: Operador + puede ser usado para suma aritmtica o concatenacin de Strings Operador de navegacin segura: ? Comprueba que no haya nulls para continuar
Lenguaje: Strings
// Strings normales def nombre = Juan def apellido= Perez assert nombre * 2 == Juan Juan // true // GString def nombreCompleto = "$nombre $apellido" assert nombreCompleto == Juan Perez // true // Strings multi-lnea def multi = '''\ Esto es una prueba de strings multi-linea'''
Lenguaje: Nmeros
Java
Soporta tipos primitivos y objetos Tiene clases wrapper para permitir conversin (ej: Integer) Java 5+ tiene autoboxing Trata todo como objetos a nivel de lenguaje Se utiliza BigDecimal por tipo por defecto para no enteros La sobrecarga de operadores se aplica a todas las operaciones comunes con nmeros
Groovy
Lenguaje: Nmeros
def x = 3 def y = 4 assert x + y == 7 // true assert x.plus(y) == 7 // true assert x instanceof Integer // true assert 4+ 3== 7 // 4.plus(3) assert 4-3== 1 // 4.minus(3) assert 4* 3== 12 // 4.multiply(12) assert 4% 3== 1 // 4.mod(3) assert 4** 3== 64 // 4.power(3) assert 4/ 3== 1.3333333333 // 4.div(3) assert 4.intdiv(3) == 1 // divisin normal de enteros
Lenguaje: Fechas
Casi el mismo soporte que Java Utiliza java.util.Date o java.util.Calendar Tiene soporte especial para cambiar fechas
More utility methods expected for inputting and outputting dates Posibilidad de cambio con la especificacin JSR 310
Rangos
Sintaxis especial para diversos tipos de rangos def letras = 'a'..'z' def numeros = 0..<10
Lenguaje: Listas
assert [1,2,3,4] == (1..4) assert [1,2,3] + [1] == [1,2,3,1] assert [1,2,3] << 1 == [1,2,3,1] assert [1,2,3,1] -[1] == [2,3] assert [1,2,3] * 2 == [1,2,3,1,2,3] assert [1,[2,3]].flatten() == [1,2,3] assert [1,2,3].reverse() == [3,2,1] assert [1,2,3].intersect([4,3,1]) == [3,1] assert [1,2,3].collect{ it+3 } == [4,5,6] assert[1,2,3,1].unique().size() == 3 assert [1,2,3,1].count(1) == 2 assert [1,2,3,4].min() == 1 assert [1,2,3,4].max() == 4 assert [1,2,3,4].sum() == 10 assert [4,2,1,3].sort() == [1,2,3,4] assert [4,2,1,3].findAll{ it%2 == 0 } == [4,2]
Lenguaje: Mapas
def mapa = [a:1, 'b':2] println mapa // ["a":1, "b":2] println mapa.a// 1 println mapa['a'] // 1 println mapa.keySet() // ["a", "b"]
Lenguaje: Closures
Datos y cdigo pueden ser almacenados en variables, ser pasados, combinados en formas estructuradas para formar algoritmos y datos ms complejos duplicar = { num -> num * 2 } println duplicar(3) // => 6 procesarLuegoImprimir = { num, closure -> num = closure(num); println "num es $num } procesarLuegoImprimir(3, doubleNum) // => num es 6 procesarLuegoImprimir(10) { it / 2 } // => num es 5
Expresiones Regulares
a?
a* a+ a|b [woeirjsd] [1-9] [^13579] (ie) ^a a$
machea 0 o 1 ocurrencia de a
machea 0 o ms ocurrencias de a machea 1 o ms ocurrencias de a machea con a o b machea cualquier carcter especificado machea cualquier carcter en el rango machea cualquier carcter que no est contenido agrupar una expresin machea un a al comienzo de una lnea machea un a al final de una lnea
a o string vaco
string vaco, a, aa, aaa, etc 'a', 'aa', 'aaa', etc 'a' or 'b' 'w', 'o', 'e', 'i', 'r', 'j', 's', 'd' '1', '2', '3', '4', '5', '6', '7', '8', '9' incluso digitos y otros caracteres ie a a
Looping
while (expr) { } for
Para cualquier array, coleccin, Map, etc Se puede usar el for de Java
each() eachWithIndex()
Con closures
Switch
Es compatible con Java Maneja cualquier valor para el Switch
instanceof (si el valor del case es una clase) expresiones regulares colecciones (incluido rangos)
Ejemplo de Switch
Asignaciones mltiples
Ejemplos:
def (a, b) = [1, 2] //a ==1 y b == 2 def (Integer i, String s) = [1, 'Groovy'] def (a, b, c) = [1,2]
a
== 1 b == 2 c == null
Parntesis opcionales
println Hola Mundo! ficha.mover desde:[3,4], hasta:[4,5] def bean = new Expando(nombre:Juan", lugar:Montevideo", id:123)
Navegacin segura
Extras
Ejecutar Proceso proc = "ls -l".execute() println(proc.in.text) println(proc.returnCode()) Bajar pgina web print http://www.google.com".toURL().text Agregar un JAR al classpath en tiempo de ejecucin this.getClass().classLoader.rootLoader.addURL(ne w File(nuevojar.jar").toURL())
Builders
Surgen por las complicaciones que implican las estructuras de rbol en los lenguajes tradicionales Provee un modo fcil de construir estructuras de datos jerrquicas Lo hace a travs de closures Por defecto: NodeBuilder, MarkupBuilder, AntBuilder y SwingBuilder
Tips
[1,2,3].each { print it; return } //imprime 123 [1,2,3].each { print it; throw new RuntimeException() } Shuffling
En java == significa identidad para objetos y equals para tipos primitivos Identidad en groovy con is
foo.is(bar)
Declarando un array
Qu es MVC?
Modelo-Vista-Controlador Patrn de arquitectura y diseo de software Descrito por primera vez en 1979 Muy utilizado en aplicaciones web
Modelo
Independiente de la presentacin
Vista
Capa de presentacin
Muestra informacin Muestra resultados de la lgica del negocio No le interesa como se obtuvo la informacin, o de donde viene (responsabilidad del modelo)
Controlador
Capa de control Sirve como la conexin lgica entre las acciones del usuario y los servicios del negocio Responsable de las decisiones de presentacin (ej: idioma, niveles de acceso, etc) Un request entra a la aplicacin a travs de la capa de control, la cul decidir como debe ser manejado y que informacin debe ser retornada
Flujo MVC