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

Seminario de DSLs con Groovy

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.

Paradigma

November 11, 2010
Tweet

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