Update of exercises
parent
5a02699595
commit
4fbaa7d562
|
@ -1,6 +1,6 @@
|
||||||
# String in Großbuchstaben umwandeln
|
# String in Großbuchstaben umwandeln
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Labeled Break
|
# Labeled Break
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Passwortbewertung
|
# Passwortbewertung
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# printf mit Formatstring
|
# printf mit Formatstring
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Maximum in einem Array suchen
|
# Maximum in einem Array suchen
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Taschenrechner
|
# Taschenrechner
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Quine
|
# Quine
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Java-Coding-Standard anwenden
|
# Java-Coding-Standard anwenden
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# JavaDoc schreiben
|
# JavaDoc schreiben
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Klasse mit JUnit testen
|
# Klasse mit JUnit testen
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Information-Hiding einer Klasse verbessern
|
# Information-Hiding einer Klasse verbessern
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Vorhandene Bibliotheken als JAR einbinden
|
# Vorhandene Bibliotheken als JAR einbinden
|
||||||
|
|
||||||
📆 **Fällig: 26.03.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Final anwenden
|
# Final anwenden
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Figur und Rechteck
|
# Figur und Rechteck
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Figur erweitern
|
# Figur erweitern
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Figur noch einmal erweitern
|
# Figur noch einmal erweitern
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Konstruktoren schreiben
|
# Konstruktoren schreiben
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Polymorphie einsetzen
|
# Polymorphie einsetzen
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Singleton
|
# Singleton
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Statische Methoden und Attribute
|
# Statische Methoden und Attribute
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Methode überladen
|
# Methode überladen
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Methoden überschreiben
|
# Methoden überschreiben
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Varag-Methode schreiben
|
# Varag-Methode schreiben
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Vererbung von Figuren
|
# Vererbung von Figuren
|
||||||
|
|
||||||
📆 **Fällig: 02.04.2023** 📆
|
|
||||||
|
|
||||||
## Lernziel
|
## Lernziel
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
# Abstrakte Klassen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Eine abstrakte Klasse einsetzen, um eine einheitliche Schnittstelle für unterschiedliche Klassen anzubieten.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Im Paket [pr2.interfaces.abstrakte_klassen_e](../sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/) finden Sie Klassen, welche geometrische Figuren repräsentieren.
|
||||||
|
|
||||||
|
Betrachten Sie die vorhandenen Klassen `Dreieck`, `Kreis` und `Geometer` und finden Sie Gemeinsamkeiten und Unterschiede. Lassen Sie das Programm laufen und notieren Sie sich die Ausgabe.
|
||||||
|
|
||||||
|
Führen Sie eine neue _abstrakte_ Klasse `Figur` ein und vereinfachen Sie mit dieser Klasse das vorhandene Programm. Lassen Sie das Programm erneut laufen und vergleichen Sie die Ausgabe mit der vorher notierten.
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Abstrakte Klasse
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Abstrakte Klasse verwenden.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Gehen Sie in das Paket [pr2.interfaces.abstrakt_form](../sources/src/main/java/pr2/interfaces/abstrakt_form/).
|
||||||
|
|
||||||
|
Schreiben Sie bitte eine abstrakte Klasse `Form` mit den folgenden abstrakten Methoden:
|
||||||
|
|
||||||
|
* `flaeche()` liefert die Fläche der Form als Gleitkommazahl mit doppelter Genauigkeit zurück
|
||||||
|
* `umfang()` liefert den Umfang der Form als Gleitkommazahl mit doppelter Genauigkeit zurück
|
||||||
|
|
||||||
|
Fügen Sie außerdem noch zwei Attribute für die x- und y-Position der Form hinzu und schreiben Sie einen entsprechenden Konstruktor. Wählen Sie die Sichtbarkeiten der Attribute so, dass Subklassen sie lesen und schreiben können.
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Comparable implementieren
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Klasse "comparable" machen.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Im Paket [pr2.interfaces.comparable_student](../sources/src/main/java/pr2/interfaces/comparable_student/) finden Sie die Klasse `Student`.
|
||||||
|
|
||||||
|
Ändern Sie die Klasse bitte so ab, dass sie das `Comparable`-Interface implementiert. Die Sortierfolge soll sein: Nachname, Vorname, Matrikelnummer.
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Interface Stack entwerfen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Ein Interface entwerfen und dieses dann implementieren.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Gehen Sie in das Paket [pr2.interfaces.stack](../sources/src/main/java/pr2/interfaces/stack/).
|
||||||
|
|
||||||
|
Entwerfen Sie bitte ein Interface `Stack`, das die grundlegenden Operationen eines Stacks definiert:
|
||||||
|
|
||||||
|
* `push` -- schiebt ein neues Objekt auf den Stack
|
||||||
|
* `pop` -- holt das obere Element vom Stack und gibt es zurück
|
||||||
|
* `peek` -- gibt das obere Element zurück, lässt es aber auf dem Stack liegen
|
||||||
|
* `size` -- gibt die Anzahl der Elemente auf dem Stack zurück
|
||||||
|
|
||||||
|
Der Stack soll beliebige Objekte verwalten können.
|
||||||
|
|
||||||
|
Implementieren Sie das Interface mit einer Klasse `StackImpl` und schreiben Sie JUnit-Tests, um Ihre Implementierung zu testen.
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Interface: Uebersetzer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Ein Interface implementieren.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Im Paket [pr2.interfaces.uebersetzer](../sources/src/main/java/pr2/interfaces/uebersetzer/) finden Sie das Interface `Uebersetzer`, das eine Methode zum Übersetzen von Strings definiert.
|
||||||
|
|
||||||
|
Implementieren Sie das Interface für die Sprachen Spanisch (`UebersetzerDeutschSpanisch`) und Englisch (`UebersetzerDeutschEnglisch`) und schreiben Sie eine Klasse `Translator`, die auf der Kommandozeile als erstes Argument die Sprache und als zweites das zu über\-setzende deutsche Wort nimmt und dann auf der Konsole die Übersetzung ausgibt. Es genügt, wenn Sie einige wenige Worte in den Klassen als Übersetzungen vorhalten.
|
||||||
|
|
||||||
|
```console
|
||||||
|
> java Translator englisch gehen
|
||||||
|
Übersetzung: deutsch -> englisch
|
||||||
|
gehen -> go
|
||||||
|
|
||||||
|
> java Translator spanisch gehen
|
||||||
|
Übersetzung: deutsch -> spanisch
|
||||||
|
gehen -> ir
|
||||||
|
|
||||||
|
> java Translator deutsch gehen
|
||||||
|
Unbekannte Sprache
|
||||||
|
|
||||||
|
> java Translator spanisch fliegen
|
||||||
|
Unbekanntes Wort: fliegen
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
|
@ -0,0 +1,37 @@
|
||||||
|
# Interfaces anwenden und entwerfen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Lernziel
|
||||||
|
|
||||||
|
Ein vorhandenes Interface implementieren und ein eigenes Interface programmieren. Klassen schreiben, die mehrere Interfaces implementieren. Die Kollision von gleichnamigen Interface-Methoden und deren Konsequenzen verstehen.
|
||||||
|
|
||||||
|
## Aufgabe
|
||||||
|
|
||||||
|
Im Paket [pr2.interfaces.interfaces_e](../sources/src/main/java/pr2/interfaces/interfaces_e/) finden Sie Klassen für einen einfachen Spielecontroller.
|
||||||
|
|
||||||
|
Bei dieser Aufgabe geht es um Spielecontroller (Joysticks) und deren Abbildung in einem Programm. Schauen Sie sich das Interface `DigitalController` und die dazugehörige Implementierung `DigitalControllerImpl` an. Führen Sie die passenden Tests aus.
|
||||||
|
|
||||||
|
Schreiben Sie nun ein neues Interface `AnalogController` im Paket `api`, das dieselben Methoden wie `DigitalController` hat, mit dem Unterschied, dass die Methoden `up`, `down`, `left` und `right` einen Prozentsatz (Wert zwischen `0.0` und `1.0`) bekommen, der die Auslenkung des Joysticks anzeigt. Die Methode `getPosition` bleibt im Vergleich zum `DigitalController` unverändert. Aus z.B. der Methode `void up()` aus `DigitalController` wird also `void up(double percentage)` in `AnalogController`.
|
||||||
|
|
||||||
|
Implementieren Sie das Interface jetzt in einer Klasse `AnalogControllerImpl` im Paket `impl` und testen Sie Ihre Implementierung mit dem Test `AnalogControllerTest`. Damit der Test ausgeführt werden kann, müssen Sie die Tests noch einkommentieren.
|
||||||
|
|
||||||
|
__Hinweis:__ Lassen Sie sich bei der Implementierung der Klasse `AnalogControllerImpl` nicht zu sehr von `DigitalControllerImpl` beeinflussen. Sie müssen einen anderen Weg wählen und die Position als `double`-Werte speichern. Eine direkte Verwendung von `Point` wird nicht funktionieren, da `Point` nur ganzzahlige Positionen verwalten kann. Erst in `getPosition` sollten Sie die `double`-Werte runden.
|
||||||
|
|
||||||
|
Schreiben Sie nun eine Klasse `DualShock4` im Paket `impl`, die beide Interfaces implementiert. Beachten Sie, dass der Controller zwar zwei Steuerknüppel hat (einen analogen und einen digitalen), aber aus beiden nur eine gemeinsame Position errechnet.
|
||||||
|
|
||||||
|
__Hinweis:__ `DualShock4` implementiert zwar die Interfaces, er erbt aber nicht von den Implementierungen. Modellieren Sie die Beziehung zwischen `DualShock4` und `DigitalControllerImpl` bzw. `AnalogControllerImpl` als Assoziation. Leiten Sie dann die Aufrufe der implementierten Methoden an diese Instanzvariablen weiter.
|
||||||
|
|
||||||
|
Testen Sie die Implementierung mit dem entsprechenden Test `DualShock4Test`. Auch hier müssen Sie erst die Kommentarzeichen entfernen, bevor der Test laufen kann.
|
||||||
|
|
||||||
|
|
||||||
|
## Abgabe (optional)
|
||||||
|
|
||||||
|
__Sie müssen keine Lösung für diese Aufgabe einreichen.__
|
||||||
|
|
||||||
|
Sie können Ihre Lösung aber auf die Konformität mit den Programmierstandards testen. Hierzu gehen Sie wie folgt vor:
|
||||||
|
|
||||||
|
1. Öffnen Sie eine Kommandozeile (Terminal).
|
||||||
|
2. Gehen Sie in Ihr Working Directory.
|
||||||
|
3. Wechseln Sie mit `cd` in das Verzeichnis `sources`.
|
||||||
|
4. Bauen Sie das Projekt mit dem Kommando `mvn`.
|
58
readme.md
58
readme.md
|
@ -6,29 +6,35 @@ Hier finden Sie die **freiwilligen Übungen** zur Vorlesung Programmieren 2 (PR2
|
||||||
|
|
||||||
Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md).
|
Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md).
|
||||||
|
|
||||||
| # | Ausgabe | Thema | Fällig am 📆 |
|
| # | Ausgabe | Thema |
|
||||||
|----|------------|-------------------------------------------------------------------------|----------------|
|
|----|-------------------------------------------------------------------------|----------------|
|
||||||
| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | **26.03.2023** |
|
| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) |
|
||||||
| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | **26.03.2023** |
|
| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) |
|
||||||
| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | **26.03.2023** |
|
| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) |
|
||||||
| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | **26.03.2023** |
|
| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) |
|
||||||
| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | **26.03.2023** |
|
| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) |
|
||||||
| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | **26.03.2023** |
|
| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) |
|
||||||
| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | **26.03.2023** |
|
| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) |
|
||||||
| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | **26.03.2023** |
|
| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) |
|
||||||
| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | **26.03.2023** |
|
| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) |
|
||||||
| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) | **26.03.2023** |
|
| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) |
|
||||||
| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | **26.03.2023** |
|
| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) |
|
||||||
| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | **26.03.2023** |
|
| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) |
|
||||||
| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | **02.04.2023** |
|
| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) |
|
||||||
| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | **02.04.2023** |
|
| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) |
|
||||||
| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | **02.04.2023** |
|
| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) |
|
||||||
| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | **02.04.2023** |
|
| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) |
|
||||||
| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | **02.04.2023** |
|
| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) |
|
||||||
| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | **02.04.2023** |
|
| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) |
|
||||||
| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | **02.04.2023** |
|
| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) |
|
||||||
| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | **02.04.2023** |
|
| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) |
|
||||||
| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | **02.04.2023** |
|
| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) |
|
||||||
| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | **02.04.2023** |
|
| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) |
|
||||||
| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | **02.04.2023** |
|
| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) |
|
||||||
| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) | **02.04.2023** |
|
| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) |
|
||||||
|
| 25. | 11.04.2023 | [Abstrakte Klassen](Assignment_025/readme.md) |
|
||||||
|
| 26. | 11.04.2023 | [Abstrakte Klasse](Assignment_026/readme.md) |
|
||||||
|
| 27. | 11.04.2023 | [Comparable implementieren](Assignment_027/readme.md) |
|
||||||
|
| 28. | 11.04.2023 | [Interface Stack entwerfen](Assignment_028/readme.md) |
|
||||||
|
| 29. | 11.04.2023 | [Interface: Uebersetzer](Assignment_029/readme.md) |
|
||||||
|
| 30. | 11.04.2023 | [Interfaces anwenden und entwerfen](Assignment_030/readme.md) |
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package pr2.interfaces.abstrakt_form;
|
||||||
|
|
||||||
|
public class Form {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package pr2.interfaces.abstrakte_klassen_e;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ein Dreieck.
|
||||||
|
*/
|
||||||
|
public class Dreieck {
|
||||||
|
|
||||||
|
/** Grundseite des Dreiecks. */
|
||||||
|
private double grundseite;
|
||||||
|
|
||||||
|
/** Höhe. */
|
||||||
|
private double hoehe;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erzeugt ein neues Dreieck.
|
||||||
|
*
|
||||||
|
* @param grundseite Grundseite.
|
||||||
|
* @param hoehe Höhe.
|
||||||
|
*/
|
||||||
|
public Dreieck(double grundseite, double hoehe) {
|
||||||
|
this.grundseite = grundseite;
|
||||||
|
this.hoehe = hoehe;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet die Fläche.
|
||||||
|
*
|
||||||
|
* @return die Fläche.
|
||||||
|
*/
|
||||||
|
public double flaeche() {
|
||||||
|
return grundseite * hoehe / 2;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package pr2.interfaces.abstrakte_klassen_e;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flächenberechnung.
|
||||||
|
*/
|
||||||
|
public final class Geometer {
|
||||||
|
|
||||||
|
/** Keine Instanzen. */
|
||||||
|
private Geometer() {
|
||||||
|
// keine Objekte
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hauptmethode.
|
||||||
|
*
|
||||||
|
* @param args Kommandozeilenargumente
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Kreis[] kreise = new Kreis[5];
|
||||||
|
Dreieck[] dreiecke = new Dreieck[5];
|
||||||
|
|
||||||
|
kreise[0] = new Kreis(10.0);
|
||||||
|
kreise[1] = new Kreis(5.5);
|
||||||
|
kreise[2] = new Kreis(3.3);
|
||||||
|
kreise[3] = new Kreis(7.2);
|
||||||
|
kreise[4] = new Kreis(8.0);
|
||||||
|
|
||||||
|
dreiecke[0] = new Dreieck(4.0, 3.0);
|
||||||
|
dreiecke[1] = new Dreieck(2.0, 1.0);
|
||||||
|
dreiecke[2] = new Dreieck(5.0, 8.0);
|
||||||
|
dreiecke[3] = new Dreieck(2.0, 7.2);
|
||||||
|
dreiecke[4] = new Dreieck(14.0, 3.8);
|
||||||
|
|
||||||
|
double gesamtflaeche = 0.0;
|
||||||
|
|
||||||
|
for (Kreis kreis : kreise) {
|
||||||
|
gesamtflaeche += kreis.flaeche();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Dreieck dreieck : dreiecke) {
|
||||||
|
gesamtflaeche += dreieck.flaeche();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.printf("Die Fläche beträgt: %.2f", gesamtflaeche);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package pr2.interfaces.abstrakte_klassen_e;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ein Kreis.
|
||||||
|
*/
|
||||||
|
public class Kreis {
|
||||||
|
|
||||||
|
/** Radius des Kreises. */
|
||||||
|
private double radius;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legt einen neuen Kreis an.
|
||||||
|
*
|
||||||
|
* @param radius Radius des Kreises.
|
||||||
|
*/
|
||||||
|
public Kreis(double radius) {
|
||||||
|
this.radius = radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Berechnet die Fläche.
|
||||||
|
*
|
||||||
|
* @return die Fläche.
|
||||||
|
*/
|
||||||
|
public double flaeche() {
|
||||||
|
return Math.PI * radius * radius;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package pr2.interfaces.comparable_student;
|
||||||
|
|
||||||
|
public class Student {
|
||||||
|
|
||||||
|
private final String vorname;
|
||||||
|
private final String nachname;
|
||||||
|
private final int matrikelNr;
|
||||||
|
|
||||||
|
public Student(String vorname, String nachname,
|
||||||
|
int matrikelNr) {
|
||||||
|
this.vorname = vorname;
|
||||||
|
this.nachname = nachname;
|
||||||
|
this.matrikelNr = matrikelNr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s, %s (%d)", nachname, vorname,
|
||||||
|
matrikelNr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package pr2.interfaces.interfaces_e.api;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ein digitaler Joystick.
|
||||||
|
*/
|
||||||
|
public interface DigitalController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nach oben bewegen.
|
||||||
|
*/
|
||||||
|
void up();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nach unten bewegen.
|
||||||
|
*/
|
||||||
|
void down();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nach links bewegen.
|
||||||
|
*/
|
||||||
|
void left();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nach rechts bewegen.
|
||||||
|
*/
|
||||||
|
void right();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Liefert die aktuelle Position zurück.
|
||||||
|
*
|
||||||
|
* @return Die Position.
|
||||||
|
*/
|
||||||
|
Point getPosition();
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package pr2.interfaces.interfaces_e.impl;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
|
||||||
|
import pr2.interfaces.interfaces_e.api.DigitalController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementierung eines digitalen Joysticks.
|
||||||
|
*/
|
||||||
|
public class DigitalControllerImpl implements DigitalController {
|
||||||
|
|
||||||
|
private Point position = new Point(0, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DigitalController#up()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void up() {
|
||||||
|
position.translate(0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DigitalController#down()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void down() {
|
||||||
|
position.translate(0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DigitalController#left()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void left() {
|
||||||
|
position.translate(-1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DigitalController#right()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void right() {
|
||||||
|
position.translate(1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DigitalController#getPosition()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Point getPosition() {
|
||||||
|
return (Point) position.clone();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package pr2.interfaces.interfaces_e.test;
|
||||||
|
|
||||||
|
//import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
//import tpe.vererbung.interfaces.api.AnalogController;
|
||||||
|
//import tpe.vererbung.interfaces.chinesen.AnalogControllerImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests für einen analogen Joystick.
|
||||||
|
*/
|
||||||
|
public class AnalogControllerTest extends DigitalControllerTest {
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Testet einen anlogen Controller.
|
||||||
|
// */
|
||||||
|
// @Test
|
||||||
|
// void testAnalogController() {
|
||||||
|
// AnalogController c = new AnalogControllerImpl();
|
||||||
|
// testAnalogController(c);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Interne Hilfsmethode zum Test von analogen Controllern.
|
||||||
|
// *
|
||||||
|
// * @param c Controller, der getestet wird
|
||||||
|
// */
|
||||||
|
// protected void testAnalogController(AnalogController c) {
|
||||||
|
// c.up(0.5);
|
||||||
|
// assertPointEquals(0, 0, c.getPosition());
|
||||||
|
// c.up(0.5);
|
||||||
|
// assertPointEquals(0, -1, c.getPosition());
|
||||||
|
//
|
||||||
|
// c.left(0.3);
|
||||||
|
// c.left(0.3);
|
||||||
|
// c.left(0.3);
|
||||||
|
// assertPointEquals(0, -1, c.getPosition());
|
||||||
|
// c.left(0.2);
|
||||||
|
// assertPointEquals(-1, -1, c.getPosition());
|
||||||
|
//
|
||||||
|
// c.down(1.0);
|
||||||
|
// assertPointEquals(-1, 0, c.getPosition());
|
||||||
|
//
|
||||||
|
// c.down(1.0);
|
||||||
|
// assertPointEquals(-1, 1, c.getPosition());
|
||||||
|
// c.down(1.0);
|
||||||
|
// assertPointEquals(-1, 2, c.getPosition());
|
||||||
|
//
|
||||||
|
// c.right(0.5);
|
||||||
|
// c.right(0.5);
|
||||||
|
// c.right(0.5);
|
||||||
|
// assertPointEquals(0, 2, c.getPosition());
|
||||||
|
// }
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package pr2.interfaces.interfaces_e.test;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
//
|
||||||
|
//import org.junit.jupiter.api.Test;
|
||||||
|
import pr2.interfaces.interfaces_e.impl.DigitalControllerImpl;
|
||||||
|
import pr2.interfaces.interfaces_e.api.DigitalController;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests für einen digitalen Joystick.
|
||||||
|
*/
|
||||||
|
public class DigitalControllerTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testet einen digitalen Controller.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void testDigitalController() {
|
||||||
|
DigitalController c = new DigitalControllerImpl();
|
||||||
|
testDigitalController(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interne Hilfsmethode zum Test von digitalen Controllern.
|
||||||
|
*
|
||||||
|
* @param c Controller, der getestet wird
|
||||||
|
*/
|
||||||
|
protected void testDigitalController(DigitalController c) {
|
||||||
|
assertPointEquals(0, 0, c.getPosition());
|
||||||
|
c.up();
|
||||||
|
c.up();
|
||||||
|
assertPointEquals(0, -2, c.getPosition());
|
||||||
|
c.down();
|
||||||
|
c.down();
|
||||||
|
assertPointEquals(0, 0, c.getPosition());
|
||||||
|
c.left();
|
||||||
|
c.right();
|
||||||
|
assertPointEquals(0, 0, c.getPosition());
|
||||||
|
c.left();
|
||||||
|
assertPointEquals(-1, 0, c.getPosition());
|
||||||
|
c.left();
|
||||||
|
assertPointEquals(-2, 0, c.getPosition());
|
||||||
|
c.right();
|
||||||
|
c.right();
|
||||||
|
c.right();
|
||||||
|
assertPointEquals(1, 0, c.getPosition());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interne Hilfsmethode, um einen Punkt mit seinem x und
|
||||||
|
* y-Wert zu vergleichen.
|
||||||
|
*
|
||||||
|
* @param x x-Wert
|
||||||
|
* @param y y-Wert
|
||||||
|
* @param point Punkt, der verglichen werden soll
|
||||||
|
*/
|
||||||
|
protected void assertPointEquals(int x, int y, Point point) {
|
||||||
|
assertEquals(new Point(x, y), point);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package pr2.interfaces.interfaces_e.test;
|
||||||
|
|
||||||
|
//import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
//import pr2.interfaces.interfaces_e.api.DigitalController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests für einen analogen Joystick.
|
||||||
|
*/
|
||||||
|
public class DualShock4Test extends AnalogControllerTest {
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Testet einen DualShock4 Kombi-Controller.
|
||||||
|
// */
|
||||||
|
// @Test
|
||||||
|
// void testDualShock4() {
|
||||||
|
// DigitalController cd = new DualShock4();
|
||||||
|
// testDigitalController(cd);
|
||||||
|
//
|
||||||
|
// AnalogController ca = new DualShock4();
|
||||||
|
// testAnalogController(ca);
|
||||||
|
//
|
||||||
|
// DualShock4 ds = new DualShock4();
|
||||||
|
//
|
||||||
|
// ds.up();
|
||||||
|
// ds.up(1.0);
|
||||||
|
// assertPointEquals(0, -2, ds.getPosition());
|
||||||
|
//
|
||||||
|
// ds.left();
|
||||||
|
// ds.right();
|
||||||
|
// ds.right(0.5);
|
||||||
|
// ds.right(0.5);
|
||||||
|
// assertPointEquals(1, -2, ds.getPosition());
|
||||||
|
//
|
||||||
|
// ds.down();
|
||||||
|
// ds.down();
|
||||||
|
// ds.down(0.3);
|
||||||
|
// ds.down(0.3);
|
||||||
|
// ds.down(0.3);
|
||||||
|
// ds.down(0.1);
|
||||||
|
// assertPointEquals(1, 1, ds.getPosition());
|
||||||
|
// }
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package pr2.interfaces.stack;
|
||||||
|
|
||||||
|
public interface Stack {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package pr2.interfaces.stack;
|
||||||
|
|
||||||
|
public class StackImpl {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package pr2.interfaces.stack.test;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import pr2.interfaces.stack.Stack;
|
||||||
|
import pr2.interfaces.stack.StackImpl;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
public class StackTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testStack() {
|
||||||
|
// TODO: Einkommentieren
|
||||||
|
// Stack s = new StackImpl(100);
|
||||||
|
//
|
||||||
|
// assertEquals(0, s.size());
|
||||||
|
//
|
||||||
|
// s.push("Hallo");
|
||||||
|
// s.push("wie");
|
||||||
|
// s.push("gehts");
|
||||||
|
//
|
||||||
|
// assertEquals(3, s.size());
|
||||||
|
//
|
||||||
|
// assertEquals("gehts", s.peek());
|
||||||
|
// assertEquals("gehts", s.pop());
|
||||||
|
//
|
||||||
|
// assertEquals("wie", s.peek());
|
||||||
|
// assertEquals("wie", s.pop());
|
||||||
|
//
|
||||||
|
// assertEquals("Hallo", s.peek());
|
||||||
|
// assertEquals("Hallo", s.pop());
|
||||||
|
//
|
||||||
|
// assertNull(s.pop());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package pr2.interfaces.uebersetzer;
|
||||||
|
|
||||||
|
public interface Uebersetzer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Übersetzt den gegebeben String.
|
||||||
|
*
|
||||||
|
* @param string String, der übersetzt werden soll
|
||||||
|
* @return die Übersetzung oder {@literal null}, wenn das Wort nicht
|
||||||
|
* bekannt ist
|
||||||
|
*/
|
||||||
|
public String uebersetze(String string);
|
||||||
|
}
|
Loading…
Reference in New Issue