24
© itemis AG Am Beispiel des Domain Model Examples

Xbase Am Beispiel des Domain Model Examples

Embed Size (px)

DESCRIPTION

Xbase is a partial programming language implemented in Xtext and is meant to be embedded and xtended within other programming languages and domain-specific languages (DSL) written in Xtext. This presentation provides hooks how to starting learning and using Xbase. Please not that this presentation (date: 2012-11-23) is based on Xtext/Xbase 2.3.1 and thus uses the old API of Xbase.

Citation preview

Page 1: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

●●

Am Beispiel des Domain Model Examples

Page 2: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

Agenda

Xbase

Anwendungsfälle

Xbase im Domain Model Example

Links

2

Page 3: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

“Xbase is a partial programming language implemented in Xtext

and is meant to be embedded and xtended within other programming languages

and domain-specific languages (DSL) written in Xtext.”

Quelle: Sven Efftinge - Xbase - A new programming language?

Xbase – Am Beispiel des Domain Model Examples

Was ist Xbase?

3

Page 4: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Expression-Grammatik

• JVMTypes

• Extensions (Bibliothek von Funktionen, die für Typen bereitgestellt werden)

• Xbase Compiler (zu Java Code) / Xbase Interpreter

Xbase – Am Beispiel des Domain Model Examples

Generelle Bestandteile von Xbase

4

Page 5: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Xbase.xtext

• Typen: Arrays, einfache Typ-Referenzen, Funktionstypen (Lambda-Ausdrücke), parametrisierte Typ-

Referenzen, Java-Primitive -> Xbase implementiert Java Typsystem und ist konform zur Java Lang

Spec

• Expressions (1)

• Literale: String, Nummer (entspricht Integer), Boolean, Null, Typ (entspricht .class)

• Operatoren: fest eingebaute boolsche / arithmetische Operatoren sowie with-Operator für Lambda

• binär: +=, ||, &&, ==, !=, <, >, <=, >=, ->, .., =>, <<, >>, <<<, >>>, <>, ?:, <=>, +, -, *, /, %, **

• unär: !, -

• Zuweisungen (Assignments)

• Feature Calls (property access, null safe feature Call, static feature call)

• Constructor Call

• Lambda Ausdrücke (aka Closures): z.B. myList.findFirst([ e | e.name==null ])

Xbase – Am Beispiel des Domain Model Examples

Xbase im Detail (1)

5

Page 6: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Expressions (ctd.)

• If Expression (if, else if, else)

• Switch Expression (switch, case)

• Variable Declarations (nur in Blocks erlaubt)

• Blocks, entspricht Container für imperative Code-Sequenzen

• For Loop

• While Loop

• Do-While Loop

• Return Expression

• Throwing Exceptions

• try-catch-finally expression

• Implizite Variablen 'this‘ und 'it‘: Referenz auf den aktuellen Kontext, it kann auch innerhalb von

Funktionen verwendet werden

Xbase – Am Beispiel des Domain Model Examples

Xbase im Detail (2)

6

Page 7: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

Xbase – Am Beispiel des Domain Model Examples

Xbase Extensions

7

Page 8: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Standard-Generator für Xbase Expressions, der Java-Code generiert

• wie man Xbase erweitert, und was man alles anpassen muss, ist hier beschrieben: Extending Xbase

• Expressions können meist beliebig miteinander und beliebig tief kombiniert und verschachtelt sein: ein

Expressions Compiler sollte unabhängig davon in der Lage sein, validen Code zu generieren

Xbase – Am Beispiel des Domain Model Examples

Xbase Compiler

8

Page 9: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Runs on the JVM

• Compiles to Java

• Statically Typed

• Full Java Generics

• No built-in types

• Closures

• Type Inference

• Operator Overloading

• Simplicity over Syntactical Flexibility

• Everything is an Expression

Xbase – Am Beispiel des Domain Model Examples

Eigenschaften von Xbase

9

