13. Funktionale Konzepte in Java

Ähnliche Dokumente
Repetitorium Informatik (Java)

Algorithmen und Programmierung II

Welche Informatik-Kenntnisse bringen Sie mit?

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

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

II.1.1. Erste Schritte - 1 -

Algorithmen und Datenstrukturen

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

Programmieren in Java

5. Tutorium zu Programmieren

Programmieren I + II Regeln der Code-Formatierung

Probeklausur: Programmierung WS04/05

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

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

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

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Einstieg in die Informatik mit Java

1 Polymorphie (Vielgestaltigkeit)

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

AuD-Tafelübung T-B5b

Theorie zu Übung 8 Implementierung in Java

Javakurs zu Informatik I. Henning Heitkötter

Einführung in die Informatik

Probeklausur: Programmierung WS04/05

Skriptsprachen am Beispiel Python

Java-Schulung Grundlagen

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Software Entwicklung 1

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Kapitel 3: Variablen

Primitive Datentypen

C# im Vergleich zu Java

Elementare Datentypen in C++

Java I Vorlesung 6 Referenz-Datentypen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Grundlagen der Informatik 2

Programmieren in C++ Überladen von Methoden und Operatoren

Einführung in die Programmierung 1

Software Engineering Klassendiagramme Einführung

Arrays Fortgeschrittene Verwendung

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

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Grundlagen von Python

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Beispiel für überladene Methode

Programmierung in Python

Einführung in die Java- Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Werkzeuge zur Programmentwicklung

Einführung und Vorstellung: Grundlagen der Java- Programmierung. paluno

Propädeutikum zur Programmierung

Repetitorium Informatik (Java)

Ein erstes Java-Programm

Grundlagen der Informatik I (Studiengang Medieninformatik)

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Objektorientierte Programmierung in Java

C für Java-Programmierer

Programmierung mit C Zeiger

Java Kurs für Anfänger Einheit 5 Methoden

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

JAVA - Methoden

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

Vererbung. Martin Wirsing. Ziele. Vererbung

Einstieg in die Informatik mit Java

Große Übung Praktische Informatik 1

Einführung in Java. Arne Hüffmeier. Angelehnt an Java-Vorkurs der Freitagsrunde. Methoden implementieren. Michelle Liebers, Dennis Hoffmann

Arbeiten mit JavaKara

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Programmierkurs. Manfred Jackel

3 Objektorientierte Konzepte in Java

Tutoraufgabe 1 (Programmanalyse):

Objektorientierte Programmierung

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

6 Speicherorganisation

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Objektorientierte Programmierung

Java Einführung Methoden. Kapitel 6

Auslieferungsmethoden im Performancevergleich Zieleinlauf mit Java

Datenbankanwendungsprogrammierung Crashkurs Java

Javakurs 2013 Objektorientierung

Programmierkurs Java

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Objektorientierte Programmierung

Einführung in die Programmierung Vorlesungsprüfung

Transkript:

Funktionale vs. Imperative Programmierung 13. 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 325 326 : Einlesen von Daten - Imperativ : Einlesen von Daten - Funktional try (BufferedReader br=new BufferedReader(new FileReader("daten.csv"))){ LinkedList<Messwert> resultat = new LinkedList<>(); br.readline(); String zeile ; while (( zeile = br.readline())!= null){ Messwert m = new Messwert(zeile); resultat. add(m); return resultat ; try (Stream<String> stream = Files.lines(Paths.get("daten.csv"))) { return stream.skip(1). map(messwert::new).collect(tolist()); 327 328

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(messwert::new) 329 330 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<Messwert> daten = lesecsvdaten(); Koordinate ref = lesekoordinate(); for (Messwert m : daten){ if (m.position.nahebei(ref)){ System.out.println(m. originalzeile ); collect (tolist ()) 331 332

: Suchen von Daten - Funktional Operationen auf Datenströmen: Filter Filter: Herausfiltern einzelner Elemente des Streams. List<Messwert> daten = lesecsvdaten(); Koordinate ref = lesekoordinate(); daten.stream(). filter (m > ref.nahebei(m.position)). foreach(system.out::println ); Illegale Werte entfernen Auswahl von Werten basierend auf Anfragen filter (m > ref.nahebei(m.position)) 333 334 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: lose Code-Stücke Referenzen auf Methoden Referenzen auf Konstruktoren Wie können wir dies bewerkstelligen? 335 336

Lambda Ausdrücke Lambda Ausdrücke sind im Wesentlichen Methoden ohne Namen. Normale Methode double diskriminante(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 Body (a, b, c) > b b 4 a c 337 338 Lambda Ausdruck im filter (m > ref.nahebei(m.position)) Die Methode filter erwartet eine Methode als Parameter, welche einen Messwert entgegennimmt, und einen boolean zurueckgibt. m ist ein Parameter vom Typ Messwert ref.nahebei(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: objekt.methode() Um eine Referenz auf eine Methode auf einem Objekt anzugeben ohne diese auszuführen, schreiben wir: objekt::methode 339 340

Referenzen auf statische Methoden Referenz auf eine Methode im Um eine statische Methode auszuführen, schreiben wir: Klasse.methode() foreach(system.out::println) Um eine Referenz auf eine statische Methode anzugeben, schreiben wir: Klasse::methode Die Methode foreach erwartet eine Methode, welche nichts zurück gibt und ein Argument vom Typ Messwert akzeptiert. Die Methode println auf Objekt out erfüllt diese Eigenschaften. 341 342 Referenzen auf Konstruktoren Referenz auf einen Konstruktor im Um einen Konstruktur einer Klasse auszuführen, schreiben wir: new Klasse() map(messwert::new) Um eine Referenz auf einen Konstruktor anzugeben ohne das Objekt dabei zu erstellen, schreiben wir: Klasse::new Die Methode map erwartet eine Methode, welche ein Objekt eines gewissen Datentyps zurueckgibt (egal welcher, solange immer der gleiche) und ein Argument vom Typ String akzeptiert. Der Konstruktor der Klasse Messwert erfüllt diese Eigenschaft. 343 344

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 345