Add termin1

This commit is contained in:
Burau, Henri 2021-04-29 15:47:18 +02:00
parent d950b92770
commit 8f24570fa4
3 changed files with 147 additions and 4 deletions

View File

@ -26,7 +26,7 @@ Henri Burau
Online Programming Platform for Software Engineering Eduation
[https://oppsee.haw-hamburg.de](https://oppsee.haw-hamburg.de)
* Wir sind auf der Suche nach motivierten Mitarbeitern
* Wir sind auf der Suche nach motivierten Mitarbeiter:innen
- Plattform-Entwickler (Go, Javascript, Typescript)
- Aufgaben-Entwickler (Java)
- (UX-Designer)
@ -46,10 +46,9 @@ Was passiert im Tutorium?
- Aufgaben
- Tutoriumsfolien
---
# Hilfestellung im Praktikum
# Hilfestellung für das Praktikum
Fragen dürfen gerne gestellt werden, wenn:
@ -57,3 +56,21 @@ Fragen dürfen gerne gestellt werden, wenn:
* Klar gesagt wird was schon ausprobiert wurde
* Eine Vermutung geäußert wird was falsch ist
* Mich keiner auf WA anschreibt und mich nach den Lösungen fragt
---
# Feedback
---
# Plan für heute
Themen:
- **Testen und Asserts**
- **Polymorphie und Vererbung**
- Generizität
- Reflections
- Implementationsvererbung
- Exceptions
- Module

48
assert.md Normal file
View File

@ -0,0 +1,48 @@
<!--
title: Assertions
description: Folien für Assertions in Programmieren 2
url: https://git.haw-hamburg.de/pm2-tutorium/slides
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Vertragsmodell
Definiert das Verhältnis zwischen Klient und Dienstleister.
Ein Dienstleister kann Vorbedingungen für eine Dienstleistungen definieren. Der Klient
kann dann korrekte Ergebnisse erwarten, solange er die Vorbedingungen einhält.
Verträge im Vertragsmodell konzentrieren sich immer auf die Operationen einer Klasse.
In PM2 konzentrieren wir uns vor allem auf die Vorbedingungen.
---
# Assertions
Assertions sind die Umsetzung von Teilen des Vertragsmodells in Java.
```java
int wert = 1;
assert wert < 5 : "wert muss kleiner fünf sein";
// ausgelöst, wenn Condition(wert < 5) nicht gilt.
```
Wird eine Assertion ausgelöst, dann wird das Programm beendet.
**Achtung:** `assert` muss enabled werden
---
## Aufgaben
1) Gegeben ist eine Methode `int getTriangleArea(int a, int b, int c)`, die die Fläche eines Dreiecks berechnet. Wie würde man sicherstellen, dass `a` und `b` kleiner sind als die Hypothenuse `c`?
* ```java
assert c > b && c > a : "Die Hypothenuse darf nicht kürzer als die beiden Schenkel sein."
```
2) Wie würde man überprüfen ob ein String `input` leer oder gleich `null` ist?
* ```java
assert input != null && !input.isEmpty() : "Der String darf nicht null oder leer sein";
```
3) Ergänze die Methoden `damage` und `feed` um eine Implementation und sinnvolle Überprüfungen des Vertragsmodells.

78
polymorphie.md Normal file
View File

@ -0,0 +1,78 @@
<!--
title: Polymorphie und Vererbung
description: Folien für Polymorphie und Vererbung in Programmieren 2
url: https://git.haw-hamburg.de/pm2-tutorium/slides
header: Programmieren 2 **Tutorium**
footer: Henri Burau
-->
# Polymorphie und Vererbung
---
# Typ und Implementation
Der **Typ** ist die Außenansicht auf einen Dienstleister.
- Welche Operationen gibt es?
- Wie rufe ich diese auf?
Die **Implementation** ist die Innenansicht auf einen Dienstleister.
- Wie wird eine Operation umgesetzt?
- Welche Felder habe ich?
---
# Klassen und Interfaces
**Klassen** haben immer eine Doppelrolle, da sie sowohl einen Typ als auch eine Implementation definieren.
**Interfaces** sollten immer nur einen Typ definieren.
---
# Vererbung
Weitergeben von bereits geschriebenen Code an Subklassen. Sinnvoll
auch zum Aufstellen einer Vererbungshierarchie.
---
## Deklaration
```java
class Shape {
public String toString() {
return "Shape";
}
}
class Rectangle extends Shape {
public String toString() {
return "Rectangle";
}
}
class Circle extends Shape {
public String toString() {
return "Circle";
}
}
```
---
## Benutzung
```java
// In main...
Shape shape = new Shape();
Rectangle rectangle = new Rectangle();
shape.toString();
rectangle.toString();
shape = rectangle;
shape.toString();
```
---
# Aufgaben
* Schreibe eine Klasse `Cow`, welche dieselben Methoden hat wie ein `Sheep`
* Ergänze `Cow` und `Sheep` um eine Methode `String makeNoise()`, ein `Schaf` soll `"Mäh"` zurückgeben, eine `Cow` `"Muh"`.
* Schreibe nun eine Klasse `Animal`. Von dieser Klasse sollen `Sheep` und `Cow` erben. Alle Methoden die bei `Sheep` und `Cow` genau gleich sind, sollen nun in die Superklasse `Animal` verschoben werden.