SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Domain-Specific Languages
                             (DSLs) entwickeln und anwenden

                             Kurzer Überblick & Buchrezension zu
                             Domain-Specific Languages (Martin Fowler)

                              Roland Ewald




16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   1
Was ist eine domänenspezifische Sprache?



    •         Formale Sprache
              (Ziel: Programmieren eines Computers)
    •         Möglichst nah an natürlicher Sprache
              (bzgl. Kombinationen von Konstrukten etc.)




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   2
Was ist eine domänenspezifische Sprache?



    •         Formale Sprache
              (Ziel: Programmieren eines Computers)
    •         Möglichst nah an natürlicher Sprache
              (bzgl. Kombinationen von Konstrukten etc.)
    •         Eingeschränkte Ausdruckskraft
    •         Fokus auf eine bestimmte Anwendungsdomäne




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   2
Kategorisierung von DSLs




                                                                •     Eingebettet (Internal/Embedded DSL)

                                                                •     Extern (External DSL)

                                                                •     Language Workbenches (z.B. MDAs)
http://www.flickr.com/photos/nofrills, cc-by-nc




         16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION               3
Beispiele: Embedded DSLs
    Reguläre Ausdrücke:
1       System.out.println("aBb a5z aab".replaceAll("a[a-zA-Z]b", "bar"));


    Javadoc:
1   /**
2    * @author John Doe
3    * @since 1.1
4    * @see Bar
5    */
6   public class Foo {
7   //...
8   }



    16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   4
Beispiele: External DSLs

    Maven Projektbeschreibungen:
1     <project xmlns="...">
2       <modelVersion>4.0.0</modelVersion>
3       <groupId>org.jamesii.archetypes</groupId>
4       <artifactId>custom-extension</artifactId>
5       <version>0.9.1-SNAPSHOT</version>
6       <name>My Custom Extension</name>
7       <packaging>jar</packaging>
8       ...
9   </project>


    Oder auch: CSS, SQL, UML, komplexere Konfigurationsdateien,
    Scripting-Interfaces, etc.


    16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   5
Eigenschaften (meist :-)


[>[->+>+<<]>[-<<-
[>]>>>[<[-<->]                                                           •     Deklarativer Stil
<[>]>>[[-]>>+<]>-<]<<]
>>>+<<[-<<+>>]<<<]                                                       •     Keine Implementierungsdetails
>>>>>[-<<<<<+
>>>>>]<<<<<                                                              •     Kurze, einfache, intuitive Notation
Division mit Brainfuck:
http://jwodder.freeshell.org/brainf.html




              16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION                   6
Vorteile


    •         Produktivitätssteigerung


    •         Kommunikation mit Domänenexperten


    •         Separation of Concerns


    •         Eingebettete DSLs sind meist einfacher zu entwicklen, externe DSLs
              bieten mehr Gestaltungsspielraum



16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   7
Effektivität?

Studie zur Komplexität von APIs:
    •         Drei OOP Frameworks (JAXB, OpenSAML, simpleSAMLphp) und eine
              eingebettete DSL (xoSAML)
    •         Vergleich mittels Object-Points Analyse
„The main observation for our experiment is that the embedded, textual DSL
incurs the smallest API complexity.“
S. Sobernig, P. Gaubatz, M. Strembeck, and U. Zdun, Comparing complexity of API designs: an exploratory experiment on DSL-based

framework integration, in GPCE ’11. ACM, 2011, pp. 157-166. http://dx.doi.org/10.1145/2047862.2047890




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION                                             8
Aber: Sprachwirrwar vermeiden




                             Pieter Bruegel, Turmbau zu Babel, 1563 — rpi-virtuell, http://www.flickr.com/photos/84132860@N03, cc-by-nc
16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION                                                     9
Aber: Der Kontext muss klar sein




http://www.xkcd.com/1090, cc-by-nc




16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   10
M. Fowler: Domain-Specific Languages
Inhalt:
    1. Einführung
    2. Grundlegende Entwurfsmuster
    3. Patterns für externe DSLs
    4. Patterns für eingebettete DSLs
    5. Berechnungsmodelle
    6. Codegenerierung
Die Kapitel in den Teilen 2-6 sind immer gleich aufgebaut: How it works,
When to use it, Beispiel(e)

16. 1. 2013   c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   11
Semantic Model


    •         Zentrales Domänenmodell


    •         Kann durch verschiedene DSLs erzeugt / befüllt werden


    •         Bildet alle benötigten Elemente und deren Beziehungen ab


    •         Erhöht z.B. Flexibilität und Wartbarkeit




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   12
Beispiel: Method Chaining



1   List<?> problems =
2   session.createCriteria(ProblemDefinition.class).add(eq("scheme",
         myScheme)).list();


        •         Konstruktion von Ausdrücken
        •         Definition von Abläufen (do(x).then(y).or(z))
        •         Methodennamen müssen geschickt gewählt werden




    16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   13
