Groovy für Java Programmierer. 20. Juli Stefan Kolatzki

Ähnliche Dokumente
Algorithmen und Datenstrukturen

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

4. Vererbung Die Klasse Object. Die Klasse Object

Groovy Einführung groovy.codehaus.org

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

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

Bean-Mapping mit MapStruct

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Java I Vorlesung Generics und Packages

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Einführung in C# Teil 3. Matthias Nübling

Programmiermethodik 1. Klausur

Lambda Expressions in Java 8

Kapitel 5: Interfaces

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einführung in die Programmiersprache Java II

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Dynamische Typinformation A01 OOP. Dynamische Typinformation

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Softwaretechnik WS 16/17. Übungsblatt 01

II.1.1. Erste Schritte - 1 -

Programmierkurs Java

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

- dynamisches Laden -

12 Abstrakte Klassen, finale Klassen und Interfaces

Vorkurs Informatik WiSe 16/17

JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

Stefan Roock Bernd Schiffer Beispiel Grails

Programmiermethodik 3. Klausur Lösung

Grails agil und extrem

Info B VL 11: Innere Klassen/Collections

OOP. Tagesprogramm. Dynamische Typinformation. Homogene Übersetzung der Generizität. Generizität und Typumwandlungen

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

Vorkurs Informatik WiSe 17/18

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Objektorientierte Programmierung Studiengang Medieninformatik

AuD-Tafelübung T-B5b

1 Klassen und Objekte

Ich liebe Java && Ich liebe C# Rolf Borst

10. OLAPLINE-Anwendertreffen

Tafelübung 07 Algorithmen und Datenstrukturen

Informatik II (D-ITET) Übungsstunde 6

Wie entwerfe ich ein Programm?

Kapitel 4: Klassen und Unterklassen

Modularisierung in Java: Pakete Software Entwicklung 1

Vorkurs Informatik WiSe 17/18

Programmieren in Java

Programmieren in Java

Programmieren in Java

Tag 8 Repetitorium Informatik (Java)

Gliederung der Folien

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

Programmierkurs C++ Abstrakte Klassen und Methoden

Informatik II. Woche 13, Giuseppe Accaputo

EINFÜHRUNG IN DIE PROGRAMMIERUNG

1 Abstrakte Klassen, finale Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces

Groovy 3 und das neue Meta Object Protocol in Beispielen

Einstieg in die Informatik mit Java

Crashkurs C++ Wiederholung

Einführung in Java. Ausgewählte Quellen zu Java

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Programmieren in Java

1. Abstrakte Klassen

Arten von Klassen-Beziehungen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Vorlesung Programmieren

Besonderheiten von C#

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Vererbung und Traits

Arten des universellen Polymorphismus

Aufbau einer Web 2.0 Community mit Grails. DOAG Konferenz + Ausstellung 2010 Nicole Hoock, esentri consulting GmbH

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

3. Java - Sprachkonstrukte I

Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester

Scala. Funktionale (Zustandslose) Objekte

Vorkurs Informatik WiSe 16/17

Informatik III. Operatoren überladen am Beispiel des ADT Complex in C und Java sowie C++, C# und Groovy. Prof. Dr. Nikolaus Wulff

Das Ersetzbarkeitsprinzip

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

II.1.1. Erste Schritte - 1 -

Java-Schulung Grundlagen

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Programmieren - C++ Funktions-Templates

Groovy und CouchDB. Ein traumhaftes Paar. Thomas Westphal

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Objektorientierte Programmierung

Philipp Güttler Objektorientierung und komplexe Datentypen

Javakurs für Anfänger

Klausur Grundlagen der Programmierung

Programmieren 2 16 Java Collections und Generizität

Transkript:

Groovy für Java Programmierer 20. Juli 2015 Stefan Kolatzki

Übersicht Karriere bei LINEAS Groovy für Java Programmierer Closures Literale, Operatoren, Operatoren überladen Extensions Compilerverhalten erweitern Domain Specific Languages Live Demo

Karriere bei LINEAS

Wir über uns IT-Dienstleister und Software- und Beratungshaus in Niedersachsen Standorte in Braunschweig und Wolfsburg ca. 100 Mitarbeiter hoher qualitativer Anspruch in allen Bereichen mit maßgeschneiderten, zukunftssicheren und integrierten Lösungen hochqualifizierte Mitarbeiter durch kontinuierliche Weiterbildung und Zertifizierung neueste Technologien um bestmögliche Ergebnisse und hohen Kundennutzen zu erzielen

Kunden

Karriere Flache Hierarchien und ein familiäres Arbeitsumfeld Individuelle Entwicklungsmöglichkeiten Regelmäßige Feedbackgespräche Unbefristete Arbeitsverträge Dienstwagenmodelle Fitnessstudiozuschüsse und Massagen Gemeinsame Betriebsfeiern und Events Montags frisches Obst, Freitags Süssigkeiten Kaffee, Tee, Wasser Softwareentwickler Java Softwareentwickler C / C++ Softwareentwickler Grails / AngularJs

