…
ext
.
echnology
Goethe Universität
Institut für Informatik
Texttechnologie
PRG-Praktikum
WiSe 2021 / 2022
Übung 1
Alexander Mehler Giuseppe Abrami
11.11.2021
Einleitung
Diese Übung dient als Einstieg in das Programmierpraktikum und prüft Grundkenntnisse im Bereich Versio-
nierung (Git), Softwaremodellierung, Java, Collections sowie einfachen Dateioperationen ab. Diese Übung
ist Grundlage für die nachfolgenden Übungen. In dieser Übung besteht Ihre Aufgabe darin, Plenarprotokolle
des Bundestages mittels Java aus Dateien einzulesen, zu verarbeiten und zu analysieren: Sie entwickeln
und implementieren ein Programm, das Informationen aus den eingelesenen Daten extrahiert und hierzu
Fragen beantwortet.
Vorbemerkungen
Grundsätzlich sind alle Schritte und Ergebnisse ausführlich zu Dokumentieren. Die Dokumentationsqualität
fließt auch in die Bewertung mit ein. Diese Übung ist ausschließlich in Einzelarbeit zu absolvieren.
Bezüglich der Nutzung einer Versionsverwaltung verweisen wir auch auf die Folien „Versionsverwaltung“
im OLAT-Kurs.
Bitte lesen Sie sich die Übung zunächst vollständig durch, bevor Sie mit der Bearbeitung der einzelnen
Aufgaben beginnen.
Vorbereitungen
Zur Durchführung der Übungen installieren Sie bitte das Betriebssystem Ubuntu 20.04. Diese Installation
ist zusätzlich zu einem bestehenden Betriebssystem möglich als:
• Parallelinstallation, neben einem bereits bestehenden Betriebssystem oder als
• Installation in einer virtuellen Maschine.
Laden Sie sich die Entwicklungsumgebung IntelliJ1 in der Community-Variante herunter. Installieren Sie
IntelliJ und sollten Sie noch kein Java-SDK auf Ihrem System haben, installieren Sie dieses ebenfalls2.
Wir verwenden während des gesamten Praktikums Java in der Version 1.8!
1https://www.jetbrains.com/de-de/idea/download/
2https://openjdk.java.net/
1
www.uni-frankfurt.de
https://www.informatik.uni-frankfurt.de/index.php/de/
https://www.jetbrains.com/de-de/idea/download/
https://openjdk.java.net/
Der Verzicht auf die Installation der vorgenannten System bzw. die Nutzung anderer Betriebs-
systeme oder Werkzeuge erfolgt auf eigenes Risiko. Der Übungsleiter sowie die Tutor*innen werden
sich zu keinem Zeitpunkt mit Fragen nach der Umgebungs- oder Versionsinkompatibilität auf Rechnern
der Teilnehmenden beschäftigen.
Damit Sie diese und weitere Übungen durchführen können, registrieren Sie sich zunächst einmalig am
GitLab-Server des Text Technology Lab3. Bitte verwenden Sie eine E-Mail-Adresse, welche Sie auch re-
gelmäßig prüfen – optimalerweise Ihre studentische E-Mail – Adresse. Sollten Sie aus vorherigen Veran-
staltungen schon einen GitLab-Account an unserem GitLab-Server besitzen, verwenden Sie bitte diesen.
Verfahren Sie danach wie folgt:
1. Melden Sie sich am GitLab-Server an.
2. Erstellen Sie ein neues Projekt und nennen Sie es „Uebung1“. Geben Sie eine aussagekräftige Be-
schreibung an, stellen Sie den Sichtbarkeitsgrad auf „privat“ und erzeugen Sie eine Readme-Datei
(siehe Abbildung 1).
3. Nach erfolgreicher Erstellung des Projektes erstellen Sie eine lokale Arbeitskopie (clone, Abbil-
dung 2).
4. Kopieren Sie hierzu einfach die URL des Projektes mittels Aufruf in der Konsole, nachdem Sie zuvor
einen Zielordner für Ihr Projekt gewählt haben:
∗ B e i s p i e l h a f t e r Ordner ∗
cd /home/ u s e r / p r o j e c t s /
g i t c l o n e URL
5. Öffnen Sie nun in IntelliJ das von Ihnen geklonte Projekt.
6. Erstellen Sie anschließend ein neues Maven-Projekt und geben Sie diesen die folgenden Konfigura-
tionen, wobei Sie NAME mit Ihrem Namen (Nachname_Vorname) ersetzen:
Uebung1 a r t i f a c t I d >
7. Mit dem nun nun angelegten Projekt beginnen Sie nun die erste Aufgabe.
8. Verwenden Sie ausschließlich Maven um ggf. externe Bibliotheken einzubinden.
9. Bitte denken Sie daran, Ihr Projekt am Ende auch wieder zu pushen. Bevor Sie pushen, müssen Sie
ein commit durchführen und evtl. noch nicht versionierte Dateien der Versionverwaltung hinzufügen.
3https://gitlab.texttechnologylab.org
2
https://gitlab.texttechnologylab.org
Aufgabenbeschreibung
Machen Sie sich mit den Parlamentsprotokollen, welche Ihnen über OLAT zur Verfügung gestellt wurden,
vertraut. Diese Protokolle sind aus der 19. Legislaturperiode und besitzen eine solide Dokumentstruktur.
In späteren Übungen werden Sie sich darüber hinaus mit den Protokollen der vorherigen Legislaturperioden
beschäftigen, diesen fehlt es jedoch an Struktur und mit den Ihnen jetzt zur Verfügung stehenden Mitteln
können Sie diese noch nicht verarbeiten. Alle Plenarprotokolle sind in einem XML-Dokument repräsentiert.
Seit der letzten Legislaturperiode gibt es hierzu auch eine Strukturdefinition (DTD)4. Nachvollziehen Sie
die DTD sowie die Struktur der Plenarprotokolle, sodass Sie die folgenden Anforderungen erfüllen können:
Entwickeln Sie ein Java-Applikation welche es ermöglicht, Parlamentsprotokolle aus Datein zu lesen und
in geeigneten Datenstrukturen abzulegen. Ihre Applikation muss die folgenden Strukturen des Protokolls
eindeutig und vollständig abbilden:
Das Protokoll einer Plenarsitzung. . .
• . . . besitzt ein spezifisches Datum.
• . . . ist einer Legislaturperiode zugeordnet und hat eine fortlaufende Nummer.
• . . . hat einen Titel.
• . . . besteht aus verschiedenen Tagesordnungspunkten
• . . . hat einen oder mehrere Sitzungsleiter*innen.
Jeder Tagesordnungspunkt . . .
• . . . besteht aus Reden.
• . . . kann eine Menge von Kommentaren enthalten.
Jede Rede . . .
• . . . ist ein eigener Text.
• . . . hat einen Redner.
– Jeder Redner hat einen Namen und kann eine Fraktions- oder Parteizugehörigkeit haben.
• . . . gehört zu einem Protokoll.
• . . . kann eine Menge von Kommentaren haben.
Jeder Abgeordnete . . .
• . . . hat einen Vor- und Zunamen
• . . . kann eine Fraktions- oder Parteizugehörigkeit haben.
• . . . kann Redebeiträge oder Kommentare abgeben.
Wie beschrieben bestehen zwischen Protokollen, Tagesordnungspunkten, Reden und Rednern einige Be-
ziehungen: bilden Sie diese ab. Beachten Sie auch weiterhin die Fragen aus Aufgabe 3, damit Sie die
entsprechenden Beziehungen besser ableiten können. Die von Ihnen zu erstellenden Datenstrukturen sollen
die aufgezählten sowie die in den Fragen beschriebenen Strukturen, im objektorientierten Sinne (Interfaces
und / oder abstrakte Klassen, Implementierung) abbilden. Achten Sie auf eine vollständige Datenkapselung
sowie eine dynamische Nutzbarkeit der einzelnen Komponenten. Zur Verarbeitung der Plenarprotokolle,
zur Darstellung dieser Protokolle in den von Ihnen definierten Datenstrukturen, und zur Beantwortung
der in der Übung gestellten Fragen ist eine parametergestützte Java-Applikation inkl. Konsolen-Eingabe
zu implementieren. Dokumentieren Sie darüber hinaus Ihr Projekt ausführlich; verwenden Sie hierzu Ja-
vaDoc5.
4https://www.bundestag.de/resource/blob/577234/f9159cee3e045cbc37dcd6de6322fcdd/
dbtplenarprotokoll_kommentiert-data.pdf
5https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html
3
https://www.bundestag.de/resource/blob/577234/f9159cee3e045cbc37dcd6de6322fcdd/dbtplenarprotokoll_kommentiert-data.pdf
https://www.bundestag.de/resource/blob/577234/f9159cee3e045cbc37dcd6de6322fcdd/dbtplenarprotokoll_kommentiert-data.pdf
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html
Aufgaben
1 Konzeptionierung der Applikation 5 Punkte
Analysieren Sie die Tatbestände der zuvor skizzierten Anforderungen und erstellen Sie ein aussagekräfti-
ges und vollständiges Use-Case-, ein Package- sowie ein Klassendiagramm und legen diese in einem
eigenen Ordner (Diagramme) im GitLab-Projekt ab. Achten Sie bei den Diagrammen darauf, dass diese
eine sinnvolle logische Struktur besitzen und vollständig die Programmfunktionalität wiedergeben. Hierbei
sollten Sie ferner berücksichtigen, dass die Klassenstrukturen erweiterbar sein sollen. Verwenden Sie auch
gerne Kommentare und achten Sie auf die Kardinalität und die Art der Beziehungen. Zur Realisierung
der Diagramme ist einschlägige Software zu verwenden. Hierzu steht Ihnen darüber hinaus mit dem UML-
Paket6 von LATEX ein mächtiges Werkzeug zur Verfügung, welches wir ausdrücklich empfehlen. Bitte achten
Sie darauf, dass Sie Ihre Applikation erst konzeptionieren und anschließend implementieren. Verwenden
Sie zur Lösung dieser Aufgabe keine UML-Generatoren die aus Programmcode Klassen-Diagramme o.ä.
erzeugen.
2 Implementierung der Applikation 5 Punkte
a) Erstellen Sie in Ihrem Java-Projekt gemäß der in Aufgabe 1 definieren Diagramme:
• die benötigen Packages,
• die benötigten Interfaces / abstrakten Klassen
• sowie weitere benötigten Klassen.
b) Implementieren Sie alle definierten Interfaces / abstrakten Klassen und benennen Sie diese nach fol-
gendem Schema: Klassenname_File_Impl.java. Implementierungen sind in einem eigenen Package
abzulegen.
c) Implementieren Sie eine main-Methode welche einen menügestützten Zugriff auf die einzelnen Pro-
grammfunktionen ermöglicht, indem Sie eine absturzsichere Konsolen-Eingabe implementieren.
d) Programmparameter sind dynamisch zu übergeben und Fehler fangen Sie bitte mit entsprechenden
eigenen Exceptions ab.
e) Lesen Sie die bereitgestellten Parlamentsprotokolle ein und überführen Sie diese in die von Ihnen
konzeptionierten und implementierten Datenstrukturen.
f) Implementieren Sie zur Laufzeit der Applikation die folgenden Abfragen und geben Sie diese geeignet
auf der Konsole aus:
• Auflistung aller Redner*innen inkl. Partei- / Fraktionszugehörigkeit
– Implementieren Sie einen Filter für die Namen der Abgeordneten.
• Auflistung aller Redner pro Partei / Fraktion.
• Ausgabe des Textes eines Tagesordnungspunktes gemäß Sitzungs- und Nummern-Index!
3 Fragen 6 Punkte
Bitte beantworten Sie die nachstehenden Fragen mit Ihrer entwickelten Applikation basierend auf dem
Parlaments-Korpus. Erweitern Sie dazu ggf. Ihre Abfragemöglichkeiten aus Aufgabe 2. Achten Sie bei der
Beantwortung der Fragen auch auf eine geeignete Sortierung der Ergebnisse.
6Handbuch in OLAT.
4
1. Wie lang ist der durchschnittliche Redebeitrag. . .
a) . . . aller Beiträge?
b) . . . je Abgeordnetem?
c) . . . pro Partei?
2. Listen Sie die Redebeiträge mit den meisten Zurufen absteigend sortiert auf.
• Limitieren Sie die Anzahl auf eine eingegebene Menge (z.B. Top 10, Top 5, etc.)
• Geben Sie allerdings nicht die Redebeiträge direkt aus, sondern lediglich die Überschriften der
Tagesordnung sowie der Sitzungsnummer inkl. Datum.
3. Listen Sie die Menge an Zurufen pro Abgeordnetem sowie pro Partei auf. Überlegen Sie sich eine
sinnvolle Abfragelogik und Darstellung hierzu.
a) Von welchen Parteien kamen die Zurufe?
b) Welche Partei hat durchschnittlich wie viele Zurufe in den Redebeiträgen von welchen Parteien
erhalten?
4. Welche Abgeordneten haben wie oft eine Sitzung geleitet?
Die Antworten auf die Fragen schreiben Sie bitte in eine Text-Datei, welche Sie in einem Ordner „Antwor-
ten“ innerhalb des Git-Projektes ablegen. Jede Datei trägt den Namen der Frage, die sie beantwortet (z. B.
Uebung1_Frage3.txt). Darüber hinaus sind die Antworten durch einen entsprechenden Menüaufruf zu
produzieren.
Abgabe der Aufgabe
Ihr vollständiges, fertiges Projekt, inkl. aller Diagramme, deren Quelldateien sowie alle Antworten pu-
shen Sie bitte bis spätestens zum 21.11.2021 in Ihr GitLab-Projekt und laden alle Ergebnisse, sprich das
gesamte Projekt, zusätzlich als ZIP-Archiv in OLAT hoch. Achten Sie bitte darauf keine Parlament-
sprotokolle, weder in OLAT noch in GitHub, mit abzugeben! Alle Abgaben, die nach diesem Datum
hochgeladen werden, werden nicht berücksichtigt. Für die Bearbeitung dieser Aufgabe stehen Ihnen Elf
(11) Tage zur Verfügung.
5
Abbildungen
Abbildung 1: Erzeugung eines GitLab-Projektes
6
Abbildung 2: Erzeugung einer lokalen Arbeitskopie des GitLab-Projektes
7
Konzeptionierung der Applikation 5 Punkte
Implementierung der Applikation 5 Punkte
Fragen 6 Punkte