Beispiel: Nested Function

1   new Experiment with Observation {
2     //...
3     withRunResult {
4       result => println("Last x-value:" + result("x"))
5     }
6   }


        •         Nicht alle Pattern funktionieren für alle Sprachen
        •         Event Handling (ActionListener...)
        •         Definition von Strukturen
        •         etc.


    16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   14
Wer sollte dieses Buch lesen?


    •         Gut für DSL-Einsteiger / einen ersten Überblick


    •         Viele interessante Techniken (ohne Anspruch auf Vollständigkeit)


    •         Viele Code-Beispiele (Java, C#, etc.)


    •         Jedoch kaum ’Theorie’




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   15
Links



    •         Buch-Homepage: http://martinfowler.com/dsl.html


    •         Liste der Patterns: http://martinfowler.com/dslCatalog


    •         Amazon: http://www.amazon.com/dp/0321712943




16. 1. 2013    c 2013   UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION   16

Contenu connexe

Similaire à Domain-Specific Languages (DSLs) entwickeln und anwenden

Kurzpräsentation JAMES II
Kurzpräsentation JAMES IIKurzpräsentation JAMES II
Kurzpräsentation JAMES IIRoland Ewald
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Language Workbench
Language WorkbenchLanguage Workbench
Language Workbenchzensor
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"joergreichert
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven DesignTobiasFrischholz
 
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...Verein FM Konferenz
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataDai Yang
 
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptItJSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptItTorsten Fink
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Torsten Kleiber
 
LinkedGeodata (Deutsch)
LinkedGeodata (Deutsch)LinkedGeodata (Deutsch)
LinkedGeodata (Deutsch)geoknow
 
Tech Talk: LOP und DSLs
Tech Talk: LOP und DSLsTech Talk: LOP und DSLs
Tech Talk: LOP und DSLsJens Rühmkorf
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenTorsten Kleiber
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLPeter Eisentraut
 
BACARDI - Ein Katalog für Raumfahrtrückstände
BACARDI - Ein Katalog für RaumfahrtrückständeBACARDI - Ein Katalog für Raumfahrtrückstände
BACARDI - Ein Katalog für RaumfahrtrückständeMichael Meinel
 

Similaire à Domain-Specific Languages (DSLs) entwickeln und anwenden (20)

Kurzpräsentation JAMES II
Kurzpräsentation JAMES IIKurzpräsentation JAMES II
Kurzpräsentation JAMES II
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Language Workbench
Language WorkbenchLanguage Workbench
Language Workbench
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
[DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
 [DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010 [DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
[DE] Glossar zu Dokumenten-Technologien | PROJECT CONSULT | Hamburg 2010
 
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
FMK2012: Strukturierte Scriptprogrammierung und neue Befehle und Scriptbefehl...
 
.NET und jetzt!
.NET und jetzt!.NET und jetzt!
.NET und jetzt!
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 
JSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptItJSF Anwendungen testen mit AcceptIt
JSF Anwendungen testen mit AcceptIt
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
MDSD Herausforderung: Entwicklungsmethodik und technisches Umfeld
MDSD Herausforderung: Entwicklungsmethodik und technisches UmfeldMDSD Herausforderung: Entwicklungsmethodik und technisches Umfeld
MDSD Herausforderung: Entwicklungsmethodik und technisches Umfeld
 
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
Plsql drum test automatisiere, wer sich sich ewig bindet! - DOAG 2017
 
LinkedGeodata (Deutsch)
LinkedGeodata (Deutsch)LinkedGeodata (Deutsch)
LinkedGeodata (Deutsch)
 
Tech Talk: LOP und DSLs
Tech Talk: LOP und DSLsTech Talk: LOP und DSLs
Tech Talk: LOP und DSLs
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise AnwendungenBob the Builder - Build & Deploy von ADF Enterprise Anwendungen
Bob the Builder - Build & Deploy von ADF Enterprise Anwendungen
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XML
 
BACARDI - Ein Katalog für Raumfahrtrückstände
BACARDI - Ein Katalog für RaumfahrtrückständeBACARDI - Ein Katalog für Raumfahrtrückstände
BACARDI - Ein Katalog für Raumfahrtrückstände
 

Domain-Specific Languages (DSLs) entwickeln und anwenden

  • 1. Domain-Specific Languages (DSLs) entwickeln und anwenden Kurzer Überblick & Buchrezension zu Domain-Specific Languages (Martin Fowler) Roland Ewald 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 1
  • 2. Was ist eine domänenspezifische Sprache? • Formale Sprache (Ziel: Programmieren eines Computers) • Möglichst nah an natürlicher Sprache (bzgl. Kombinationen von Konstrukten etc.) 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 2
  • 3. Was ist eine domänenspezifische Sprache? • Formale Sprache (Ziel: Programmieren eines Computers) • Möglichst nah an natürlicher Sprache (bzgl. Kombinationen von Konstrukten etc.) • Eingeschränkte Ausdruckskraft • Fokus auf eine bestimmte Anwendungsdomäne 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 2
  • 4. Kategorisierung von DSLs • Eingebettet (Internal/Embedded DSL) • Extern (External DSL) • Language Workbenches (z.B. MDAs) http://www.flickr.com/photos/nofrills, cc-by-nc 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 3
  • 5. Beispiele: Embedded DSLs Reguläre Ausdrücke: 1 System.out.println("aBb a5z aab".replaceAll("a[a-zA-Z]b", "bar")); Javadoc: 1 /** 2 * @author John Doe 3 * @since 1.1 4 * @see Bar 5 */ 6 public class Foo { 7 //... 8 } 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 4
  • 6. Beispiele: External DSLs Maven Projektbeschreibungen: 1 <project xmlns="..."> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>org.jamesii.archetypes</groupId> 4 <artifactId>custom-extension</artifactId> 5 <version>0.9.1-SNAPSHOT</version> 6 <name>My Custom Extension</name> 7 <packaging>jar</packaging> 8 ... 9 </project> Oder auch: CSS, SQL, UML, komplexere Konfigurationsdateien, Scripting-Interfaces, etc. 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 5
  • 7. Eigenschaften (meist :-) [>[->+>+<<]>[-<<- [>]>>>[<[-<->] • Deklarativer Stil <[>]>>[[-]>>+<]>-<]<<] >>>+<<[-<<+>>]<<<] • Keine Implementierungsdetails >>>>>[-<<<<<+ >>>>>]<<<<< • Kurze, einfache, intuitive Notation Division mit Brainfuck: http://jwodder.freeshell.org/brainf.html 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 6
  • 8. Vorteile • Produktivitätssteigerung • Kommunikation mit Domänenexperten • Separation of Concerns • Eingebettete DSLs sind meist einfacher zu entwicklen, externe DSLs bieten mehr Gestaltungsspielraum 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 7
  • 9. Effektivität? Studie zur Komplexität von APIs: • Drei OOP Frameworks (JAXB, OpenSAML, simpleSAMLphp) und eine eingebettete DSL (xoSAML) • Vergleich mittels Object-Points Analyse „The main observation for our experiment is that the embedded, textual DSL incurs the smallest API complexity.“ S. Sobernig, P. Gaubatz, M. Strembeck, and U. Zdun, Comparing complexity of API designs: an exploratory experiment on DSL-based framework integration, in GPCE ’11. ACM, 2011, pp. 157-166. http://dx.doi.org/10.1145/2047862.2047890 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 8
  • 10. Aber: Sprachwirrwar vermeiden Pieter Bruegel, Turmbau zu Babel, 1563 — rpi-virtuell, http://www.flickr.com/photos/84132860@N03, cc-by-nc 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 9
  • 11. Aber: Der Kontext muss klar sein http://www.xkcd.com/1090, cc-by-nc 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 10
  • 12. M. Fowler: Domain-Specific Languages Inhalt: 1. Einführung 2. Grundlegende Entwurfsmuster 3. Patterns für externe DSLs 4. Patterns für eingebettete DSLs 5. Berechnungsmodelle 6. Codegenerierung Die Kapitel in den Teilen 2-6 sind immer gleich aufgebaut: How it works, When to use it, Beispiel(e) 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 11
  • 13. Semantic Model • Zentrales Domänenmodell • Kann durch verschiedene DSLs erzeugt / befüllt werden • Bildet alle benötigten Elemente und deren Beziehungen ab • Erhöht z.B. Flexibilität und Wartbarkeit 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 12
  • 14. Beispiel: Method Chaining 1 List<?> problems = 2 session.createCriteria(ProblemDefinition.class).add(eq("scheme", myScheme)).list(); • Konstruktion von Ausdrücken • Definition von Abläufen (do(x).then(y).or(z)) • Methodennamen müssen geschickt gewählt werden 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 13
  • 15. Beispiel: Nested Function 1 new Experiment with Observation { 2 //... 3 withRunResult { 4 result => println("Last x-value:" + result("x")) 5 } 6 } • Nicht alle Pattern funktionieren für alle Sprachen • Event Handling (ActionListener...) • Definition von Strukturen • etc. 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 14
  • 16. Wer sollte dieses Buch lesen? • Gut für DSL-Einsteiger / einen ersten Überblick • Viele interessante Techniken (ohne Anspruch auf Vollständigkeit) • Viele Code-Beispiele (Java, C#, etc.) • Jedoch kaum ’Theorie’ 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 15
  • 17. Links • Buch-Homepage: http://martinfowler.com/dsl.html • Liste der Patterns: http://martinfowler.com/dslCatalog • Amazon: http://www.amazon.com/dp/0321712943 16. 1. 2013 c 2013 UNIVERSITÄT ROSTOCK | LEHRSTUHL FÜR MODELLIERUNG & SIMULATION 16