Übung »Implementierung einer "digitalen Klausur"«

Aus einem einfachen Anforderungstext wird eine Klassenstruktur definiert und in Code überführt.

Dauer
Ca. 60 min
Video(s) zu der Übung

Inhalt

Worum geht es?

In dieser Übung geht es darum, aus einem einfachen Anforderungstext eine Klassenstruktur zu definieren und diese in Code zu überführen.

Der Anforderungstext

An einer Hochschule sollen digitale Klausuren ermöglicht werden. Das ist der Anforderungstext dazu:

Eine digitale Klausur wird mit einem Titel, einem Aufgabentext und einem Datum erstellt. Die 
Klausur ist dann sofort zur Anmeldung für Studenten offen. Studenten können sich bis eine Woche 
vor der Klausur an- und abmelden, danach nicht mehr. Studenten haben einen Namen und eine 
Matrikel-Nummer. 

Am Tag der Klausur wird diese manuell gestartet. Die Studierenden können nun eine Lösung 
hochladen, vorausgesetzt, sie sind tatsächlich für die Prüfung angemeldet. Eine Lösung besteht 
aus einem langen Text. Es ist möglich, mehrere Lösungen hochzuladen, nur die letzte wird 
gespeichert. Nach 2h wird die Klausur manuell beendet, von nun an können die Studenten 
keine Lösungen mehr hochladen. Solange keine Lösung korrigiert ist, kann die Klausur aber
noch einmal geöffnet werden, um mehr Zeit zu gewähren.

Nun beginnt die Korrekturphase. Für jede Lösung wird eine Note gespeichert. Sobald alle 
Lösungen korrigiert sind, gilt die Klausur automatisch als abgeschlossen und die Noten werden 
an das Noten-Management-System übermittelt.

Für diese Aufgabenstellung soll nun Code geschrieben werden. Dabei sind noch folgende Randbedingungen zu beachten:

  1. Kein Student darf sich mehr an- oder abmelden, wenn die Klausur weniger als eine Woche hin ist.
  2. Wenn schon Lösungen korrigiert sind, darf die Klausur nicht mehr geöffnet werden.
  3. Es soll eine Methode angeboten werden, um zu entscheiden, ob die Klausur vollständig korrigiert ist.

1) Das Domänenmodell

Nehmt euch 10 min Zeit, um die Aufgabe zu diskutieren. Wenn ihr euch das Video zur Textanalyse angesehen haben, dann macht es bei diesem Text genauso: Streicht die Hauptwörter an, die Klassen in eurer Software sein können (beispielsweise in gelb), und dann mögliche Attribute dieser Klassen in grün.

Dann nehmt noch einmal 10 min und macht ein Domänenmodell daraus. Es kann ein UML-Diagramm sein, muss aber nicht - es geht auch einfacher. Macht Klassen als Kästchen und Beziehungen als Pfeile dazwischen. Pfeil von A nach B heißt: A kennt B, also hat ein Property vom Typ B, oder Methodenparameter vom Typ B. Das Video zum fachlichen Datenmodell erklärt genauer, wie man das machen kann.

Am einfachsten geht das mit dem Domänenmodell in Miro oder einem Tool wie diagrams.net (a.k.a. draw.io).

Beispiel-Lösung

Textanalyse

Hier ist eine einfache Textanalyse (gelb = Entities, grün = Attribute). Der ausführliche Prozess ist in dem entsprechenden Video erklärt, wenn man alle Details und Aspekte einmal durchspielen will.

Textanalyse

Domain-Modell

Daraus kann man das folgende Domain-Modell erstellen.

Domain Model gezeichnet

Genau genommen sind das mehrere Schritte auf einmal. In den Videos ist dieser Prozess so aufgeteilt:

  1. Ein fachliches Datenmodell ist der erste Schritt, zunächst mit ungerichteten Beziehungen.
  2. Dann entfernt man beim logisches Datenmodell überflüssige Klassen, …
  3. … setzt die Beziehungsrichtungen
  4. … und macht sich über Stamm-, Änderungs-, Bestands- und Bewegungsdaten Gedanken, um eventuell fehlende Klassen zu ergänzen.

Will man das Ganze als UML darstellen, dann ergibt sich folgendes Bild:

Domain Model UML

2) Die Implementierung

Jetzt wird das Domänenmodell implementiert. Leider haben wir nicht die Zeit, dass ihr selbst eine Implementierung machen könnt. Aber wir werden das einmal live coden (oder zumindest eine erste Struktur anlegen), dann könnt ihr im Nachhinein dort nachschauen. Die Implementierung ist dann in folgendem Repo zu finden: https://gitlab.com/archi-lab/architecture-and-coding/solutions/exercise-digital-exams