Started work on termin2

This commit is contained in:
Burau, Henri 2021-05-05 17:24:24 +02:00
parent 8f24570fa4
commit 9d6a1ce2c4
4 changed files with 186 additions and 1 deletions

34
02-termin.md Normal file
View File

@ -0,0 +1,34 @@
<!--
title: Termin 2
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 2
---
# Fragen
---
# Links
[https://git.haw-hamburg.de/pm2-tutorium](https://git.haw-hamburg.de/pm2-tutorium)
- Aufgaben
- Tutoriumsfolien
---
# Plan für heute
Themen:
- Testen und Asserts
- Polymorphie und Vererbung *Nachtrag*
- **Generizität**
- **Reflections**
- Implementationsvererbung
- Exceptions
- Module

118
generics2.md Normal file
View File

@ -0,0 +1,118 @@
<!--
title: Generizität
description: Folien für Generizität in Programmieren 2
url: https://git.haw-hamburg.de/pm2-tutorium/slides
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Generizität
---
# Grundlagen
Durch Generizität können wir Typen, Klasse und Methode parametrisieren. Der
genutzte Typ wird dann zur Laufzeit übergeben.
Genutzt wird dieses Sprachkonzept z.B. im Collection Framework.
```java
// Deklaration
class Test<T> {
public T gibHer(T type) { return type; }
}
```
```java
// Benutzung
Test<String> test;
String result = test.gibHer(test);
```
---
# Raw Types
Der Java-Compiler entfernt alle generischen Parameter und arbeitet dann auf den
**Raw Types**. Dieser Vorgang wird **Type Erasure** genannt. Das führt zu
Beschränkungen zur Laufzeit:
* Generische Klassen können keine statischen Felder haben
* Es können keine Instanzen aus generischen Typen erzeugt werden
* Es kann kein ``instanceof`` für generische Typen genutzt werden
* ... (vollständige Liste auf der [Java-Website](https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html))
---
# Subtyping und Vererbung
Stehen zwei Typen in einer Subtyp-Beziehung (``class Dreieck extends Form``) bedeutet das **nicht**, dass auch die parametrisierten Typen in einer Verbindung stehen.
```java
// Deklaration
class FlaechenVerarbeiter {
public void verarbeiteFlaechen(List<Form> liste) {
}
```
```java
// Benutzung
Dreieck dreieck = new Dreieck();
Verarbeiter verarbeiter = new Verarbeiter();
verarbeiter.verarbeiteFlaechen(dreieck); // Geht das?
```
---
# Wildcards
Werden genutzt um beliebige generische Type als Parameter, Feld, lokale Variable oder Rückgabetypen zu deklarieren.
Benutzt wird dieses Sprachkonzept wenn man z.B. auf Collections arbeiten will:
```java
class ListenSchreiber {
public void schreib(List<?> liste) {
for (Object elem: list) {
System.out.println(elem);
}
}
}
```
---
## Lower Bounds
Beschränkt den Wildcard Typen nach unten. Dafür wird das Schlüsselwort ``super`` verwendet.
```java
// Hierarchie Object -> Number -> Integer
class IntegerSammler {
public void schreib(List<? super Integer> liste) {
for (int i = 0; i <= 10; i++) {
System.out.println(i);
}
}
}
```
---
## Upper Bounds
Beschränkt den Wildcard Typen nach oben. Dafür wird das Schlüsselwort ``extends`` verwendet.
```java
// Hierarchie Object -> Number -> Integer
// -> Double
class Sortierer {
public void sortiere(List<? extends Number> liste) {
// Ein cleverer Sortieralgorithmus,
// der mit Vergleichoperatoren funktioniert.
}
}
```
---
# Aufgaben

View File

@ -31,9 +31,12 @@ Die **Implementation** ist die Innenansicht auf einen Dienstleister.
Weitergeben von bereits geschriebenen Code an Subklassen. Sinnvoll
auch zum Aufstellen einer Vererbungshierarchie.
- Eine Klasse kann erben von: Klassen und abstrakten Klasse
- Ein Interface kann erben von: Interfaces
---
## Deklaration
## Deklaration - Klassen
```java
class Shape {
@ -57,6 +60,22 @@ class Circle extends Shape {
---
## Deklaration - Interfaces
```java
// Repräsentiert eine 2D Form
interface Form {
double gibFlaeche();
}
// Repräsentiert ein 2D Dreieck
interface Dreieck extends Shape {
double gibHoehe();
}
```
---
## Benutzung
```java
@ -69,6 +88,7 @@ shape = rectangle;
shape.toString();
```
---
# Aufgaben

13
reflections.md Normal file
View File

@ -0,0 +1,13 @@
<!--
title: Reflections
description: Folien für Reflections in Programmieren 2
url: https://git.haw-hamburg.de/pm2-tutorium/slides
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Reflections
---