Page 10: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• extends

• implements

• invokes

• maps to

• model instances/assigments (with type checks)

• invariants/boolean expressions

• decisions/switch/cases

• calculation

Xbase – Am Beispiel des Domain Model Examples

Abstrakte Anwendungsfälle

10

Page 11: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Integration/Verwebung mit bestehendem Code

• Model-Checks durch Typsystem(e)

• durch Typsystem unterstützte Code-Generierung (Expressions an mehreren Stellen)

Xbase – Am Beispiel des Domain Model Examples

Konkretere Anwendungsfälle

11

Page 12: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Model inferrer

• JDT Integration

• Transparenz Java/DSL

• Tracing

• Debugging

• Type inferrer

• Typisierung von in die DSL eingebauten Expression -> Angabe des erwarteten Rückgabetyps

Xbase – Am Beispiel des Domain Model Examples

Model inferrer & Type inferrer

12

Page 13: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Ableiten von (Teil-)Artefakten, die sich weiterhin mit DSL integrieren sollen -> Model inferrer

• Reines Erzeugen von Artefakten, die nichts von der DSL wissen müssen -> Generator

• Ausführungshäufigkeit

• Generator: Beim Speichern der DSL

• Model inferrer: Live beim Editieren der DSL-Datei

• Aufruf-Reihenfolge und Build Abhängigkeiten beachten

• DSL referenziert auf Java-Elemente, die noch nicht generiert worden sind bzw. zwar schon

generiert wurden aber noch nicht kompiliert worden sind (Java Compiler lief noch nicht)

• Unterschiedliches Verhalten vom Builder in der IDE und im automatisierten Build -> im

automatisierten Build müssen unter Umständen erst Stubs erzeugt werden, damit zunächst alle

Referenzen aufgelöst werden können und so trotz wechselseitiger Abhängigkeit alle Artefakte

kompiliert werden können

Xbase – Am Beispiel des Domain Model Examples

Model inferrer / Generator / Builder Participant

13

Page 14: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• sich über die Zielgruppe(n) der DSL klar werden

• sich über die Auswertungsziele der DSL klar werden

• Generatoren/Interpreter, welche Informationen müssen dazu in den DSLs erfasst werden?

• sich über die Chancen und Risiken der Entscheidung klar werden

• Pro

• bekommt vieles Out-Of-The-Box (Standard Editor und Generator/Compiler-Verhalten, Typ-Checks)

• Contra

• eine fachliche DSL wird zu technisch

• DSL wird mit Informationen überfrachtet

• Ziel-Artefakte: Code, Konfiguration, Dokumentation, Testdaten, Tests, Datenbankskripte,

Buildskripte, ...

• immer dran denken: man kann Xbase auch ohne JVMTypes verwenden, und die Xbase

Expression-Struktur auch ohne den Standard-Xbase-Compiler nutzen

Xbase – Am Beispiel des Domain Model Examples

Wann sollte man Xbase/JVMTypes verwenden, wann nicht?

14

Page 15: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Grammatik-Definition

• grammar … with org.eclipse.xtext.xbase.Xbase die Sprache muss von Xbase erben

• import 'http://www.eclipse.org/xtext/common/JavaVMTypes' as types optional

• MWE2 Grammar Generator

• Registrieren der neuen EPackages und GenModels + URI-Mapping

• fragment = types.TypesGeneratorFragment {} für JDT Integration u.a. in Proposals

• fragment = xbase.XbaseGeneratorFragment {} für ModelInferrer

• public class …ScopeProvider extends XbaseScopeProvider für Scopen der Expressions

• class …JvmModelInferrer extends AbstractModelInferrer für Mapping auf JvmTypes

• public class SprayTypeProvider extends XbaseTypeProvider Typisieren von Expresssions

• …RuntimeModule: @Override public Class<? extends ITypeProvider> bindITypeProvider() { … }

• Im Scope-Provider localScope definieren für Expressions (it, this)

