Add termin5

This commit is contained in:
Henri Burau 2021-06-17 11:02:45 +02:00
parent af3772f76d
commit a062672e2f
3 changed files with 155 additions and 0 deletions

31
05-termin.md Normal file
View File

@ -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**

73
lambdas.md Normal file
View File

@ -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.

51
streams.md Normal file
View File

@ -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.