Add termin5
This commit is contained in:
parent
af3772f76d
commit
a062672e2f
|
@ -0,0 +1,31 @@
|
||||||
|
<!--
|
||||||
|
title: Termin 5
|
||||||
|
description: Folien für den ersten Termin in Programmieren 2
|
||||||
|
url: https://git.haw-hamburg.de/pm2-tutorium/slides
|
||||||
|
header: Programmieren 2 **Tutorium**
|
||||||
|
footer: Henri Burau
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Termin 5
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fragen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Links
|
||||||
|
[https://git.haw-hamburg.de/pm2-tutorium](https://git.haw-hamburg.de/pm2-tutorium)
|
||||||
|
- Aufgaben
|
||||||
|
- Tutoriumsfolien
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Plan für heute
|
||||||
|
|
||||||
|
Level 6 Themen:
|
||||||
|
|
||||||
|
- Werkzeug & Material-Ansatz
|
||||||
|
- Entwurfsmuster
|
||||||
|
- **Lambdas**
|
||||||
|
- **Streams**
|
|
@ -0,0 +1,73 @@
|
||||||
|
<!--
|
||||||
|
title: Lambdas
|
||||||
|
description: Folien für Lambdas in Programmieren 2
|
||||||
|
url: https://git.haw-hamburg.de/pm2-tutorium/slides
|
||||||
|
header: Programmieren 2 **Tutorium**
|
||||||
|
footer: Henri Burau
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Lambdas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Grundlagen
|
||||||
|
|
||||||
|
Erlauben das Implementieren von Interfaces mit nur einer Methode.
|
||||||
|
|
||||||
|
Klassischerweise wurde dieses Problem mithilfe von anonymen inneren Klassen gelöst. Lambda-Ausdrücke sparen im Vergleich dazu deutlich an Code.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Beispiel
|
||||||
|
|
||||||
|
Lambda
|
||||||
|
```java
|
||||||
|
_zaehlerUI.gibErhoeheButton().setOnAction(event -> {
|
||||||
|
_zaehler.zaehleHoch();
|
||||||
|
informiereUeberAenderung();
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Anonyme innere Klasse
|
||||||
|
```java
|
||||||
|
_zaehlerUI.gibErhoeheButton().setOnAction(new EventHandler<ActionEvent>() {
|
||||||
|
@Override
|
||||||
|
public void handle(ActionEvent event) {
|
||||||
|
_zaehler.zaehleHoch();
|
||||||
|
informiereUeberAenderung();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
# Beispiel
|
||||||
|
|
||||||
|
```java
|
||||||
|
// Lambda ohne explizite Typen und return (type inference)
|
||||||
|
x -> x * 2
|
||||||
|
|
||||||
|
// Lambda mit explitizen Typen der formalen Parameter
|
||||||
|
(int x, int y) -> x + y
|
||||||
|
|
||||||
|
// Lambda mit return
|
||||||
|
(int x, int y) -> { return x * y + 2 }
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Deklaration
|
||||||
|
|
||||||
|
```java
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface Filter<T> {
|
||||||
|
bool istGueltig(T obj);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
Filter<String> langGenug = (String text) -> text.length() > 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
# Aufgabe
|
||||||
|
|
||||||
|
1) Die Klasse `ZaehlerWerkzeug` nutzt das Interface `Observer` um Änderungen von Subwerkzeugen zu erhalten. `ZaehlerWerkzeug` registriert sich mithilfe von anonymen inneren Klassen. Baue das System der Observer um, sodass Lambdas genutzt werden.
|
|
@ -0,0 +1,51 @@
|
||||||
|
<!--
|
||||||
|
title: Streams
|
||||||
|
description: Folien für Streams in Programmieren 2
|
||||||
|
url: https://git.haw-hamburg.de/pm2-tutorium/slides
|
||||||
|
header: Programmieren 2 **Tutorium**
|
||||||
|
footer: Henri Burau
|
||||||
|
-->
|
||||||
|
|
||||||
|
# Streams
|
||||||
|
|
||||||
|
Erleichtert das Verarbeiten von Sammlungen aus den Collection Framework.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Grundlagen
|
||||||
|
|
||||||
|
Die [Stream-API](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html) bietet Higher Order Functions (HOF) die auf Collections arbeiten. Dazu zählen:
|
||||||
|
* filter
|
||||||
|
* map
|
||||||
|
* fold
|
||||||
|
|
||||||
|
Die Verarbeitung erfolgt in drei Schritten: Erzeugung des Streams, Verarbeitung des Streams und zum Schluss Terminieren des Streams.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Beispiel
|
||||||
|
|
||||||
|
```java
|
||||||
|
List<String> liste = new ArrayList<String>();
|
||||||
|
liste.addAll("was", "geht", "ab", "?");
|
||||||
|
|
||||||
|
int laenge = liste.stream().map(text -> text.length()).reduce(0, Integer::sum);
|
||||||
|
|
||||||
|
List<String> nurWoerter = liste.stream()
|
||||||
|
.filter(s -> s.matches("[a-zA-Z]"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
int nurLangeWoerterLaenge = liste.stream()
|
||||||
|
.filter(s -> s.matches("[a-zA-Z]"))
|
||||||
|
.filter(s -> s.length() >= 3)
|
||||||
|
.map(s -> s.length())
|
||||||
|
.reduce(0, Integer::sum)
|
||||||
|
```
|
||||||
|
|
||||||
|
[`Stream:reduce(Binary)`](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#reduce-T-java.util.function.BinaryOperator-)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Aufgabe
|
||||||
|
|
||||||
|
1) Berechne in `SummiererWerkzeug.setzeSumme()` die Summe der einzelnen Zähler mithilfe von Streams.
|
Loading…
Reference in New Issue