From 8f24570fa4a37deb8e9a16a092879bff03fbdfed Mon Sep 17 00:00:00 2001 From: "Burau, Henri" Date: Thu, 29 Apr 2021 15:47:18 +0200 Subject: [PATCH] Add termin1 --- 01-termin.md | 25 +++++++++++++--- assert.md | 48 +++++++++++++++++++++++++++++++ polymorphie.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 assert.md create mode 100644 polymorphie.md diff --git a/01-termin.md b/01-termin.md index 2c85eea..b9d1212 100644 --- a/01-termin.md +++ b/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 diff --git a/assert.md b/assert.md new file mode 100644 index 0000000..afc5b5f --- /dev/null +++ b/assert.md @@ -0,0 +1,48 @@ + + +# 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. + diff --git a/polymorphie.md b/polymorphie.md new file mode 100644 index 0000000..6abf602 --- /dev/null +++ b/polymorphie.md @@ -0,0 +1,78 @@ + + +# 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. +