• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Seminario de DSLs con Groovy
 

Seminario de DSLs con Groovy

on

  • 314 views

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 ...

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.

Statistics

Views

Total Views
314
Views on SlideShare
314
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Seminario de DSLs con Groovy Seminario de DSLs con Groovy Presentation Transcript

    • CREACIÓN DE DSLSCON GROOVYpor Alberto Vilcheshttp://albertovilches.comTwitter: @albertovilches
    • INTRODUCCIÓN¿QUÉ ES UN DSL?
    • 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
    • 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 paraprogramar/modelar cualquiercosa•  No necesariamente TuringCompleto
    • XML, EL ANTEPASADO DEL DSLEN 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 LCSpring
    • CARACTERÍSTICAS DE UN DSL•  Sintaxis específica•  Limitados en ámbito ycapacidad•  Pequeños y simples
    • PORQUÉ SON ÚTILES•  Contextuales•  Más expresivos = más claros•  Mejor usar varios DSL que un únicoGPL
    • CUANDO USARLOS•  Lógica o reglas de negociocambian a menudo•  Solución separada del resto delcódigo de la aplicación
    • TIPOS DE DSL•  Externos•  Los usamos día a día desde hace tiempo•  Internos•  Viven entre nosotros
    • 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
    • EJEMPLOS DE DSLS EXTERNOSCascading Style Sheet
    • EJEMPLOS DE DSLS EXTERNOSScript Apache Ant (XML)
    • EJEMPLOS DE DSLS EXTERNOS•  StructuredQueryLanguage•  Expresiones regularesPatrón para buscar emails
    • EJEMPLOS DE DSLS EXTERNOSDSL Dominio UsoSQL BBDD Consulta ymanipulaciónExpresiónregularCadenas de texto Búsqueda porpatronesCSS Estilo (fuentes,colores, tamaños,etc)Cambiar lapresentación de unHTMLAnt Recursos (clases yotros ficheros)Compilación ygeneración deartefactos JAR,WAR
    • TIPOS DE DSL: INTERNOS•  Se hospedan en un GPL paradescribirlos•  Aprovechan el compilador/intérprete•  Reutilizan parte de la sintaxis•  Como anotaciones u otras ventajas (¡Groovy!)•  Heredan las limitaciones del lenguajeanfitrión
    • DSLS INTERNOS GRAILSConfig.groovy / DataSource.groovy
    • DSLS INTERNOS GRAILSUrlMappings.groovy
    • DSLS INTERNOS GRAILSCriteria, Hibernate, SQL
    • DSLS INTERNOS GRAILSGORM
    • QUE HACE FALTA PARA CREARUN DSL
    • 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
    • SINTAXIS FLUIDA•  Primera aproximación“Method chaining”Todos los métodos devuelven this
    • METHOD CHAINING•  Javascript jQuery
    • METHOD CHAINING•  JavascriptjQuery•  Contextual, ligeramente extensible
    • METHOD CHAINING•  Apache Commons CLI
    • METHOD CHAININGNo vale siempre(aunque es mejor que nada)•  No es fácil anidar•  Todo en una misma línea
    • EJEMPLO: SIN CONTEXTO•  ¿Construcción o reutilización de recursos?•  ¿Importa el orden? ¿Qué hago si falla?
    • EJEMPLO: METHOD CHAINING•  Único objeto, única línea, único contexto•  ¿Control de errores y recursos?
    • SOLUCIÓN: DSL•  DSLAPI vsDSL
    • QUIERO CREAR UN DSL¿INTERNO...? ¿EXTERNO…?
    • DSLS EXTERNOS•  Jet Brains Metra Programming Systemhttp://www.jetbrains.com/mps/index.html•  Eclipse Modeling Framework Projecthttp://www.eclipse.org/modeling/emf/•  Microsoft DSL Tools Visualization&Modeling SDKhttp://code.msdn.microsoft.com/DSLToolsLab•  XML•  ANTLR http://www.antlr.org/
    • DSLS INTERNOS•  No todos los lenguajes lo permitenfacilmente•  Metraprogramación es esencial•  Ruby•  Groovy
    • CARACTERÍSTICAS DE GROOVY(QUE LO HACEN IDEAL PARA CREAR DSLS)
    • 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
    • SCRIPTS
    • COLECCIONES
    • ALGUNAS MEJORASGettersSettersConstructorescon mapasParéntesis ycorchetesOpcionalesNo primitivos
    • EXPANDOMETACLASS•  Se pueden añadir métodos/atributos a cualquierclase•  ¡Incluso reescribir!•  y mucho más..
    • CATEGORIES•  Sobreescritura de métodos temporal
    • SOBRECARGA DE OPERADORES
    • CALL() SHORTHAND•  Se puede invocar acualquier objetocomo si fuera unmétodo•  Solo es necesarioimplementar call()
    • MOP•  Se pueden capturar las llamadas a métodos queno existen
    • CLOSURESJavaGroovy
    • CLOSURES•  Variables invocables como métodos•  Atributos invocables como métodos
    • CLOSURES•  Owner: instancia donde se crea el closure•  Delegate: contexto donde se ejecuta el closure•  Por defecto es la misma (delegate = owner)
    • CLOSURES•  El contexto por defecto es owner•  Accediendo a variable de owner funciona
    • CLOSURES•  El contexto por defecto es owner•  Accediendo a variable de otro sitio NO funciona 
    • CLOSURES•  Contexto nuevo (delegate): config•  Accediendo a variable del contexto SI funciona
    • CLOSURES•  With simplemente cambia el contexto
    • ESTRUCTURAS PERSONALIZADAS•  En un método dado, si el último parámetro es unclosure, se puede dejar fuera del paréntesis queengloba los parámetros de la llamada
    • COMO CREAR UN DSL
    • MI PRIMER DSL
    • MI PRIMER DSL
    • MI PRIMER DSL
    • DSL EN UN SCRIPTsrc/script.groovy
    • PERO…
    • PERO…
    • PERO…
    • PERO…
    • BUILDER SUPPORT•  Los builders procesan DSLs mediante eventos•  La clase BuilderSupport nos permite crear nuestrospropios builders•  Admite cualquier nombre de método ycombinación de parámetros
    • BUILDER SUPPORT
    • ALGUNOS BUILDERS
    • MARKUP BUILDER
    • SWING BUILDER
    • JMX BUILDER•  Creando un cliente JMX•  Exportando un objeto mediante JMX
    • ANT BUILDER
    • ALGUNOS FRAMEWORKS YHERRAMIENTAS CON SU PROPIODSL
    • GANT•  http://gant.codehaus.org/
    • GRIFFON•  http://griffon.codehaus.org/
    • EASYB•  http://www.easyb.org/download.html
    • GRADLE•  http://gradle.org/
    • GMETRICS•  http://gmetrics.sourceforge.net/
    • SPOCK•  http://code.google.com/p/spock/
    • ¿HACEMOS UNO?¡GRACIAS!PREGUNTAS