Kontakt LINEAS Informationstechnik GmbH Theodor-Heuss-Str. 2 38122 Braunschweig Telefon +49 (531) 8852 0 Web: www.lineas.de Victoria Mahler, Personalleiterin +49 (531) 8852-1124 personal@lineas.de

Groovy für Java Programmierer

Groovy ist wie Java, nur ohne das Semikolon. Unbekannt ;

Danke für ihre Aufmerksamkeit

Groovy Dynamische Programmiersprache Dynamische Typisierung (def als dynamischer Typ) Typinferenz mit Flussanalysen (if(user instanceof User){...}) Erweiterte Methodensuche beim Aufruf Aufruf von undefinierten Methoden JVM als Zielplattform Superset von Java (mit kleinen Einschränkungen) Funktionale Aspekte Funktionen höherer Ordnung Rekursion Typinferenz Operationen auf Listen

Closures Funktion mit Zugriff auf den Erstellungskontext Als Funktion höherer Ordnung nutzbar Beispiel: int value = 5 def cfun = { int add -> return value + add } assert cfun(10)==15

Zusätzliche Literale (Auswahl) Listen / Mengen List<String> values = ["C++", "Java", "C#"] Set<String> values = ["C++", "Java", "C#"] Maps Map<String,Integer> values = ["C++":4, "Java":5, "C#": 3] Wertebereiche List<Integer> values = 5..9 //==[5,6,7,8,9] List<Integer> values = 5..<9 //==[5,6,7,8] Strings String javastring = 'Dies ist ein normaler Java String.' String interpolated = "String mit Werten: ${values}." String multiline = """String über mehrere Zeilen."""

Zusätzliche Operatoren (Auswahl) N-te Potenz int value = 2**3 // == 8 Elvis Operator String value = name?: "John" // name? name : "John" Safe Navigation String value = user?.name Spread Operator List<String> names = users*.getname() Spaceship int compare = 1 <=> 1 // == 0 int compare = 'a' <=> 'z' // == -1 Subscript User user = users[3] // user instanceof List<User>

Operatoren überladen Mapping von Operatoren auf Funktionsnamen class Complex{ } Complex negative(){ } Complex plus(final Complex value){ } Complex minus(final Complex value){ }... void test(complex a, Complex b){ Complex c = -a Complex d = a + b Complex e = b - d... }

Extensions Erweiterungen für existierende Klassen Statische und Instanzmethoden möglich Registrierung in META-INF Beschreibungsdatei Extensions in Groovy Runtime Collections collect() Streams Beispiel: static <T> T sample(final Collection<T> self) { } final int index = new Random().nextInt(self.size()) return (self as List).get(index)

Compilerverhalten erweitern Anpassen des Groovy Compileverhaltens per Annotationen Compile-Time Metaprogramming Eingebaute Umformungen in Groovy @groovy.transform.tostring @groovy.lang.singleton @groovy.util.logging.commons @groovy.transform.compilestatic Direkter Zugriff auf abstrakten Syntaxbaum Einordnung der Umwandlung zu Compilerphase Beispiel Spock DataDriven Testing Grails Domain-Klassen / Services

Domain Specific Languages email { } from 'candidate@tu-bs.de' to 'personal@lineas.de subject 'Hire me ' body { p 'Hi there. I'am a ' } Verwendet Methoden von class EmailSpec { } void from(string from) { println "From: $from"} void to(string... to) { println "To: $to"} void subject(string subject) { println "Subject: $subject"} void body(closure body) { } def bodyspec = new BodySpec() def code = body.rehydrate(bodyspec, this, this) code.resolvestrategy = Closure.DELEGATE_ONLY code()

Weiteres Traits (Interfaces mit Implementierungen) Standard Sichtbarkeit ist public Mischen von Groovy und Java Klassen Erweiterte Typumwandlung Typen müssen nicht zwingend Zuweisungskompatibel sein Coercion Operator ( as <TYPE>) list as Set 5 as String Feldzugriff über (generierte) Getter + Setter user.name übersetzt zu user.getname() Vergleichsoperator == verwendet equals Methode Methodenüberladungen mit Default-Werten Letzter Ausdruck einer Methode/Closure ist Rückgabewert

Live Demo

Pros und Cons Pros Weniger Code Funktionale Programmierung Schnellere Entwicklung Flexibel Erweiterbar Cons Fehleranfälliger durch dynamische Typisierung Etwas langsamer als Java Debugging von dynamischen Funktionsaufrufen schwierig

Danke für ihre Aufmerksamkeit

Quellen Groovy http://groovy-lang.org "Mazes for Programmers" James Buck The Pragmatic Programmers, LLC. 30.06.2015 Spock Framework http://spockframework.org The Grails Framework http://grails.org Gradle https://gradle.org