Xbase – Am Beispiel des Domain Model Examples

Änderungen durch Xbase

15

Page 16: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

Xbase – Am Beispiel des Domain Model Examples

Xbase in Spray

16

Page 17: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

Xbase – Am Beispiel des Domain Model Examples

Xbase in Spray

17

Page 18: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

18

Xbase – Am Beispiel des Domain Model Examples

Page 19: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

19

Page 20: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• DSL definieren, um das Mapping zwischen Fachmodell und Persistenz-Modell zu definieren

• dabei müssen durch das Typsystem invalide Zuweisungen erkannt werden bzw. erst gar nicht angeboten

werden

• Zuweisungen können auch durch Verknüpfungen erfolgen, z.B. Name = Vorname + ” “ + Nachname

• Zuweisungen können Guards enthalten, z.B. Anrede = if(gender == ‘female’) “Frau” else “Herr”

• Analog zu Jnario eine Test-Beschreibungs-Sprache definieren, um

• Test-Datensätze auszudrücken, also defacto Instanzieren des Domänen-Modells

• Erwartungen auszudrücken: Wenn Eingabe diese Belegung Dann Ausgabe diese Belegung

• Abfrage-Sprache definieren

Xbase – Am Beispiel des Domain Model Examples

Erweiterungen für das Domain Model Example

20

Page 21: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Xbase - A new programming language?

• Xbase Language Reference

• Xtext and Java

• Xbase - Implementing domainspecific languages for Java

• Xtext 2.1: using Xbase variables

• The JvmModelInferrer, the debugger and Xbase in Xtext 2.3

• Extending Xbase

• Pragmatic DSL Design with Xtext, Xbase and Xtend 2

• Five simple steps to your JVM language

• Using JVM Types in Xtext 2.1 and the ImportManager

• Xtext casts: Debug-support, Number literals, 7 languages, Jnario

• XREPL

Xbase – Am Beispiel des Domain Model Examples

Links: Dokumentation & Blogs

21

Page 22: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Xbase.xtext

• JvmModelGenerator.xtend

• XbaseCompiler.java

• XbaseCompiler2.java (benutzt das neue Typsystem)

• AbstractXbaseCompiler.java

• XbaseInterpreter.java

• JvmModelAssociator.java

• JvmTypesBuilder.java

• TypeConvertingCompiler.java

Xbase – Am Beispiel des Domain Model Examples

Links: Xbase Source Code

22

Page 23: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Xtend (see Xtend.xtext)

• Sigasi - VHDL editor (closed source)

• openHAB (see Rules.xtext, Script.xtext)

• Spray (see Spray.xtext, Shape.xtext, Style.xtext)

• Jnario (see Spec.xtext)

• Tocea - Architecture-Designer (see QueryDsl.xtext)

• Xsemantics (see Documentation, see Xsemantics.xtext)

• EMF-IncQuery (see PatternLanguage.xtext)

• JST (see Jst.xtext)

• eLang (see EL.xtext)

• MQL (see ModelQueryLanguage.xtext)

• Demonstratoren: Fowlers statemachine with expressions (see MyDsl.xtext), LorenzoBettini - Xtext2

experiments, Meinte Boersma - Xtext2-DSLs

Xbase – Am Beispiel des Domain Model Examples

Links: Xbase nutzende Projekte

23

Page 24: Xbase   Am Beispiel des Domain Model Examples

●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

© itemis AG

• Example auf dem aktuellen Juno Stand: File -> New -> Other -> Examples/Xtext Examples/Xtext

Domain Model Example

• Example auf dem Indigo-Stand

• Language Workbench Competetion 2011 – Xtext

• Schritt für Schritt Anleitung (pdf)

• Doownload-Sektion mit Screencasts und den Projekt-Stände nach jedem Kapitel

• XbaseIntegrationTest.java

Xbase – Am Beispiel des Domain Model Examples

Links: Domain Model Example

24