SlideShare ist ein Scribd-Unternehmen logo

Domain-Specific Languages (DSLs) entwickeln und anwenden

Vortrag für die Java User Group Rostock (https://sites.google.com/site/jughro) am 16. 1. 2013 zu DSLs im Allgemeinen und dem Buch "Domain-Specific Languages" von Martin Fowler (http://martinfowler.com/dsl.html).

1 von 17
Downloaden Sie, um offline zu lesen
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

Recomendados

Using AI Planning to Automate the Performance Analysis of Simulators
Using AI Planning to Automate the Performance Analysis of SimulatorsUsing AI Planning to Automate the Performance Analysis of Simulators
Using AI Planning to Automate the Performance Analysis of SimulatorsRoland Ewald
 
Ronnie Alexis Murillo Carvajal 2.B
Ronnie Alexis Murillo Carvajal  2.BRonnie Alexis Murillo Carvajal  2.B
Ronnie Alexis Murillo Carvajal 2.BAlex Nightroad
 
SCALA: ein kurzer Überblick
SCALA: ein kurzer ÜberblickSCALA: ein kurzer Überblick
SCALA: ein kurzer ÜberblickRoland Ewald
 
Meteocast: a real time nowcasting system
Meteocast: a real time nowcasting systemMeteocast: a real time nowcasting system
Meteocast: a real time nowcasting systemAlessandro Staniscia
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisRoland Ewald
 
Evaluating Simulation Software Components with Player Rating Systems (SIMUToo...
Evaluating Simulation Software Components with Player Rating Systems (SIMUToo...Evaluating Simulation Software Components with Player Rating Systems (SIMUToo...
Evaluating Simulation Software Components with Player Rating Systems (SIMUToo...Roland Ewald
 
SESSL Poster Madness WSC'12
SESSL Poster Madness WSC'12SESSL Poster Madness WSC'12
SESSL Poster Madness WSC'12Roland Ewald
 
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragenA Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragenRoland Ewald
 

Más contenido relacionado

Ähnlich wie 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
 

Ähnlich wie 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