Your SlideShare is downloading. ×
Taller DSLs en Groovy - SpringIO 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Taller DSLs en Groovy - SpringIO 2011

1,540
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,540
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Taller  de  DSLs  en  Groovy   Alberto Vilches http://albertovilches.com Twitter @albertovilches
  • 2. QUÉ ES UN DSL DSL = Lenguaje con un propósito VSGPS = lenguaje con múltiples propósitos
  • 3. XML, EL ANTEPASADO DEL DSL EN JAVA•  ejb-jar.xml –  Define la estructura para desplegar EJBs en SA•  struts-config.xml –  Mapea las acciones y forms del fw MVC Struts•  spring-config.xml –  Define cómo crear e inyectar objetos en LC Spring
  • 4. CARACTERÍSTICAS DE UN DSL•  Sintaxis específica•  Limitados en ámbito y capacidad•  Pequeños y simples
  • 5. POR QUÉ SON ÚTILES•  Contextuales•  Más expresivos = más claros•  Mejor usar varios DSL que un único GPL
  • 6. CUANDO USARLOS•  Lógica o reglas de negocio cambian a menudo•  Solución separada del resto del código de la aplicación
  • 7. TIPOS DE DSL•  Externos •  Los usamos día a día desde hace tiempo•  Internos •  Viven entre nosotros
  • 8. TIPOS DE DSL: EXTERNOSCómo definen su formato y sintaxis:Aprovechan una sintaxis existente como XML… …o poseen su propio compilador/interprete… …o son diseñados con una herramienta
  • 9. EJEMPLOS DE DSLS EXTERNOS Cascading Style Sheet
  • 10. EJEMPLOS DE DSLS EXTERNOS Script Apache Ant (XML)
  • 11. EJEMPLOS DE DSLS EXTERNOS•  Structured Query Language•  Expresiones regulares Patrón para buscar emails
  • 12. EJEMPLOS DE DSLS EXTERNOSDSL Dominio UsoSQL BBDD Consulta y manipulaciónExpresión Cadenas de texto Búsqueda por patronesregularCSS Estilo (fuentes, colores, Cambiar la presentación de tamaños, etc) un HTMLAnt Recursos (clases y otros Compilación y generación ficheros) de artefactos JAR,WAR
  • 13. TIPOS DE DSL: INTERNOS•  Se hospedan en un GPL para describirlos•  Aprovechan el compilador/intérprete•  Reutilizan parte de la sintaxis•  Heredan las limitaciones del lenguaje anfitrión
  • 14. DSLS INTERNOS GRAILSConfig.groovy / DataSource.groovy
  • 15. DSLS INTERNOS GRAILS UrlMappings.groovy
  • 16. DSLS INTERNOS GRAILS Criteria, Hibernate, SQL
  • 17. DSLS INTERNOS GRAILS GORM
  • 18. QUÉ DEFINE UN DSL•  Contexto –  El dominio está implícito porque… –  … sistema, autor y lector saben de qué se está hablando•  Estructura, gramática, sintaxis es: –  Reducida è fluida è agrupada è encadenada
  • 19. SINTAXIS FLUIDA•  Primera aproximación “Method chaining” Todos los métodos devuelven this
  • 20. METHOD CHAINING•  Javascript jQuery
  • 21. METHOD CHAINING•  Javascript jQuery•  Contextual, ligeramente extensible
  • 22. METHOD CHAINING•  Apache Commons CLI
  • 23. METHOD CHAINING   No  vale  siempre  (aunque  es  mejor  que  nada)     •  No  es  fácil  anidar   •  Todo  en  una  misma  línea  
  • 24. EJEMPLO: SIN CONTEXTO•  ¿Construcción o reutilización de recursos?•  ¿Importa el orden? ¿Qué hago si falla?
  • 25. EJEMPLO: METHOD CHAINING•  Único objeto, única línea, único contexto•  ¿Control de errores y recursos?
  • 26. SOLUCIÓN: DSL•  DSL API vs DSL
  • 27. DSLS EXTERNOS•  Jet Brains Metra Programming System http://www.jetbrains.com/mps/index.html•  Eclipse Modeling Framework Project http://www.eclipse.org/modeling/emf/•  Microsoft DSL Tools Visualization&Modeling SDK http://code.msdn.microsoft.com/DSLToolsLab•  XML•  ANTLR http://www.antlr.org/
  • 28. DSLS INTERNOS•  No  todos  los  lenguajes  lo  permiten   facilmente  •  Metraprogramación  es  esencial   •  Ruby   •  Groovy  
  • 29. GROOVY•  Lenguaje dinámico para JVM –  Atributos y métodos se resuelven en Runtime –  Meta Object Protocol (MOP) –  Genera clases 100% Java•  Sintaxis Java + sintaxis específica para colecciones + otras ideas de Ruby, Python, Smalltalk•  Closures, scripts, sobrecarga operadores, MOP, Gstrings, Categorías, metaClass
  • 30. SCRIPTS
  • 31. COLECCIONES
  • 32. ALGUNAS MEJORAS Getters Setters Constructores con mapas Paréntesis y corchetes Opcionales No primitivos
  • 33. EXPANDOMETACLASS•  Se pueden añadir métodos/atributos a cualquier clase•  ¡Incluso reescribir!•  y mucho más..
  • 34. CATEGORIES•  Sobreescritura de métodos temporal
  • 35. SOBRECARGA DE OPERADORES
  • 36. CALL() SHORTHAND•  Se puede invocar a cualquier objeto como si fuera un método•  Solo es necesario implementar call()
  • 37. MOP•  Se pueden capturar las llamadas a métodos que no existen
  • 38. CLOSURESJavaGroovy
  • 39. CLOSURES•  Variables invocables como métodos•  Atributos invocables como métodos
  • 40. CLOSURES•  Owner: instancia donde se crea el closure•  Delegate: contexto donde se ejecuta el closure þ•  Por defecto es la misma (delegate = owner)
  • 41. CLOSURES•  El contexto por defecto es owner•  Accediendo a variable de owner funciona þ
  • 42. CLOSURES•  El contexto por defecto es owner•  Accediendo a variable de otro sitio NO funciona þ ý
  • 43. CLOSURES•  Contexto nuevo (delegate): config•  Accediendo a variable del contexto SI funciona þ
  • 44. CLOSURES•  With simplemente cambia el contexto
  • 45. ESTRUCTURAS PERSONALIZADAS•  En un método dado, si el último parámetro es un closure, se puede dejar fuera del paréntesis que engloba los parámetros de la llamada
  • 46. MI PRIMER DSL
  • 47. MI PRIMER DSL
  • 48. MI PRIMER DSL
  • 49. MI PRIMER DSL
  • 50. DSL EN UN SCRIPTsrc/script.groovy
  • 51. PERO…
  • 52. PERO…
  • 53. PERO…
  • 54. PERO…
  • 55. BUILDER SUPPORT•  Los builders procesan DSLs mediante eventos•  La clase BuilderSupport nos permite crear nuestros propios builders•  Admite cualquier nombre de método y combinación de parámetros
  • 56. BUILDER SUPPORT
  • 57. MARKUP BUILDER
  • 58. SWING BUILDER
  • 59. JMX BUILDER•  Creando un cliente JMX•  Exportando un objeto mediante JMX
  • 60. ANT BUILDER
  • 61. GANT•  http://gant.codehaus.org/
  • 62. GRIFFON•  http://griffon.codehaus.org/
  • 63. EASYB•  http://www.easyb.org/download.html
  • 64. GRADLE•  http://gradle.org/
  • 65. GMETRICS•  http://gmetrics.sourceforge.net/
  • 66. SPOCK•  http://code.google.com/p/spock/
  • 67. Taller!