Einführung in die Modelltransformation mit Xtend

Ähnliche Dokumente
Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Codegeneratoren mit Xtend , A. Arnold

Thema 2 Acceleo-MTL- Sprachmittel

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

Best Practices für flexible und wartbare Codegeneratoren mit openarchitectureware Karsten Thoms Software Architekt

Überschreiben von Methoden

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

1. Übung zu "Numerik partieller Differentialgleichungen"

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

JAVA - Methoden

Codegenerierung am Beispiel des PIMAR-Projekts PhoneBook. 14. Januar 2015

Software Engineering II

Handbuch für die Erweiterbarkeit

Software Engineering II

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Entwicklung von domänenspezifischen Sprachen. 23. Januar 2013

Code generieren mit Eclipse und oaw HowTo

Lieferung 7.1 Plattformspezifische Generatortemplates für Code-Gerüst, Test, Konfiguration der Qualitätswerkzeuge

Überblick. 7. Überladen von Operatoren

Thema 4 Acceleo- Sprachmittel und Generatorstruktur

Coding Standards Brandbox

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

Übersetzung von Struktogrammen nach VBA

PLATTFORMÜBERGREIFENDE ENTWICKLUNG MITHILFE MODELLGETRIEBENER METHODEN UND TECHNOLOGIEN

Current Workflow. formatted. Rules. Extensions. Rules. DOM processing with Meta API-calls. Code Generation (Smarty) XMLfile. Source code.

Quelltextähnlichkeit

Erste Schritte mit Eclipse

Variablen manipulieren per JDI

Web-Anwendungsentwicklung mit dem Delivery Server

Java Einführung Packages

WIRTSCHAFTSINFORMATIK

13. Tutorium zu Programmieren

Probeklausur: Programmierung WS04/05

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

II.1.1. Erste Schritte - 1 -

Wie konfiguiriert man Eclipse (mit oder ohne Plugin) Erich Ehses

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Software Engineering II

Einführung in AOP. Rico Schiekel rschiekel@web.de. Agenda. Kernproblem der Objekt Orientierung

Theorie zu Übung 8 Implementierung in Java

Der EMF-generierte Code. 7. November 2012

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

28. April Python ist eine Interpreter Sprache. einfach durch eigene C Module erweiterbar. Daten werden dynamisch getypt

5.4 Klassen und Objekte

Einführung in das Eclipse Modeling Framework. 31. Oktober 2012

Tutorium Rechnerorganisation

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Probeklausur: Programmierung WS04/05

Programmierstil. Objektsammlungen. Konzepte. Zwischenspiel: Einige beliebte Fehler... Variablennamen Kommentare Layout Einrückung

Oracle JDeveloper 10 g

ESB. Open Source ESB: Mule Flightreservation. Res Gilgen Hochschule Luzern [Wählen Sie das Datum aus]

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

Die Programmiersprache C Eine Einführung

Henshin: Modelltransformationen in EMF. Dr. Thorsten Arendt Marburg, 29. Oktober 2015


Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Die abstrakte Syntax der Unified Modeling Language

Datenhaltung für Android Model First Christian Ingenhaag, Frederik Götz, Carl Steeg

Contexts and Dependency Injection. W3L AG

8. Generics Grundlagen der Programmierung 1 (Java)

Einführung in Javadoc

Übersicht. Vorstellung des OO-Paradigmas

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Übersicht Eclipse Modeling Project EMP. Zoltan Horvath

Teil V. Generics und Kollektionen in Java

Datenhaltung für Android. Model First

Eclipse und EclipseLink

Content Management mit JSR-170 und dem Open Source CMS Magnolia

Alles außer Java! JVM-Sprachen sagen Happy Birthday

Spring Dynamic Modules for OSGi Service Platforms

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 4: Einführung in JavaScript Stand: Übung WS 2014/2015. Benedikt Schumm M.Sc.

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

The app the crashes, before the breakpoint is reached: Code to the event:

Extensions mit TYPO3 TYPO3

Computeranwendung und Programmierung (CuP)

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Vortrag SASS Funktionen #ck2016. Was ist SASS?

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Business UI in Enterprise Anwendungen

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Informationsverarbeitung im Bauwesen

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

DSLs mit Xtext entwerfen , A. Arnold

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Einführung in die Programmierung

Ein hierarchischer, modellgetriebener Ansatz zur Codegenerierung. R. Gitzel, M. Schwind

Arbeiten mit BlueJ. Objektorientiertes Programmieren in Java mit BlueJ

Repetitorium Informatik (Java)

MOF Meta Object Facility. Veranstaltungsvortrag im Rahmen der Projektgruppe ComponentTools

Java Einführung Methoden. Kapitel 6

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

B) Klassenbibliotheken Turtle und Util (GPanel, Console) installieren Ein Unterverzeichnis classes auf der Festplatte erstellen, z.b.

Remote Method Invocation

Software-Engineering Grundlagen des Software-Engineering

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Java Kurs für Anfänger Einheit 5 Methoden

Transkript:

