Este documento describe cómo crear lenguajes específicos de dominio (DSLs) utilizando Groovy. Explica qué es un DSL, sus características y tipos. Luego se detalla cómo Groovy es ideal para crear DSLs internos debido a sus características como closures, métodos dinámicos y soporte para builders. Finalmente, ofrece ejemplos de cómo comenzar a crear un primer DSL simple en Groovy.
3. 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
4. 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
5. 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
6. CARACTERÍSTICAS DE UN DSL
• Sintaxis específica
• Limitados en ámbito y
capacidad
• Pequeños y simples
7. PORQUÉ SON ÚTILES
• Contextuales
• Más expresivos = más claros
• Mejor usar varios DSL que un único
GPL
8. CUANDO USARLOS
• Lógica o reglas de negocio
cambian a menudo
• Solución separada del resto del
código de la aplicación
9. TIPOS DE DSL
• Externos
• Los usamos día a día desde hace tiempo
• Internos
• Viven entre nosotros
10. 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
13. EJEMPLOS DE DSLS EXTERNOS
• Structured
Query
Language
• Expresiones regulares
Patrón para buscar emails
14. 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
15. 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
21. 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
45. CLOSURES
• Owner: instancia donde se crea el closure
• Delegate: contexto donde se ejecuta el closure
• Por defecto es la misma (delegate = owner)
50. 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
61. 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