Veranstaltung Programmierung 2, UIB
Dozent: Prof. Dr. Frank Dopatka
Das Team
Unser Team A2 bestand aus erstmals fünf und anschließend aus sechs Mitgliedern, welche alle mit voller Konzentration und Freude dabei waren. Das Team bestand aus den Studenten Alihan Pinarbas, Burak Bingöl, Enes Can Sevim, Lars Stricker, Mika Richter und Sopithan Goneswaran. Im Laufe dieses Semesters wurde Mika Richter unserer Gruppe nachträglich zugeteilt. Dennoch haben wir als Gruppe toll harmoniert und konnten hervorragend miteinander auskommen.
Das Semesterspiel
Die Aufgabe an der wir die Inhalte dieses Semesters gelernt haben sah auf den ersten Blick simpel aus: das Programmieren eines UNO Spiels. Auf drei Blätter aufgeteilt mussten wir vom einfachen UNO Spiel das in der Konsole von eclips ablief bis zum voll funktionsfähigen Programm als Jar-Datei mit Grafischer Oberfläche ein UNO Spiel entwickeln. Das Szenario war wie folgt gestellt : während Prof. Dr. Dopatka als unser Berater fungierte und sich mit der Vermittlung des Theoriestoffes beschäftigte, bildeten Herr Köhler und Herr Arns die “Kunden”, welche unserem Team damit beauftragten ein UNO-Spiel zu entwickeln. Unklarheiten mussten stets mit dem Kunden in einem Kundenforum besprochen werden. Wöchentlich hatten wir die Möglichkeit bei einem “Kundentermin” unseren Fortschritt vorstellen. Nun konnte das Programmieren beginnen.
Das Konzept der Übungsblätter
Bevor wir zur unserer subjektiven Beschreibung der jeweiligen Übungsblätter kommen, möchten wir hier das Konzept der Übungsblätter erläutern. Die Übungsblätter wurden jeweils in einer bestimmten Anzahl von Aufgaben unterteilt. Die ersten Aufgaben beinhalteten immer die Aufgabe Videos zu den Vorlesungsvideos von Prof. Dr. Dopatka aufzunehmen. Dabei sollte man eigene Beispiele entwickeln und seine Kreativität unter Beweis stellen um so seinen Mehrwert zu zeigen. Eigeninitiative, Durchhaltevermögen und Geduld war hierbei gefragt. Die darauf folgenden Aufgaben waren jeweils ziemlich unterschiedlich, sodass alle möglichen Anforderungen zustande gekommen sind. Dabei waren diese selbstverständlich auf das Semesterspiel bezogen um dieses nach und nach zu verbessern und fertig zu stellen. Die einzelnen Aufgaben werden wir nun versuchen zu beschreiben.
Übungsblatt 1
Im ersten Übungsblatt ‘Videos & das Semesterspiel Uno - Basics’ wurde gefordert, den Grundbaustein für das Uno Programm zu setzen, sowie neue Programme bzw. Werkzeuge kennen zu lernen. Das war von großer Bedeutung, da man alle Mittel die uns vorgestellt wurden im Späteren Verlauf des Semesters gebraucht hat.
Einzelarbeit:
Aufgabe 1a)
Die Aufgabe 1a) bestand darin, ein Lehrvideo aufzunehmen. Als Einstieg und als Übung für das Gefühl der Einzelarbeit, gab es auf diese Aufgabe zuerst einmal eine Milde Anzahl an Punkten.
Hier die Bilder zu den Videos:
Objekt, Eigenschaften, getter setter, konstruktoren - Alihan Pinarbas
Objekt-Eigenschaften-Getter-Setter-Konstruktoren -Mika Richter
Objekt-Eigenschaften-Getter-Setter-Konstruktoren -Lars Stricker
Methoden-Object-Override -Enes Can Sevim
Anweisungen-Datentypen-Operatoren-Konstanten sowie UML-Aktivitätsdiagramm-Verzweigungen-if-else-switch -Burak Bingöl
Sopithan Goneswaran Video ‘Arrays, Schleifen, Methoden und Rekursionen in Java
Aufgabe 1b)
In der Aufgabe 1b) bestand ebenfalls darin, ein Lehrvideo aufzunehmen. Hier gab es die doppelte Anzahl an Punkten, weil die Gewöhnungsphase nun vorbei war. Die Themen wurden anspruchsvoller. So musste zum Beispiel der Student Alihan Pinarbas das Thema ‘Komplexität-O-Notation-P-NP’ vorstellen.
Komplexität-O-Notation-P-NP -Mika Richter
Versionsverwaltung-zentral-verteilt-GIT -Lars Stricker
Kommentare-JavaDOC-guter-Code-Testen-JUnit -Enes Can Sevim
Exception-Handling-Strukturierung -Burak Bingöl
Sopithan Goneswaran Video ‘Sortieren mit Quicksort und Bubblesort in Java
Alihan Pinarbas Video ‘Komplexität mit O-Notation, P und NP, Dijkstra und Traveling Salesman Problem
Teamarbeit:
Aufgabe 2)
In der zweiten Aufgabe wurde immer verlangt, die Vorlesungsvideos nach den Themen zu unterteilen. Dabei musste bei einem neuen Abschnitt die genaue Sekundenanzahl angegeben werden, wobei pro Übungsblatt eine bestimmte Menge an Videos strukturiert werden mussten. Im ersten Übungsblatt waren es die Videos ‘PR2 00‘ bis ‘PR2 02-02‘ die zu bearbeiten waren.
Aufgabe 3)
Wie schon in der Beschreibung ‘Übungsblatt 1‘ erwähnt wurden uns neue Tools/Programme vorgestellt, mit denen wir arbeiten sollten. In der Aufgabe 3 lag der Fokus auf den Umgang mit GitHub. Zu diesem Anlass musste sich jeder einen Account anlegen. Die elementaren Aktionen mussten angeeignet werden. Des Weiteren war es wichtig ein Repository anzulegen, auf das wir unseren Fortschritt vom UNO Programm ‘pushen’ konnten, sowie den Fortschritt der erzielt wurde ‘pullen’ konnten. Konfliktlösungen, und Merging waren ebenfalls wichtige Aspekte.
Aufgabe 4a)
In der ersten Teilaufgabe 4a) mussten zur jeder Klasse im UML-Klassendiagramm (Welches das UNO Programm skizzierte) testgetriebene JUnit-Tests erstellt werden.
UML-Diagramm
Aufgabe 4b)
Die somit anspruchsvollste Aufgabe in diesem Übungsblatt war die Aufgabe 4b). Hier wurde erwartet die Funktionalität des Spiels anhand der Regeln, welche vom Kunden definiert wurden, zu Programmieren. Sowohl alle Bedingungen, als auch alle Sonderfälle und Zustände (Der Spieler, Kartenstock usw.) mussten beim Kunden nachgefragt und anschließend programmiert werden. Außerdem mussten dem Kunden Szenarien präsentiert werden, welche die Richtigkeit der Spiellogik aufzeigen sollten. Dabei musste sich jedes Szenario klar von dem vorherigen unterscheiden.
Aufgabe 5)
Das Kommentieren und Dokumentieren von unserem bisherigen Quellcode sollte per JavaDoc’s erfolgen. Die Vollständigkeit und die Ausführlichkeit lagen im Fokus.
Aufgabe 6)
Die letzte Aufgabe dieses Übungsblattes war die Aufgabe 6). Es sollte lediglich zu allen Fehlerfällen eine eigene ‘UnoException’ Klasse erstellt werden, welche jeweils eine eigene ID besitzen.
Übungsblatt 2
Im zweiten Blatt lag der Fokus darin die innere Struktur des Spiels zu erweitern.
Einzelarbeit:
Aufgabe 1)
Die erste Aufgabe 1) bestand nochmals darin, ein Lehrvideo aufzunehmen. Die Themen wurden Anspruchsvoller, da es nun keine Wiederholung der Themen aus ‘Pr1’ mehr waren. Der Student Enes Can Sevim musste zum Beispiel das Thema ‘Aggregation, Komposition, Enum, Annotation’ in einem Video verpacken. Wohingegen Sopithan Goneswaran Das Thema ‘Steuerelemente und Ereignisse in Swing’ behandelt hat. Nach einer kurzen Befragung äußerte sich Enes Can Sevim wie folgt: ‘Das Video war viel anstrengender und nervenaufreibender als die ersten zwei. Zum Glück hatte ich mich frühzeitig damit beschäftigt, sonst wäre es echt knapp geworden. ‘ Hier ein Bild zu den beiden Videos:
Wrapper, String, RegEx, Garbage-Collector -Mika Richter
Wrapper, String, RegEx, Garbage-Collector -Lars Stricker
Aggregation, Komposition, Enum, Annotation
Steuerelemente und Ereignisse in Swing -Burak Bingöl
Sopithan Goneswaran Video ‘Java Swing: Steuerelemente, Ereignisse und Eventhandling
Alihan Pinarbas Video ‘Assoziation, Navigierbarkeit, Vererbung und Polymorphie in Java
Teamarbeit:
Aufgabe 2)
Hier wurden wieder Zeitstempel verlangt. Dieses mal von den Videos ‘PR2 03-01‘ bis ‘PR2 04-02‘. Hier die Links zu den Videos:
Aufgabe 3a)
Nur eine kleine Aufgabe in der man eine Komposition über den Konstruktor des Teils vom Spieler und dem Spiel realisieren sollte.
Aufgabe 3b)
Hier musste man ein Interface für den Bediener implementieren, über welches der Spieler mit dem Spiel interagieren konnte.
Aufgabe 4a)
Schnell wurden vom Kunden erweitere Funktionalitäten erfragt und so mussten wir zusätzlich neben dem vorhandenen Interface für das Spiel auch noch ein weiteres Interface für das Speichern des gesamten Spiel- Status.
Aufgabe 4b)
Eine weitere Aufgabe war die Spielgeschehnisse in Form des CSV Formats oder serialisiert zu speichern und zu Laden. Dazu mussten die Interfaces gezielt implementiert werden und Teile des Codes mussten umstrukturiert werden. Diese Aufgabe sollte unserem Team noch große Schwierigkeiten bereiten.
Aufgabe 5a)
Um im späteren fertigen Spiel auch eine Einzelspielerfunktion präsentieren zu können, durfte natürlich die Implementierung einer KI nicht fehlen. Hierfür musste für unser Programmierniveau im zweiten Semester ein einfacher Algorithmus herhalten. Die KI sollte zwei Spielweisen bekommen einmal in Form einer defensiven KI die ihre sonderkarten für die Verteidigung aufbewahrt und einer Offensiven KI die diese für den Angriff nutzt.
Aufgabe 5b)
Die Logik für die Entscheidung beider KI´s musste zudem noch in einem UML Aktivitätsdiagramm dargestellt werden.
UML-Diagramm Defensive KI
Übungsblatt 3
Die Aufgabe in Blatt drei bestand darin das UNO-Spiel als “Produkt” fertigzustellen, dazu waren noch einige Schritte gefordert.
Einzelarbeit:
Aufgabe 1)
Die erste Aufgabe 1) des letzten Übungsblatts war ebenfalls ein Lehrvideo aufzunehmen. Hier wurden die schwersten Themen behandelt, wobei es auch die meisten Punkte gab. Wir haben empfunden, dass sich die Themen von ‘PR2’ langsam distanziert haben. Dafür wurden aber Interessante und auch weiterführende Themen ausgewählt. Burak Bingöl nahm ein Lehrvideo zum Thema ‘Datenstrukturen: Binärbaum, Tree, Trie’ auf. Das neue Teammitglied, Mika Richter hat das Thema ‘Collections: Comparator, Iterator, Map, Properties, Wildcards’ behandelt. Hier ein Bild zu den beiden Videos:
Collections, Container, Generics -Alihan Pinarbas
Collections: Comparator, Iterator, Map, Properties, Wildcards -Mika Richter
Paradigmen, Funktional, Lambda, Closure -Lars Stricker
Dijkstra, Graphenfärbung und Graph -Shopithan Goneswaran
Nebenläufigkeit: Threads, Races, Deadlocks -Enes Can Sevim
Binärbaum, Tree, Trie -Burak Bingöl
Teamarbeit:
Aufgabe 2)
Hier wurden wieder Zeitstempel verlangt. Dieses mal von den Videos ‘PR2 05-01‘ bis ‘PR2 06-02‘.Hier die Links zu den Videos:
Aufgabe 3a)
Der erste Teil bestand darin die Karten des UNO Spiels nun mithilfe eines LiFo-Speichers, also einer einfachen verketteten Liste zu verwalten, die von Java vorgefertigten Klassen durften natürlich nicht verwendet werden.
Aufgabe 3b)
Hier sollte die, KI die wir zuvor erstellt haben, nun über das Interface Runnable implementiert werden, sodass das Ganze über Threads realisiert wird. Natürlich musste das Speichern und Laden berücksichtigt werden.
Aufgabe 3c)
Das Ziel dieser Aufgabe war es jede Spielaktion in eine Log-Datei geschrieben wird. Undzwar mit Datum und Uhrzeit.
Aufgabe 4a)
Die erste Vorkehrung, die im Rahmen der GUI-Entwicklung war einen Entwurf zu erstellen. Nachdem der Kunde unseren Entwurf abgesegnet hatte konnten wir bereits loslegen.
Aufgabe 4b)
Hier gab es in der Teamarbeit die meisten Punkte. Das ganze Spiel als funktionierendes Programm sollte über die SWING-GUI zur Verfügung gestellt werden. Dabei mussten noch viele Nebenaspekte beachtet werden.
Aufgabe 4c)
Die Kernaufgabe war es das Laden und Speichern per FileChooser möglich zu machen, nach anfänglichen Schwierigkeiten konnte das Problem jedoch mit ein bisschen Recherche gelöst werden.
Bilder der GUI:
GUI-Menü
GUI-Spielerauswahl
GUI-Spielfeld
Aufgabe 4c)
Über eine JAR-Datei sollte hier das Spiel ausgeführt werden können.
Aufgabe 5) (Zusatzaufgabe)
Durch die aktuelle Situation, welche durch die Pandemie ausgelöst wurde, erhielten wir die Chance Zusatzaufgaben in Anspruch zu nehmen. Eine davon war diese IExpo-Präsentation zu schreiben und in diesem Schema die gesamte Veranstaltung zu reflektieren und zu beschreiben. Natürlich war auch hier das ganze Team daran beteiligt!
Aufgabe 6) (Zusatzaufgabe)
Als letzte Zusatzaufgabe gibt es nochmal ein Lehrvideo, welches innerhalb einer Woche abzugeben ist. Die Videothemen sind sehr viel komplexer als die vorherigen Themen. Dem entsprechend muss man diese auch behandeln und vortragen. Dennoch eine tolle Chance, um die Studienleistung ergattern zu können!
Unser Fazit
Als Zusammenfassung können wir alle als Team mit Überzeugung sagen, dass wir in diesem Studiengang immer wieder an unsere Grenzen gestoßen sind. Daran sind wir auch gewachsen. Die Idee die Inhalte der ‘PR2’ Vorlesung in einem Spiel als Projekt zu verpacken empfanden wir als eine gute. Dadurch war es möglich, das gelernte aktiv anzuwenden und mit Problemen die dabei entstanden sind umzugehen. Das Präsentieren der Ergebnisse verstärkte das Gemeinschaftsgefühl der Gruppe und das Selbstbewusstsein für das zukünftige Arbeitsleben als Programmierer. Die Kompetenzen und Ideen waren nicht nur Innerhalb der Gruppe, sondern auch in der Einzelarbeit in Form von Lehrvideos einzubringen. Somit konnte man sich gut einen Überblick über seine Fähigkeiten als Student verschaffen. Es war rückblickend ausschlaggebend eine Struktur zur Aufgabenverteilung zu gestalten. Nur so konnte man die Aufgaben gerecht und fair verteilen. Das Format der Vorlesung war unsrer Meinung nach sehr gelungen. Durch das Hochladen der Vorlesungsmaterialien in Videoform Konnte man jederzeit die Vorlesung in seinem eigenen Tempo lernen und verstehen. Insgesamt also eine durchaus Interessante Veranstaltung.