Add termin1
This commit is contained in:
parent
d950b92770
commit
8f24570fa4
25
01-termin.md
25
01-termin.md
|
@ -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)
|
||||
|
@ -37,7 +37,7 @@ Online Programming Platform for Software Engineering Eduation
|
|||
|
||||
Was passiert im Tutorium?
|
||||
|
||||
* Besprechung und Anwendung der Konzepte aus der Vorlesung
|
||||
* Besprechung und Anwendung der Konzepte aus der Vorlesung
|
||||
|
||||
---
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
Loading…
Reference in New Issue