Einführung in die Modelltransformation mit Xtend 12. Dezember 2012 Taentzer Modellgetriebene Softwareentwicklung 297

Überblick Xtend: Eine statisch getypte Sprache, die zur Modellzu-Text-Transformation eingesetzt werden kann Xtend ist Java-ähnlich, mit teilweise neuer Syntax Xtend interagiert nahtlos mit Java Xtend enthält einen Template-basierten Ansatz zur Modell-zu-Code-Transformation Open Source-Projekt im Eclipse Modeling Projekt: http://eclipse.org/xtend Taentzer Modellgetriebene Softwareentwicklung 298

Ein erstes Beispiel Taentzer Modellgetriebene Softwareentwicklung 299

Ein Codegenerator mit Xtend Im Paket org.xtext.example.mycm.generator Taentzer Modellgetriebene Softwareentwicklung 300

Start der Codegenerierung Resource nach Einstiegspunkt(en) für die Codegenerierung filtern Im Beispiel: Entity Name der Java-klasse festlegen, in die generiert wird Im Beispiel: e.fullyqualifiedname.tostring("/") + ".java Um fullyqualifiedname benutzen zu können, ist ein spezieller Service nötig, der über Dependency Injection mittels Google Guice bereitgestellt wird: import com.google.inject.inject in der Methode: @Inject extension IQualifiedNameProvider Taentzer Modellgetriebene Softwareentwicklung 301

Beispiel: Zwei Templates In MyClassModelgenerator.xtend: Guillements: Ctrl + < und Ctrl + > Syntaxvervollständigung: Ctrl + Space Taentzer Modellgetriebene Softwareentwicklung 302

Codegenerierungsprozess MWE2 Workflow: Grammatik in grammaruri Dateiendung in file.extensions Infrastrukturprojektname in projectname, Projekt in runtimeproject In Java geschriebener Generatorcode im Ordner xtend-gen: Codegenerierung im Anwendungsprojekt: Im Anwendungsprojekt: Erzeuge einen Source- Ordner src-gen Der generierte Code wird in diesen Ordner geschrieben. Taentzer Modellgetriebene Softwareentwicklung 303

Ein größeres Beispiel Code-Generierung aus einfachen Klassenmodellen Weitere Konzepte: Eine compile-methode pro Modellelementtyp Behandlung von Optionen Behandlung von Typvererbung im Modell Benutzung von Aufzählungen Erzeugung von Listen, z.b. Parameterlisten Navigation durch das Modell, um weitere Informationen zu sammeln Gut lesbaren Code erzeugen Taentzer Modellgetriebene Softwareentwicklung 304

Beispiel: Behandlung von Entity-Vererbung Da extends ein Java-Schlüsselwort ist, Umbenennung dieser Entity- Eigenschaft in supertype. Taentzer Modellgetriebene Softwareentwicklung 305

Beispiel: Behandlung von Aufzählungen Das Template: und seine Verwendung: Taentzer Modellgetriebene Softwareentwicklung 306

Generierung von Listen mit speziellen Formaten FOR-Schleifen können speziell konfiguriert werden: BEFORE fügt Text vor einer Iteration ein. AFTER fügt Text nach einer Iteration ein. SEPARATOR fügt Text zwischen Iterationen ein. BEFORE und AFTER werden für mind. eine Iteration ausgeführt, SEPARATOR für mind. zwei. Beispiel für BEFORE u. AFTER: Öffnende und schließende Klammern um jede Iteration Taentzer Modellgetriebene Softwareentwicklung 307

Behandlung von Zwischenräumen in der Ausgabe Der generierte Code soll gut lesbar sein. Deshalb werden Zwischenräume mitgeneriert. Es soll möglich sein, gut lesbaren Text jeglichen Formats (nicht nur Java-Code) zu erzeugen. Aber auch der Template-Code soll gut lesbar sein. Einrückungen der Kontrollkonstrukte (z.b. FOR, IF) werden nicht berücksichtigt. Zeilen, die keinen statischen Text enthalten, sondern Kontrollstrukturen oder Aufrufe, die leere Strings erzeugen, erscheinen nicht in der Ausgabe. Zwischenräume zwischen statischen Texten werden ausgegeben. Taentzer Modellgetriebene Softwareentwicklung 308

Navigation durch ein Model mit Vererbung Übergeordneter Container: econtainer Inhalt eines Eobject: econtents Selektion anhand des Typs: <obj> instanceof <type> Verwendung eines EObject als bestimmter Typ: <obj> as <type> Taentzer Modellgetriebene Softwareentwicklung 309

Zusammenfassung Xtend eignet sich zur Codeerzeugung Zum Generieren von Code wird IGenerator implementiert. Die Methode dogenerate wird überschrieben Weitere Template-basierte Methoden werden hinzugefügt. Zur Definition von Templates hat Xtend einfache Kontrollkonstrukte: for, if elseif else Berechnungen können in separaten Methoden durchgeführt werden. Zwischenräume können in den Templates explizit definiert werden. Taentzer Modellgetriebene Softwareentwicklung 310