diff --git a/Assignment_001/readme.md b/Assignment_001/readme.md index 211782e..839ab73 100644 --- a/Assignment_001/readme.md +++ b/Assignment_001/readme.md @@ -1,6 +1,6 @@ # String in Großbuchstaben umwandeln -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_002/readme.md b/Assignment_002/readme.md index 4a4b814..a22f5cc 100644 --- a/Assignment_002/readme.md +++ b/Assignment_002/readme.md @@ -1,6 +1,6 @@ # Labeled Break -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_003/readme.md b/Assignment_003/readme.md index 5793944..4c9dc8f 100644 --- a/Assignment_003/readme.md +++ b/Assignment_003/readme.md @@ -1,6 +1,6 @@ # Passwortbewertung -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_004/readme.md b/Assignment_004/readme.md index 86508e5..4420c01 100644 --- a/Assignment_004/readme.md +++ b/Assignment_004/readme.md @@ -1,6 +1,6 @@ # printf mit Formatstring -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_005/readme.md b/Assignment_005/readme.md index 15e12ad..08f0abc 100644 --- a/Assignment_005/readme.md +++ b/Assignment_005/readme.md @@ -1,6 +1,6 @@ # Maximum in einem Array suchen -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_006/readme.md b/Assignment_006/readme.md index f2ffc3c..6af5467 100644 --- a/Assignment_006/readme.md +++ b/Assignment_006/readme.md @@ -1,6 +1,6 @@ # Taschenrechner -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_007/readme.md b/Assignment_007/readme.md index 3f526d2..dd2b729 100644 --- a/Assignment_007/readme.md +++ b/Assignment_007/readme.md @@ -1,6 +1,6 @@ # Quine -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_008/readme.md b/Assignment_008/readme.md index a67d8bf..372621e 100644 --- a/Assignment_008/readme.md +++ b/Assignment_008/readme.md @@ -1,6 +1,6 @@ # Java-Coding-Standard anwenden -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_009/readme.md b/Assignment_009/readme.md index b581637..dbecb82 100644 --- a/Assignment_009/readme.md +++ b/Assignment_009/readme.md @@ -1,6 +1,6 @@ # JavaDoc schreiben -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_010/readme.md b/Assignment_010/readme.md index 729d766..fea3bdf 100644 --- a/Assignment_010/readme.md +++ b/Assignment_010/readme.md @@ -1,6 +1,6 @@ # Klasse mit JUnit testen -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_011/readme.md b/Assignment_011/readme.md index 5f80abf..b7f8a78 100644 --- a/Assignment_011/readme.md +++ b/Assignment_011/readme.md @@ -1,6 +1,6 @@ # Information-Hiding einer Klasse verbessern -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_012/readme.md b/Assignment_012/readme.md index 193a237..6e5a2a5 100644 --- a/Assignment_012/readme.md +++ b/Assignment_012/readme.md @@ -1,6 +1,6 @@ # Vorhandene Bibliotheken als JAR einbinden -📆 **Fällig: 26.03.2023** 📆 + ## Lernziel diff --git a/Assignment_013/readme.md b/Assignment_013/readme.md index 9dc8c0b..79fe752 100644 --- a/Assignment_013/readme.md +++ b/Assignment_013/readme.md @@ -1,6 +1,6 @@ # Final anwenden -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_014/readme.md b/Assignment_014/readme.md index a09ef8c..6c1fe29 100644 --- a/Assignment_014/readme.md +++ b/Assignment_014/readme.md @@ -1,6 +1,6 @@ # Figur und Rechteck -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_015/readme.md b/Assignment_015/readme.md index 5667b20..9093646 100644 --- a/Assignment_015/readme.md +++ b/Assignment_015/readme.md @@ -1,6 +1,6 @@ # Figur erweitern -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_016/readme.md b/Assignment_016/readme.md index fc95c06..5336ef6 100644 --- a/Assignment_016/readme.md +++ b/Assignment_016/readme.md @@ -1,6 +1,6 @@ # Figur noch einmal erweitern -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_017/readme.md b/Assignment_017/readme.md index 5f8f381..1024e29 100644 --- a/Assignment_017/readme.md +++ b/Assignment_017/readme.md @@ -1,6 +1,6 @@ # Konstruktoren schreiben -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_018/readme.md b/Assignment_018/readme.md index a51dd64..08afb8e 100644 --- a/Assignment_018/readme.md +++ b/Assignment_018/readme.md @@ -1,6 +1,6 @@ # Polymorphie einsetzen -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_019/readme.md b/Assignment_019/readme.md index f4ee15f..2cf5db3 100644 --- a/Assignment_019/readme.md +++ b/Assignment_019/readme.md @@ -1,6 +1,6 @@ # Singleton -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_020/readme.md b/Assignment_020/readme.md index 1ce5389..7654cf1 100644 --- a/Assignment_020/readme.md +++ b/Assignment_020/readme.md @@ -1,6 +1,6 @@ # Statische Methoden und Attribute -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_021/readme.md b/Assignment_021/readme.md index e6745a9..1353992 100644 --- a/Assignment_021/readme.md +++ b/Assignment_021/readme.md @@ -1,6 +1,6 @@ # Methode überladen -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_022/readme.md b/Assignment_022/readme.md index db5516e..9ab12f4 100644 --- a/Assignment_022/readme.md +++ b/Assignment_022/readme.md @@ -1,6 +1,6 @@ # Methoden überschreiben -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_023/readme.md b/Assignment_023/readme.md index 5e0b51d..3d2af88 100644 --- a/Assignment_023/readme.md +++ b/Assignment_023/readme.md @@ -1,6 +1,6 @@ # Varag-Methode schreiben -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_024/readme.md b/Assignment_024/readme.md index 2d15d0d..745ac9a 100644 --- a/Assignment_024/readme.md +++ b/Assignment_024/readme.md @@ -1,6 +1,6 @@ # Vererbung von Figuren -📆 **Fällig: 02.04.2023** 📆 + ## Lernziel diff --git a/Assignment_025/readme.md b/Assignment_025/readme.md new file mode 100644 index 0000000..1690a2b --- /dev/null +++ b/Assignment_025/readme.md @@ -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`. \ No newline at end of file diff --git a/Assignment_026/readme.md b/Assignment_026/readme.md new file mode 100644 index 0000000..2accb71 --- /dev/null +++ b/Assignment_026/readme.md @@ -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`. \ No newline at end of file diff --git a/Assignment_027/readme.md b/Assignment_027/readme.md new file mode 100644 index 0000000..0b8c9d2 --- /dev/null +++ b/Assignment_027/readme.md @@ -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`. \ No newline at end of file diff --git a/Assignment_028/readme.md b/Assignment_028/readme.md new file mode 100644 index 0000000..d696e9d --- /dev/null +++ b/Assignment_028/readme.md @@ -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`. \ No newline at end of file diff --git a/Assignment_029/readme.md b/Assignment_029/readme.md new file mode 100644 index 0000000..99b9a04 --- /dev/null +++ b/Assignment_029/readme.md @@ -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`. \ No newline at end of file diff --git a/Assignment_030/readme.md b/Assignment_030/readme.md new file mode 100644 index 0000000..f09f6ff --- /dev/null +++ b/Assignment_030/readme.md @@ -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`. \ No newline at end of file diff --git a/readme.md b/readme.md index 1137031..7de8063 100644 --- a/readme.md +++ b/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). -| # | Ausgabe | Thema | Fällig am 📆 | -|----|------------|-------------------------------------------------------------------------|----------------| -| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | **26.03.2023** | -| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | **26.03.2023** | -| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | **26.03.2023** | -| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | **26.03.2023** | -| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | **26.03.2023** | -| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | **26.03.2023** | -| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | **26.03.2023** | -| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | **26.03.2023** | -| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | **26.03.2023** | -| 10. | 20.03.2023 | [Klasse mit JUnit testen](Assignment_010/readme.md) | **26.03.2023** | -| 11. | 20.03.2023 | [Information-Hiding einer Klasse verbessern](Assignment_011/readme.md) | **26.03.2023** | -| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | **26.03.2023** | -| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | **02.04.2023** | -| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | **02.04.2023** | -| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | **02.04.2023** | -| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | **02.04.2023** | -| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | **02.04.2023** | -| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | **02.04.2023** | -| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | **02.04.2023** | -| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | **02.04.2023** | -| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | **02.04.2023** | -| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | **02.04.2023** | -| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | **02.04.2023** | -| 24. | 24.03.2023 | [Vererbung von Figuren](Assignment_024/readme.md) | **02.04.2023** | +| # | Ausgabe | Thema | +|----|-------------------------------------------------------------------------|----------------| +| 1. | 14.03.2023 | [String in Großbuchstaben umwandeln](Assignment_001/readme.md) | +| 2. | 14.03.2023 | [Labeled Break](Assignment_002/readme.md) | +| 3. | 14.03.2023 | [Passwortbewertung](Assignment_003/readme.md) | +| 4. | 14.03.2023 | [printf mit Formatstring](Assignment_004/readme.md) | +| 5. | 14.03.2023 | [Maximum in einem Array suchen](Assignment_005/readme.md) | +| 6. | 14.03.2023 | [Taschenrechner](Assignment_006/readme.md) | +| 7. | 14.03.2023 | [Quine](Assignment_007/readme.md) | +| 8. | 20.03.2023 | [Java-Coding-Standard anwenden](Assignment_008/readme.md) | +| 9. | 20.03.2023 | [JavaDoc schreiben](Assignment_009/readme.md) | +| 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) | +| 12. | 20.03.2023 | [Vorhandene Bibliotheken als JAR einbinden](Assignment_012/readme.md) | +| 13. | 24.03.2023 | [Final anwenden](Assignment_013/readme.md) | +| 14. | 24.03.2023 | [Figur und Rechteck](Assignment_014/readme.md) | +| 15. | 24.03.2023 | [Figur erweitern](Assignment_015/readme.md) | +| 16. | 24.03.2023 | [Figur noch einmal erweitern](Assignment_016/readme.md) | +| 17. | 24.03.2023 | [Konstruktoren schreiben](Assignment_017/readme.md) | +| 18. | 24.03.2023 | [Polymorphie einsetzen](Assignment_018/readme.md) | +| 19. | 24.03.2023 | [Singleton](Assignment_019/readme.md) | +| 20. | 24.03.2023 | [Statische Methoden und Attribute](Assignment_020/readme.md) | +| 21. | 24.03.2023 | [Methode überladen](Assignment_021/readme.md) | +| 22. | 24.03.2023 | [Methoden überschreiben](Assignment_022/readme.md) | +| 23. | 24.03.2023 | [Varag-Methode schreiben](Assignment_023/readme.md) | +| 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) | diff --git a/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java b/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java new file mode 100644 index 0000000..a73eca5 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java @@ -0,0 +1,5 @@ +package pr2.interfaces.abstrakt_form; + + public class Form { + +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java new file mode 100644 index 0000000..ec46aa8 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java @@ -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; + } +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java new file mode 100644 index 0000000..4ab8ff3 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java @@ -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); + } +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java new file mode 100644 index 0000000..1565721 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java @@ -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; + } +} diff --git a/sources/src/main/java/pr2/interfaces/comparable_student/Student.java b/sources/src/main/java/pr2/interfaces/comparable_student/Student.java new file mode 100644 index 0000000..b1816a3 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/comparable_student/Student.java @@ -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); + } + +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java b/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java new file mode 100644 index 0000000..f53c737 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java @@ -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(); +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java b/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java new file mode 100644 index 0000000..852544a --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java @@ -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(); + } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java new file mode 100644 index 0000000..19a44ab --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java @@ -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()); +// } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java new file mode 100644 index 0000000..85ca8ec --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java @@ -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); + } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java new file mode 100644 index 0000000..7024ab6 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java @@ -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()); +// } +} diff --git a/sources/src/main/java/pr2/interfaces/stack/Stack.java b/sources/src/main/java/pr2/interfaces/stack/Stack.java new file mode 100644 index 0000000..5e66f27 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/Stack.java @@ -0,0 +1,5 @@ +package pr2.interfaces.stack; + +public interface Stack { + +} diff --git a/sources/src/main/java/pr2/interfaces/stack/StackImpl.java b/sources/src/main/java/pr2/interfaces/stack/StackImpl.java new file mode 100644 index 0000000..b49b742 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/StackImpl.java @@ -0,0 +1,5 @@ +package pr2.interfaces.stack; + + public class StackImpl { + +} diff --git a/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java b/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java new file mode 100644 index 0000000..2b12714 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java @@ -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()); + } +} diff --git a/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java b/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java new file mode 100644 index 0000000..50cf30d --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java @@ -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); +}