diff --git a/homework/b01.md b/homework/b01.md index dbba4749b..5b05ea3f4 100644 --- a/homework/b01.md +++ b/homework/b01.md @@ -9,12 +9,16 @@ no_beamer: true -*Dieses Blatt ist bewusst einfach gestaltet und dient der Wiederholung Ihrer Kenntnisse aus -der LV "Programmieren 1".* +# Zusammenfassung + +Dieses Blatt ist bewusst einfach gestaltet und dient der Wiederholung Ihrer Kenntnisse aus der +LV "Programmieren 1". Implementieren Sie in Java das Spiel [Hangman]. -# Installation JDK und IDE, Deaktivierung AI-Support +# Aufgaben + +## Installation JDK und IDE, Deaktivierung AI-Support Sie benötigen für die Bearbeitung der Übungsaufgaben ein *Java Development Kit* (JDK). Wir verwenden in der Lehrveranstaltung "Programmieren 2" aus verschiedenen Gründen die *Long-Term @@ -35,7 +39,7 @@ sämtliche KI-Unterstützung wie beispielsweise Copilot, JetBrains AI Assistant, CodeGPT, Codeium, Tabnine, Windsurf, ... (Liste nicht vollständig) für die Bearbeitung der Übungsaufgaben in dieser Lehrveranstaltung ab. -# Anlegen eines Java-Projektes +## Anlegen eines Java-Projektes Legen Sie für die Bearbeitung der Aufgabe ein neues Java-Projekt in Ihrer IDE an. Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und **keine Sonderzeichen** (Umlaute @@ -57,7 +61,7 @@ Testen Sie bitte die genutzte Java-Version: Korrigieren Sie Ihr Setup, wenn Sie andere Ausgaben erhalten. -# Übersetzen und Starten und Debuggen von Programmen +## Übersetzen und Starten und Debuggen von Programmen Erstellen Sie in Ihrem neuen Projekt die folgende Klasse: @@ -82,7 +86,7 @@ Starten Sie das obige Programm im Debug-Modus Ihrer IDE. Halten Sie die Ausführ die nächste Anweisung (das `System.out.println`) aus. Wie beenden Sie das Programm? Demonstrieren Sie das live im Praktikum. -# Swing und Java2D +## Swing und Java2D Das Spiel soll vollständig über eine in Swing und Java2D realisierte GUI bedient werden: @@ -92,7 +96,7 @@ Das Spiel soll vollständig über eine in Swing und Java2D realisierte GUI bedie 4. Die bisher eingegebenen Buchstaben sollen in der Reihenfolge der Eingabe angezeigt werden. 5. Das Spiel soll per Knopfdruck abgebrochen und neu gestartet werden können. -# Einlesen von Textdateien +## Einlesen von Textdateien Es soll die Möglichkeit geben, eine Textdatei mit zu ratenden Wörtern einzulesen: @@ -106,11 +110,11 @@ Es soll die Möglichkeit geben, eine Textdatei mit zu ratenden Wörtern einzules 6. Es soll für jedes neue Spiel ein zufälliges Wort aus der Menge der eingelesenen Wörter zum Raten ausgewählt werden. -# Dokumentation +## Dokumentation Erstellen Sie ein UML-Klassendiagramm für Ihre Lösung. -# Fortgeschrittenere Aufgaben +## Ausprobieren von fortgeschrittenen Widgets 1. Heben Sie in der Anzeige der eingegebenen Buchstaben die korrekt geratenen Buchstaben in grüner Farbe hervor. @@ -120,4 +124,30 @@ Erstellen Sie ein UML-Klassendiagramm für Ihre Lösung. 3. Lassen Sie den Nutzer per Slider die Schwierigkeit variieren: Steuerung der Länge des zu ratenden Wortes und/oder Steuerung der Anzahl der erlaubten Fehlversuche. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 25. April, 08:00 Uhr +- Vorstellung im Praktikum: 25. April + [Hangman]: https://en.wikipedia.org/wiki/Hangman_(game) + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b02.md b/homework/b02.md index d642aedbf..76681b76d 100644 --- a/homework/b02.md +++ b/homework/b02.md @@ -9,9 +9,16 @@ no_beamer: true -# Git +# Zusammenfassung -## Git Status erklären +Auf diesem Blatt üben Sie den Umgang mit Git (Repo und Commits - zunächst auf der Konsole) +sowie den Einsatz von Lambda-Ausdrücken und das Schreiben von Gradle-Build-Skripten. + +# Aufgaben + +## Git + +### Git Status erklären Betrachten Sie die folgende Ausgabe von `git status` in einer lokalen Workingcopy (*Arbeitskopie*): @@ -36,7 +43,7 @@ Erklären Sie die Ausgabe. Geben Sie eine Befehlssequenz an, mit der Sie nur die Änderungen in `foo.java` committen können. -## Git-Spiel +### Git-Spiel Klonen Sie die [Vorgaben "Git-Quest"]. Sie finden die Geschichte des Helden Markus im Dungeon.[^1] @@ -72,7 +79,7 @@ Dungeon.[^1] Demonstrieren Sie Ihr Vorgehen im Praktikum jeweils live. -## Commit-Meldungen +### Commit-Meldungen Gute Commit-Meldungen schreiben erfordert Übung. Schauen Sie sich die beiden Commits [Dungeon-CampusMinden/Dungeon/commit/46530b6] und @@ -81,7 +88,7 @@ Gute Commit-Meldungen schreiben erfordert Übung. Schauen Sie sich die beiden Co Diskutieren Sie jeweils, was Ihnen an den Commits auffällt: Was gefällt Ihnen, was stört Sie? Schlagen Sie Verbesserungen vor. -# Gradle +## Gradle Folgen Sie der Anleitung auf [gradle.org] und installieren Sie Gradle auf Ihrem Rechner. Legen Sie in der Konsole ein neues Gradle-Projekt für eine Java-Applikation an (ohne IDE!). Das @@ -99,7 +106,7 @@ Aufgaben diese Abschnitte jeweils erfüllen. Gehen Sie dabei im *Detail* auf das Machen Sie sich Notizen, welche Sie im Praktikum nutzen dürfen, um dort das Buildskript zu erklären. -# Calculator: Anonyme Klassen und Lambda-Ausdrücke +## Calculator: Anonyme Klassen und Lambda-Ausdrücke Klonen Sie die [Vorgaben "Calculator"] und laden Sie das Projekt als Gradle-Projekt in Ihre IDE. @@ -127,6 +134,31 @@ Methode `setupOperationSelector`: *anonymen Klasse* definiert. Konvertieren Sie dies in einen entsprechenden **Lambda-Ausdruck**. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 02. Mai, 08:00 Uhr +- Vorstellung im Praktikum: 02. Mai + [^1]: Für alle, die schon mit Branches umgehen können: Betrachten Sie auf diesem Blatt bitte nur den Branch `master`. @@ -135,3 +167,4 @@ Methode `setupOperationSelector`: [Dungeon-CampusMinden/Dungeon/commit/3e37472]: https://github.com/Dungeon-CampusMinden/Dungeon/commit/3e3747220ade538b4c974a520cc9104121789aa1 [gradle.org]: https://gradle.org/ [Vorgaben "Calculator"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_calculator + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b03.md b/homework/b03.md index 5253201a8..69a993ce6 100644 --- a/homework/b03.md +++ b/homework/b03.md @@ -9,7 +9,14 @@ no_beamer: true -# Git-Spiel +# Zusammenfassung + +Auf diesem Blatt üben Sie den Umgang mit Git (Branches und Mergen - zunächst auf der Konsole) +sowie den Einsatz von Methoden-Referenzen und den Einsatz von Logging. + +# Aufgaben + +## Git-Spiel Betrachten Sie erneut die [Vorgaben zur "Git-Quest"]. Die Geschichte des Helden Markus findet im `master`-Branch kein Ende, sondern erst im Hilfsbranch `end`. @@ -35,12 +42,12 @@ einem frischen Klon der Vorgaben. Was beobachten Sie jeweils? Erklären Sie Ihre Beobachtungen. Wenn es Konflikte gibt: Wie lösen Sie diese auf? Demonstrieren Sie das Vorgehen im Praktikum live. -# LSF-Contact +## LSF-Contact Betrachten Sie die [Vorgaben "LSF-Contact"]. Klonen Sie das Repo und laden Sie das Projekt als Gradle-Projekt in Ihre IDE. -## Methoden-Referenzen +### Methoden-Referenzen Sie finden im Package `lsfcontact` eine Klasse `Student`. Jede Instanz dieser Klasse hat mindestens einen Namen (`String`), und man kann verschiedene Konktaktmöglichkeiten per Setter @@ -78,7 +85,7 @@ Schaffen Sie es, diese durch Methodenreferenzen zu ersetzen? Achten Sie darauf, alle Schritte nachvollziehbar in Ihrer Arbeitskopie per Git Commit festzuhalten. Demonstrieren Sie dies im Praktikum. -## Logging +### Logging Bauen Sie für das `LsfContactUtil` ein Logging auf der Basis von `java.util.logging` ein: Jede Benachrichtigung von Studierenden soll in ein gemeinsames CSV-File geloggt werden. Dabei soll @@ -96,5 +103,31 @@ pro Logging-Vorgang eine neue Zeile mit den folgenden Informationen angehängt w Demonstrieren Sie in der Abgabe, wie Sie im Test oder im Hauptprogramm den Logger steuern können, beispielsweise Änderung der Log-Level oder Abschalten des Loggings. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 09. Mai, 08:00 Uhr +- Vorstellung im Praktikum: 09. Mai + [Vorgaben zur "Git-Quest"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_gitquest [Vorgaben "LSF-Contact"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_lsfcontact + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b04.md b/homework/b04.md index af17fd8a1..192e3a891 100644 --- a/homework/b04.md +++ b/homework/b04.md @@ -9,15 +9,23 @@ no_beamer: true +# Zusammenfassung + +Auf diesem Blatt üben Sie den Umgang mit Git Remotes sowie die Erstellung von Pull-Requests +auf GitHub. Darüber hinaus üben wir den Umgang mit der Java-Stream-API und noch einmal mit +Lambda-Ausdrücken. + ::: important **Hinweis**: Bitte denken Sie daran, dass Sie spätestens ab diesem Blatt die Bearbeitung der -Aufgaben in einem öffentlich sichtbaren Git-Repo durchführen sollen. Den Link zu Ihrem -jeweiligen Lösungs-Repo geben Sie bitte in Ihrem *Post Mortem* mit an. +Aufgaben in Ihren öffentlich sichtbaren Git-Repos durchführen sollen. Die Links zu Ihren +Pull-Requests mit den Lösungen geben Sie bitte in Ihrem *Post Mortem* mit an. ::: -# Stream-API +# Aufgaben -## Git: Pull-Requests (und Code-Formatierung und -Dokumentation) +## Stream-API + +### Git: Pull-Requests (und Code-Formatierung und -Dokumentation) Forken Sie das ["Stream-API"]-Repo und erzeugen Sie eine lokale Arbeitskopie von Ihrem Fork. @@ -31,7 +39,7 @@ einen Pull-Request auf **Ihren** eigenen `master`-Branch. Achten Sie darauf, alle Schritte nachvollziehbar in Ihrer Arbeitskopie per Git-Commit festzuhalten. Demonstrieren Sie im Praktikum, wie Sie mit den Pull-Requests arbeiten. -## Stream-API: Task I +### Stream-API: Task I Betrachten Sie den Branch `task_i`. Sie finden im Package `streamapi` einige Hilfsklassen sowie in der Datei [`Main.java`] einen Starter für diese erste Teilaufgabe. @@ -43,7 +51,7 @@ Schreiben Sie den Body dieser Methode so um, dass die selbe Funktionalität unte [Java-Stream-API] erreicht wird. Bevorzugen Sie dabei nach Möglichkeit Methoden-Referenzen vor Lambda-Ausdrücken. -## Stream-API: Task II +### Stream-API: Task II Betrachten Sie nun den Branch `task_ii`. Sie finden wieder im Package `streamapi` einige Hilfsklassen sowie in der Datei [`Main.java`][1] einen Starter für diese zweite Teilaufgabe. @@ -58,7 +66,7 @@ Schreiben Sie den Body dieser Methode so um, dass die selbe Funktionalität unte [Java-Stream-API] erreicht wird. Bevorzugen Sie dabei nach Möglichkeit Methoden-Referenzen vor Lambda-Ausdrücken. -## Stream-API: Task III +### Stream-API: Task III Betrachten Sie nun den Branch `task_iii`. Sie finden wieder im Package `streamapi` einige Hilfsklassen sowie in der Datei [`Main.java`][2] einen Starter für diese dritte Teilaufgabe. @@ -71,7 +79,7 @@ Schreiben Sie den Body dieser Methode so um, dass die selbe Funktionalität unte [Java-Stream-API] erreicht wird. Bevorzugen Sie dabei nach Möglichkeit Methoden-Referenzen vor Lambda-Ausdrücken. -## Stream-API: Task IV+V +### Stream-API: Task IV+V Betrachten Sie nun den Branch `task_iv_v`. Sie finden wieder im Package `streamapi` einige Hilfsklassen sowie in der Datei [`Main.java`][3] einen Starter für diese vierte Teilaufgabe. @@ -110,7 +118,7 @@ Hilfsklassen sowie in der Datei [`Main.java`][3] einen Starter für diese vierte Machen Sie aus der Klasse `streamapi.Student` eine Record-Klasse. -# DevDungeon: Zerbrechende Tiles und Speed Potions (Lambda-Ausdrücke) +## DevDungeon: Zerbrechende Tiles und Speed Potions (Lambda-Ausdrücke) Klonen Sie das Projekt [DevDungeon] und laden Sie es in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt[^1] "devDungeon". Dies ist ein von einem Studierenden @@ -149,6 +157,32 @@ Task `devDungeon:runDevDungeon` aus der IDE heraus) starten. Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen. Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 23. Mai, 08:00 Uhr +- Vorstellung im Praktikum: 23. Mai + [^1]: Gradle-Subprojekte sind im Prinzip mehrere Java-Projekte in einem gemeinsamen Repository mit einer gemeinsamen Gradle-Basiskonfiguration. Jedes Sub-Projekt hat dann noch einmal eine eigene, die Basiskonfiguration verfeinernde Gradle-Konfiguration. Da jedes @@ -170,6 +204,7 @@ darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. [DevDungeon]: https://github.com/Dungeon-CampusMinden/dev-dungeon [\@Flamtky]: https://github.com/Flamtky [Intro Dungeon]: ../lecture/misc/dungeon.md + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld [Multi-Project Build Basics]: https://docs.gradle.org/current/userguide/intro_multi_project_builds.html [Structuring Projects with Gradle]: https://docs.gradle.org/current/userguide/multi_project_builds.html [Anleitung "How to play"]: https://github.com/Dungeon-CampusMinden/Dungeon/blob/master/dungeon/doc/how_to_play.md diff --git a/homework/b05.md b/homework/b05.md index fc772a5ed..3fcd1543a 100644 --- a/homework/b05.md +++ b/homework/b05.md @@ -9,7 +9,14 @@ no_beamer: true -# DevDungeon: Fackeln im Sturm (Umgang mit `Optional<>` und Streams) +# Zusammenfassung + +Auf diesem Blatt üben Sie den Umgang mit der Java-Stream-API und `Optional<>`. Sie erstellen +erste JUnit-Tests und implementieren das Visitor-Pattern für ein einfaches Beispiel. + +# Aufgaben + +## DevDungeon: Fackeln im Sturm (Umgang mit `Optional<>` und Streams) Klonen Sie das Projekt [DevDungeon] und laden Sie es in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies ist ein von einem Studierenden ([\@Flamtky]) @@ -42,7 +49,7 @@ Task `devDungeon:runDevDungeon` aus der IDE heraus) starten. Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen. Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. -# Katzen-Café +## Katzen-Café Forken Sie das ["Cat-Cafe"]-Repo und erzeugen Sie sich eine lokale Arbeitskopie von Ihrem Fork. @@ -56,7 +63,7 @@ eigenen `master`-Branch. Achten Sie darauf, alle Schritte nachvollziehbar in Ihrer Arbeitskopie per Git-Commit festzuhalten. Demonstrieren Sie im Praktikum, wie Sie mit den Pull-Requests arbeiten. -## Code-Analyse +### Code-Analyse Analysieren Sie die Modellierung des Binärbaums (`Tree`, `Empty`, `Node`) und erklären Sie die Funktionsweise: @@ -67,7 +74,7 @@ Funktionsweise: `Tree mytree; mytree.stream(). ...` nutzen zu können? - Wie funktioniert der `TreeIterator`? -## Umgang mit `Optional<>` +### Umgang mit `Optional<>` Bauen Sie die beiden Methoden `CatCafe#getCatByName` und `CatCafe#getCatByWeight` so um, dass ein passendes `Optional<>` zurückgeliefert wird. Passen Sie die entsprechenden Methodenaufrufe @@ -76,7 +83,7 @@ in `Main#main` entsprechend an. *Tipp*: Stellen Sie in den beiden Methoden auf die [Java-Stream-API] um, dann ergibt sich die Nutzung von `Optional<>` fast von selbst. -## JUnit +### JUnit Erstellen Sie mit JUnit 4 oder 5 mindestens 10 unterschiedliche Testfälle für die Klasse `CatCafe`. @@ -88,7 +95,7 @@ automatisch zur Verfügung. Wenn Sie JUnit4 nutzen möchten, müssten Sie bitte Gradle-Konfiguration entsprechend anpassen. Mit `./gradlew test` können Sie entsprechende Testfälle ausführen. -## Visitor-Pattern +### Visitor-Pattern Die Klasse `CatCafe` hat eine Methode `CatCafe#accept`, die einen Visitor mit dem parametrischen Typ `TreeVisitor` an das intern genutzte Feld `Tree clowder` @@ -108,6 +115,32 @@ konkateniert werden und der resultierende String zurückgeben werden. Fügen Sie passende Aufrufe der beiden Visitoren in `Main#main` hinzu. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 30. Mai, 08:00 Uhr +- Vorstellung im Praktikum: 30. Mai + [^1]: Das zweite richtige Level, also das zweite Level *nach* dem Demo-Level. Oder eben das dritte Level, wenn man das Demo-Level mitzählt :-) @@ -117,3 +150,4 @@ Fügen Sie passende Aufrufe der beiden Visitoren in `Main#main` hinzu. [\@Flamtky]: https://github.com/Flamtky ["Cat-Cafe"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_catcafe [Java-Stream-API]: https://dev.java/learn/api/streams/ + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b06.md b/homework/b06.md index aa93b7646..7dc08f57e 100644 --- a/homework/b06.md +++ b/homework/b06.md @@ -9,6 +9,14 @@ no_beamer: true +# Zusammenfassung + +Auf diesem Blatt üben Sie die Erstellung von Testfällen mit der Äquivalenzklassenbildung und +Grenzwertanalyse. Sie üben den Einsatz mit Mockito. Zusätzlich haben Sie die Gelegenheit, noch +einmal mit Logging und Record-Klassen zu arbeiten. + +# Aufgaben + Forken Sie das ["Cycle Chronicles"]-Repo und erzeugen Sie sich eine lokale Arbeitskopie von Ihrem Fork. @@ -21,7 +29,7 @@ eigenen `master`-Branch. Achten Sie darauf, alle Schritte nachvollziehbar in Ihrer Arbeitskopie per Git-Commit festzuhalten. Demonstrieren Sie im Praktikum, wie Sie mit den Pull-Requests arbeiten. -# Analyse: Äquivalenzklassen & Grenzwerte +## Analyse: Äquivalenzklassen & Grenzwerte Die Methode `Shop#accept` dient zur Annahme eines neuen Auftrags eines Kunden. @@ -44,7 +52,7 @@ Aufgaben: 2. Erstellen Sie aus den ermittelten ÄK und GW konkrete Testfälle. (**Noch keine Implementierung!**) -# Mocking I +## Mocking I Implementieren Sie nun die in der vorigen Aufgabe ermittelten Testfälle für die Methode `Shop#accept` mit Hilfe von JUnit (Version 4 oder 5). @@ -67,7 +75,7 @@ JUnit5-Bibliothek automatisch zur Verfügung. Wenn Sie JUnit4 nutzen möchten, m die Gradle-Konfiguration entsprechend anpassen. Mit `./gradlew test` können Sie Ihre Testfälle ausführen. -# Mocking II +## Mocking II Die Methoden `Shop#repair` und `Shop#deliver` sind auch noch nicht implementiert. Nutzen Sie geeignetes Mocking, um für diese beiden Methoden Tests in JUnit zu implementieren. Begründen @@ -75,7 +83,7 @@ Sie die Anwendung von Mockito. *Hinweis*: Sie *müssen* hier keine ÄK/GW-Analyse machen, können das aber natürlich gern tun. -# Record-Klassen +## Record-Klassen Die Klasse `Order` ist zwar bisher nur unvollständig implementiert, aber Sie können bereits deutlich erkennen, dass es zwei Attribute geben muss (welche?). @@ -84,7 +92,7 @@ Bauen Sie die Klasse in eine passende Record-Klasse mit den entsprechenden Attri dürfen die beiden Methoden in `Order` auch geeignet "implementieren" und umbenennen - die Umbenennung muss dann aber auch in den Aufrufen in `Shop` und in Ihren JUnit-Tests passieren! -# Logging +## Logging Bauen Sie für den `Shop` ein Logging auf der Basis von `java.util.logging` ein: Jede Änderung an der Auftrags-Warteschlange `pendingOrders` und auch an der Menge der fertigen Aufträge @@ -108,7 +116,34 @@ können, beispielsweise Änderung der Log-Level oder Abschalten des Loggings. müssen Sie dies für diese Aufgabe selbst flink erledigen. Es handelt sich um die vier Methoden `Shop#repair` und `Shop#deliver` sowie `Order#getBicycleType` und `Order#getBicycleType`.[^1] +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 06. Juni, 08:00 Uhr +- Vorstellung im Praktikum: 06. Juni + [^1]: Die Methoden `Order#getBicycleType` und `Order#getBicycleType` haben Sie sogar schon bei der Umsetzung der Record-Klassen-Aufgaben "implementiert" :-) ["Cycle Chronicles"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_cyclechronicles + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b07.md b/homework/b07.md index ac62ad7c6..f57e41800 100644 --- a/homework/b07.md +++ b/homework/b07.md @@ -9,7 +9,14 @@ no_beamer: true -# Javadoc-Kommentare +# Zusammenfassung + +Auf diesem Blatt üben Sie den Einsatz von Refactoring und das Dokumentieren von Code mit +Javadoc. + +# Aufgaben + +## Javadoc-Kommentare Gute Javadoc-Kommentare schreiben erfordert Übung. Schauen Sie sich die in Commit [Dungeon-CampusMinden/Dungeon/commit/46530b6] neu hinzugefügte Datei @@ -18,14 +25,14 @@ Gute Javadoc-Kommentare schreiben erfordert Übung. Schauen Sie sich die in Comm Diskutieren Sie jeweils, was Ihnen an der Dokumentation dieser Klasse auffällt: Was gefällt Ihnen, was stört Sie? Schlagen Sie Verbesserungen vor. -# DevDungeon: Illusion Riddle +## DevDungeon: Illusion Riddle Klonen Sie das Projekt [DevDungeon] und laden Sie es in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies ist ein von einem Studierenden ([\@Flamtky]) erstelltes Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben *in-game* und *ex-game* lösen müssen. -## DevDungeon: Lösen des Illusion Riddle +### DevDungeon: Lösen des Illusion Riddle Starten Sie den DevDungeon mit `./gradlew devDungeon:runDevDungeon`. Spielen Sie sich für diese Aufgabe durch das **dritte Level** ("Illusion Riddle")[^1]. @@ -67,7 +74,7 @@ Task `devDungeon:runDevDungeon` aus der IDE heraus) starten. Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen. Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. -## DevDungeon: Refactoring der Klasse IllusionRiddleLevel +### DevDungeon: Refactoring der Klasse IllusionRiddleLevel Analysieren Sie die Klasse `IllusionRiddleLevel` im Package `level.devlevel`, insbesondere die beiden Methoden `IllusionRiddleLevel#onTick` und `IllusionRiddleLevel#lightTorch`: @@ -90,7 +97,7 @@ beginnen. Leider ist durch die Abhängigkeit zu libGDX und der Game-Loop das Tes Dungeon nicht trivial, so dass Sie hier ausnahmsweise direkt mit dem Refactoring loslegen dürfen und auf das Erstellen einer Testsuite verzichten können. -## Protector-Skill für Ihren Hero +### Protector-Skill für Ihren Hero Erstellen Sie einen neuen Protector-Skill für den Hero und weisen Sie diesen einer Taste zu. Bei Nutzung des Skills soll ein neues Protector-Monster an einer zufälligen Position in einem @@ -106,7 +113,7 @@ dadurch leichter zum Ausgang des Levels kommen. **Hinweis**: Erinnern Sie sich an die [ECS-Architektur]. Schauen Sie sich u.a. die Factory `HeroFactory` und den `FireballSkill` an. -# Refactoring im Bike-Shop +## Refactoring im Bike-Shop Forken Sie das [Refactoring]-Repo und erzeugen Sie sich eine lokale Arbeitskopie von Ihrem Fork. Analysieren Sie die Klassen im Package `refactoring`. Sie finden unübersichtlichen und @@ -139,6 +146,32 @@ Dokumentation[^2] mehr finden. Logik, nach Code/Logik in der falschen Klasse (am falschen Ort), nach übermäßig vielen Parametern, nach fehlendem Javadoc, .... +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 20. Juni, 08:00 Uhr +- Vorstellung im Praktikum: 20. Juni + [^1]: Das dritte richtige Level, also das dritte Level *nach* dem Demo-Level. Oder eben das vierte Level, wenn man das Demo-Level mitzählt :-) @@ -151,3 +184,4 @@ Parametern, nach fehlendem Javadoc, .... [Refactoring Guru]: https://refactoring.guru/refactoring/techniques [ECS-Architektur]: ../lecture/misc/dungeon.md [Refactoring]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_refactoring + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b08.md b/homework/b08.md index 6120cd38c..71a8cd368 100644 --- a/homework/b08.md +++ b/homework/b08.md @@ -10,7 +10,16 @@ no_beamer: true -# DevDungeon: Brücken-Troll +# Zusammenfassung + +Auf diesem Blatt üben Sie den Umgang mit regulären Ausdrücken in Java. Wir nutzen diese +zusammen mit dem Template-Method-Pattern für die Implementierung eines einfachen +Syntax-Highlightings, und im DevDungeon müssen Sie mit einem Brücken-Troll kämpfen und das +Command-Pattern implementieren. + +# Aufgaben + +## DevDungeon: Brücken-Troll Klonen Sie das Projekt [DevDungeon] und laden Sie es in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies ist ein von einem Studierenden ([\@Flamtky]) @@ -44,7 +53,7 @@ Task `devDungeon:runDevDungeon` aus der IDE heraus) starten. Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen. Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. -## RegExp mit dem Brücken-Troll +### RegExp mit dem Brücken-Troll Suchen Sie den Brücken-Troll auf und sprechen Sie ihn an. Er wird Ihnen eine Reihe von Fragen zum Thema reguläre Ausdrücke stellen, die Sie korrekt beantworten müssen. @@ -52,7 +61,7 @@ zum Thema reguläre Ausdrücke stellen, die Sie korrekt beantworten müssen. Machen Sie Screenshots von den Fragen und Ihren Antworten, die Sie im Praktikum vorstellen und diskutieren. -## Command-Pattern mit der Klasse *BridgeControlCommand* +### Command-Pattern mit der Klasse *BridgeControlCommand* Leider lässt sich der Brücken-Troll offenbar weder durch Diskussion noch durch Kampf besiegen. Aber vielleicht können Sie die Brücke "aufmachen", so dass er in die Tiefe stürzt? Die *Tiles* @@ -72,7 +81,7 @@ Implementieren Sie die beiden Methoden und starten Sie das Spiel erneut. **Hinweis**: Mit der Methode `Game.currentLevel().tileAt()` können Sie auf ein `Tile` an einer bestimmte Koordinate zugreifen. -# Syntaxhighlighting mit RegExp +## Syntaxhighlighting mit RegExp Klonen Sie die [Vorgaben "Syntax Highlighting"] und laden Sie das Projekt als Gradle-Projekt in Ihre IDE. @@ -132,9 +141,36 @@ sich keine Gedanken dazu machen, in welcher Reihenfolge die Token eingefügt und werden. Beispiel: Im regulären Ausdruck für den einzeiligen Kommentar brauchen Sie keine Keywords, Annotationen, Strings usw. erkennen. +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 27. Juni, 08:00 Uhr +- Vorstellung im Praktikum: 27. Juni + [^1]: Das vierte richtige Level, also das vierte Level *nach* dem Demo-Level. Oder eben das fünfte Level, wenn man das Demo-Level mitzählt :-) [DevDungeon]: https://github.com/Dungeon-CampusMinden/dev-dungeon [\@Flamtky]: https://github.com/Flamtky [Vorgaben "Syntax Highlighting"]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_highlighting + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld diff --git a/homework/b09.md b/homework/b09.md index a76343ae9..9dde172ed 100644 --- a/homework/b09.md +++ b/homework/b09.md @@ -9,11 +9,18 @@ no_beamer: true +# Zusammenfassung + +Auf diesem Blatt üben Sie das Erstellen und den Einsatz von generischen Klassen und Methoden +in Java. + +# Aufgaben + Sie finden in den [Vorgaben] im Package `zoo` einige Interfaces und Klassen, mit denen man einen Zoo modellieren kann. Klonen Sie das Vorgabe-Repo und laden Sie das Projekt als Gradle-Projekt in Ihre IDE. -# Nicht-generische Klassen +## Nicht-generische Klassen Sie finden einige Interfaces, die das Interface `Animal` erweitern, beispielsweise `Fish`, `Reptile`, `Cat`, ... @@ -31,7 +38,7 @@ ein kurzer Name, beispielsweise der Tierklasse, zurückgegeben werden. Sie in Ihren Klassen nicht implementieren. Wir werden später im Semester noch über die sogenannten ["Default-Methoden"] sprechen. -# Generische Klassen +## Generische Klassen Um Gehege zu modellieren, erstellen Sie in eine generische Klasse `Habitat` mit einer Typ-Variablen. Stellen Sie durch geeignete Beschränkung der Typ-Variablen sicher, dass nur @@ -53,7 +60,7 @@ generischen Klasse `Habitat` an. Dabei sollen in diesen konkreten Gehegen nur je verschiedene Tiere einer "Art" (beispielweise Löwen, Hamster, ...) vorkommen. Fügen Sie einige passende Tiere in die beiden Gehege ein. -# Generische Klassen reloaded +## Generische Klassen reloaded Für die Repräsentation eines Zoologischen Gartens mit mehreren verschiedenen Gehegen erstellen Sie nun eine generische Klasse `Zoo` mit einer Typ-Variablen. Stellen Sie durch geeignete @@ -75,7 +82,7 @@ eine Ordnung auf den Gehegen. Begründen Sie die Wahl der Datenstruktur. Legen Sie in Ihrer `main()`-Methode einen konkreten Zoo als Instanz der neuen generischen Klasse `Zoo` an. Dieser Zoo soll einige Gehege für verschiedene Tiere beinhalten. -# Ableiten nicht-generischer Klassen +## Ableiten nicht-generischer Klassen Leiten Sie von `Zoo` eine nicht-generische Klasse `Aquarium` ab. Aquarien können nur mit Gehegen angelegt werden, deren Tiere vom Typ `Fish` (oder abgeleitet) sind. @@ -83,7 +90,34 @@ Gehegen angelegt werden, deren Tiere vom Typ `Fish` (oder abgeleitet) sind. Legen Sie in Ihrer `main()`-Methode ein konkretes Aquarium als Instanz der neuen nicht-generischen Klasse `Aquarium` an und gruppieren Sie darin verschiedene Fisch-"Gehege". +# Bearbeitung und Abgabe + +- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams +- Abgabe: + - Post Mortem [im ILIAS] eintragen: + + Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und + nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein: + + 1. Zusammenfassung: Was wurde gemacht? + 2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der + Umsetzung. + 3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem + gelöst? + 4. Was haben Sie gelernt oder (besser) verstanden? + 5. Team: Mit wem haben Sie zusammengearbeitet? + 6. Links zu Ihren Pull-Requests mit der Lösung. + + Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben + werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen. + + Laden Sie hier bitte **nicht** Ihre Lösungen hoch! + + - Deadline: 04. Juli, 08:00 Uhr +- Vorstellung im Praktikum: 04. Juli + [^1]: Ok, wir machen hier Informatik. Vermutlich ist die Biologie nicht ganz korrekt ;-) [Vorgaben]: https://github.com/Programmiermethoden-CampusMinden/prog2_ybel_zoo ["Default-Methoden"]: ../lecture/java-modern/defaultmethods.md + [im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld