Codegenerierung mit Xtend. 21. Januar 2015

Ähnliche Dokumente
Einführung in die Modelltransformation mit Xtend

Definition von domänenspezifischen Sprachen mit Xtext: Einführung

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

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

Codegeneratoren mit Xtend , A. Arnold

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 7. Februar 2013

Thema 2 Acceleo-MTL- Sprachmittel

Einstieg in die Informatik mit Java

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

Modellgetriebene Softwareentwicklung: Zusammenfassung und Ausblick. 11. Februar 2015

2 Eine einfache Programmiersprache

Individuelle Erweiterung des generierten Codes. 16. Januar 2013

2 Eine einfache Programmiersprache

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

Kapitel 5: Interfaces

JAVA - Methoden

Implementieren von Klassen

Modellgetriebene Softwareentwicklung bei der IBYKUS AG

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

1 - EIN NEUES GAMEGRID ANLEGEN

4. Vererbung Die Klasse Object. Die Klasse Object

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

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

JAVA - Methoden - Rekursion

Objektorientiertes Programmieren (Java)

Programmierung für Mathematik (HS13)

Einstieg in die Informatik mit Java

3.2 Datentypen und Methoden

Remote Method Invocation

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

4. Objektorientierte Programmierung mit C++

Ein kleiner Blick auf die generische Programmierung

(6) Verknüpfen der GUI mit dem Spiel

Freie Markierung Die Templating-Engine FreeMarker im Einsatz

Modellgetriebene Softwareentwicklung. Gabriele Taentzer WS 2012/2013 Philipps-Universität Marburg

Einführung in die Programmierung 1

Programmieren in Java

Handbuch für die Erweiterbarkeit

Arten von Klassen-Beziehungen

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Projektpräsentation. Referent: Florian Kalisch, Denis Radjenovic

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

TYP03-Extensions entwickeln

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

DSLs mit Xtext entwerfen , A. Arnold

Java Einführung Packages

Inhaltsverzeichnis 1 Der objektorientierte Ansatz 2 Elementare Objekte und Ausdrücke

Generierung von Steuerungsprogrammcode für SPS und μc aus Petri-Netz-Modellen

JSP Direktiven. Präprozessor-Anweisungen, die in die JSP-Datei eingebettet sind und vor dem eigentlichen Übersetzungsvorgang ausgeführt JSP

(3) Button-Klick & Texteingabe

Einstieg in die Informatik mit Java

Funktionen in JavaScript

Polymorphie Begriffsklärung und Anwendung

Überschreiben von Methoden

Bash-Skripting Linux-Kurs der Unix-AG

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

Programmieren I + II Regeln der Code-Formatierung

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Benutzerhandbuch pdfprint für Magento2

Anleitung zur Integration der /data.mill API in SAP Java Applikationen

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Programmieren in Java

3. Die Programmiersprache Java

II.1.1. Erste Schritte - 1 -

Programmierkurs Java

Programmieren in Python

Einrichten eines News-Systems in Typo3

1. Übung zu "Numerik partieller Differentialgleichungen"

Excel Funktionen durch eigene Funktionen erweitern.

Überblick. 7. Überladen von Operatoren

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Werkzeuge zur Programmentwicklung

Probeklausur: Programmierung WS04/05

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

Javakurs für Anfänger

Properties und Proxies

Grundlagen der Informatik 12. Strukturen

Software Engineering II

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

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

Eclipse und EclipseLink

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Modellgetriebene Softwareentwicklung

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Transkript:

Codegenerierung mit Xtend 21. Januar 2015

Überblick Xtend bietet einen Template-basierten Ansatz zur Codegenerierung Xtend enthält eine spezielle Template-Sprache. Das Modell kann beliebig benutzt werden, um Informationen abzurufen. Die OCL-ähnliche Syntax von Xtend kann für komplexe Anfragen an das Modell verwendet werden. Weitere Informationen: Xtend: eclipse.org/xtend Xtend User Guide 2.7.0: eclipse.org/xtend/documentation/2.7.0/xtend%20user%20guide.pdf Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 248

Ein erstes Beispiel Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 249

Ein Codegenerator mit Xtend Im Paket org.xtext.example.mydsl.generator Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 250

Start der Codegenerierung Resource nach Einstiegspunkt(en) für die Codegenerierung filtern Im Beispiel: Entity, Enumeration 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 @Inject extension IQualifiedNameProvider Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 251

Beispiel: Zwei Templates In MyClassModelgenerator.xtend: Guillements: Ctrl + < und Ctrl + > Syntaxvervollständigung: Ctrl + Space Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 252

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 Entwicklung von mobilen Anwendungen 253

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 Entwicklung von mobilen Anwendungen 254

Xtext-Grammatik für Klassenmodelle Taentzer 255

Beispiel: Entities mit Import u. Vererbung Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 256

Generierung aus einem Modell mit Vererbung Zwei verschiedene Arten von Dateien Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 257

Generierung aus einem Modell mit Vererbung - 2 Ü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 Entwicklung von mobilen Anwendungen 258

Beispiel: Behandlung von Aufzählungen Das Template: und seine Verwendung: Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 259

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 Entwicklung von mobilen Anwendungen 260

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 Entwicklung von mobilen Anwendungen 261

Verwendung mehrerer Xtend-Klassen Variablendeklaration mit val Objekterzeugung mit new Aufruf der Methode Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 262

Beispiel: Einfügen eines Id-Felds In compile(entity e): Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 263

Beispiel-Codeerzeugung Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 264

Kontinuierliche Erweiterung des Codegenerators Entwicklung eines Codegenerators Referenzanwendung(en) abstrahieren generieren erweitern Entwicklung einer konkreten Anwendung 1. Generierung eines Prototyps, soweit möglich 2. manuelle Erweiterung des generierten Codes um das nächste Feature 3. Analyse des erweiterten Codes 4. Erweiterung des Generators und eventuell der DSL Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 265

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 aus Modellinformationen sollten in separaten Methoden durchgeführt werden. Zwischenräume können in den Templates explizit definiert werden. Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 266