Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Seminario de DSLs con Groovy

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Paradigma Paradigma
November 11, 2010

Seminario de DSLs con Groovy

Seminario de Groovy y DSL impartido por Alberto Vilches, de Paradigma Tecnológico http://www.paradigmatecnologico.com/ y coorganizado por javaHispano http://www.javahispano.org celebrado el 11 noviembre de 2010 en Madrid.

Avatar for Paradigma

Paradigma

November 11, 2010

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. QUÉ ES Y PARA QUÉ SIRVE •  DSL = Domain

    Specific Language •  Resuelve un tipo particular de problema •  Definición •  Modelado •  Representación •  Comunmente llamados mini lenguajes
  2. QUÉ NO ES •  Lo opuesto a un DSL es:

    •  General Purpose Language (como Java o Erlang) •  General Purpose Modeling Language (como UML) •  No se puede usar para programar/modelar cualquier cosa •  No necesariamente Turing Completo
  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. PORQUÉ SON ÚTILES •  Contextuales •  Más expresivos = más

    claros •  Mejor usar varios DSL que un único GPL
  5. CUANDO USARLOS •  Lógica o reglas de negocio cambian a

    menudo •  Solución separada del resto del código de la aplicación
  6. TIPOS DE DSL •  Externos •  Los usamos día a

    día desde hace tiempo •  Internos •  Viven entre nosotros
  7. TIPOS DE DSL: EXTERNOS Có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
  8. EJEMPLOS DE DSLS EXTERNOS DSL Dominio Uso SQL BBDD Consulta

    y manipulación Expresión regular Cadenas de texto Búsqueda por patrones CSS Estilo (fuentes, colores, tamaños, etc) Cambiar la presentación de un HTML Ant Recursos (clases y otros ficheros) Compilación y generación de artefactos JAR,WAR
  9. TIPOS DE DSL: INTERNOS •  Se hospedan en un GPL

    para describirlos •  Aprovechan el compilador/intérprete •  Reutilizan parte de la sintaxis •  Como anotaciones u otras ventajas (¡Groovy!) •  Heredan las limitaciones del lenguaje anfitrión
  10. 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
  11. METHOD CHAINING No vale siempre (aunque es mejor que nada)

    •  No es fácil anidar •  Todo en una misma línea
  12. 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/
  13. DSLS INTERNOS •  No todos los lenguajes lo permiten facilmente

    •  Metraprogramación es esencial •  Ruby •  Groovy
  14. 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
  15. CALL() SHORTHAND •  Se puede invocar a cualquier objeto como

    si fuera un método •  Solo es necesario implementar call()
  16. CLOSURES •  Owner: instancia donde se crea el closure • 

    Delegate: contexto donde se ejecuta el closure •  Por defecto es la misma (delegate = owner) 
  17. CLOSURES •  El contexto por defecto es owner •  Accediendo

    a variable de otro sitio NO funciona  
  18. 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
  19. 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