11. Funktionale Konzepte in Java

Ähnliche Dokumente
13. Funktionale Konzepte in Java

6. Java Fehler und Ausnahmen

System.out.println("TEXT");

Java 8. basierend auf Folien von Florian Erhard

Klausur Grundlagen der Programmierung

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Repetitorium Informatik (Java)

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

Welche Informatik-Kenntnisse bringen Sie mit?

1 Klassen und Objekte

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?

Algorithmen und Programmierung II

Programmieren I. Kapitel 13. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Lambda Expressions in Java 8

Programmiermethodik 1. Klausur

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

Datenstrukturen / Container in Java

14. Java Objektorientierung

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Tag 7 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen II

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

1 Klassen anlegen und Objekte erzeugen

5. Tutorium zu Programmieren

1 Klassen anlegen und Objekte erzeugen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

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

Web-Techniken Einführung in JavaScript

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Klassen als Datenstrukturen

pue13 January 28, 2017

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Algorithmen implementieren. Implementieren von Algorithmen

Algorithmen und Datenstrukturen

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

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Programmieren I + II Regeln der Code-Formatierung

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Implementieren von Klassen

Einstieg in die Informatik mit Java

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

ADT: Java Collections und ArrayList

Vorlesungsprüfung Programmiersprache 1

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Institut für Informatik

Einführung in die Programmierung für NF MI. Übung 04

Inhaltsverzeichnis. Lothar Piepmeyer. Grundkurs funktionale Programmierung mit Scala ISBN:

II.4.4 Exceptions - 1 -

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

Javakurs für Fortgeschrittene

4.4 Imperative Algorithmen Prozeduren

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

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren in Java

Das Einsteigerseminar Objektorientierte Programmierung in Java

Einführung in die Programmierung und Programmiersprachen (OOP)

Algorithmen und Datenstrukturen

II.1.1. Erste Schritte - 1 -

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

Java-Schulung Grundlagen

Tag 4 Repetitorium Informatik (Java)

Programmieren I + II Regeln der Code-Formatierung

Umsetzungshilfe Java Teil 1

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

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Grundlagen der Programmierung

ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER

Objektorientierte Programmierung Studiengang Medieninformatik

Alexander Niemann. Das Einsteigerseminar" < Objektorientierte ^ Programmierung in Java. bhv. i.-

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Objektorientierte Programmierung mit C++ SS 2007

AuD-Tafelübung T-B5b

Workshop Einführung in die Sprache Haskell

Probeklausur: Programmierung WS04/05

Scala: Klassen, Methoden und Objekte. von Simon Lerch

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

15 Zuweisungen und Zustand

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Einführung in das objektorientierte Modellieren und Implementieren mit Java

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Objektorientierte Programmierung Studiengang Medieninformatik

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Institut für Informatik und Angewandte Kognitionswissenschaften

Selbststudium OOP6 & ALG Programmieren 1 - H1103 Felix Rohrer

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Methoden und Wrapperklassen

Einstieg in die Informatik mit Java

Theorie zu Übung 8 Implementierung in Java

Transkript:

Funktionale vs. Imperative Programmierung 11. Funktionale Konzepte in Java Funktionale Programmierung, Lambda Ausdrücke, Datenströme, Pipelines Imperative Konzepte Ausführen von Anweisungen Zustand (z.b. Felder) Änderbare Datentypen Fokus auf Datenstrukturen Fokus auf das wie Funktionale Konzepte Evaluierung von Ausdrücken Kein Zustand Immutable Datentypen Fokus auf Datenströme Fokus auf das was 342 343 : Einlesen von Dateien - Imperativ : Einlesen von Dateien - Funktional try (BufferedReader br=new BufferedReader(new FileReader("data.csv"))){ LinkedList<Measurement> result = new LinkedList<>(); br.readline(); String line ; while (( line = br.readline())!= null){ Measurement m = new Measurement(line); result.add(m); return result ; try (Stream<String> stream = Files.lines(Paths.get("data.csv"))) { return stream.skip(1). map(measurement::new).collect(tolist()); 344 345

Streams - Datenströme In Java sind Streams die Basis für funktionale Programmierung. Quellen von Datenströmen: Dateien Arrays Datenstrukturen Stream<String> stream = Files.lines (...)) Operationen auf Datenströmen: Map Map: Anwenden von Funktionen auf den einzelnen Elementen des Streams Mathematische Berechnungen Erstellen neuer Objekte basierend auf den existierenden Elementen. map(measurement::new) 346 347 Operationen auf Datenströmen: Reduce : Suchen von Daten - Imperativ Reduce: Aggregierung der einzelnen Elemente eines Datenstroms zu einem einzelnen Wert. Statistische Aggregationen Ablegen der Elemente in Datenstrukturen List<Measurement> data = readcsvdata(); Coordinate ref = readcoordinate(); for (Measurement m : data){ if (m.position.near( ref )){ System.out.println(m.originalLine ); collect (tolist ()) 348 349

: Suchen von Daten - Funktional Operationen auf Datenströmen: Filter Filter: Herausfiltern einzelner Elemente des Streams. List<Measurement> data = readcsvdata(); Coordinate ref = readcoordinate(); data.stream(). filter (m > ref.near(m.position)). foreach(system.out::println ); Illegale Werte entfernen Auswahl von Werten basierend auf Anfragen filter (m > ref.near(m.position)) 350 351 Operationen auf Datenströmen: Seiteneffekte Funktionalität als Parameter Seiteneffekte: Der nicht-funktionale Aspekt: Ausführen von beliebigen Operationen aufgrund einzelner Elemente. Input/Ouput Datenstrukturen updaten foreach(system.out::println) Operationen auf dem Stream haben Funktionalität (Code) als Parameter, anstelle von Daten Möglichkeiten, Funktionalität zu übergeben (statt Daten): lose Code-Stücke Referenzen auf Methoden Referenzen auf Konstruktoren Wie können wir dies bewerkstelligen? 352 353

Lambda Ausdrücke Lambda Ausdrücke sind im Wesentlichen Methoden ohne Namen. Normale Methode double discriminant(double a, double b, double c){ Gleichwertiger Lambda Ausdruck (double a, double b, double c) > { Lambda Ausdrücke Lambda Ausdruck (double a, double b, double c) > { Ohne explizite Typdeklaration der Parameter (a, b, c) > { Mit einem einzelnen Ausdruck statt einem Block (a, b, c) > b b 4 a c 354 355 Lambda Ausdruck im filter (m > ref.near(m.position)) Die Methode filter erwartet eine Methode als Parameter, welche einen Measurement entgegennimmt, und einen boolean zurueckgibt. m ist ein Parameter vom Typ Measurement ref.near(m.position) ist ein einzelner booleanausdruck Die Variable ref aus dem definierenden Kontext ist zugänglich, solange sie effektiv konstant (final) ist. Referenzen auf Methoden Um eine Methode auf einem Objekt auszuführen, schreiben wir: object.method() Um eine Referenz auf eine Methode auf einem Objekt anzugeben, schreiben wir: object::methode 356 357

Referenzen auf statische Methoden Referenz auf eine Methode im Um eine statische Methode auszuführen, schreiben wir: Clazz.method() foreach(system.out::println) Um eine Referenz auf eine statische Methode anzugeben, schreiben wir: Clazz::method Die Methode foreach erwartet eine Methode, welche nichts zurück gibt und ein Argument vom Typ Measurement akzeptiert. Die Methode println auf Objekt out erfüllt diese Eigenschaften. 358 359 Referenzen auf Konstruktoren Referenz auf einen Konstruktor im Um einen Konstruktur einer Klasse auszuführen, schreiben wir: new Clazz() map(measurement::new) Um eine Referenz auf einen Konstruktor anzugeben, schreiben wir: Clazz::new Die Methode map erwartet eine Methode, welche ein Objekt eines gewissen Datentyps zurueckgibt (egal welcher) und ein Argument vom Typ String akzeptiert. Der Konstruktor der Klasse Measurement erfüllt diese Eigenschaft. 360 361

Vor- und Nachteile von Funktionaler Programmierung Weniger fehleranfällig Einfacher zu unterhalten Ermöglicht elegante Programmierung Nicht abhängig von spezifischer Architektur Neue Sprachkonzepte zu lernen Ausführungsdetails unbekannt Aufgesetzt auf imperativer Sprache 362