Kontakt
Mail: stefan.bente@th-koeln.de
Tel.: +49 2261 8196 6367
Skype: stefan.bente
Discord Server
Adresse:
Steinmüllerallee 4
51643 Gummersbach
Gebäude LC4
Raum 1708
Sprechstunde nach Vereinbarung
Terminanfrage: calendly.com Wenn Sie dieses Tool nicht nutzen wollen, schicken Sie eine Mail und ich weise Ihnen einen Termin zu.

Übung »Implementierung eines Zustandsdiagramms für ein Aggregate«

Zu einem gegebenen Zustandsdiagramm, das fachliche Abfolgen in einem Aggregate beschreibt, implementieren Sie die entsprechende Business-Logik in Java.

Dauer
Ca. 120 min
Erfordert vorher die Bearbeitung von ...
Übung Zustandsdiagramm für ein Entity

Inhalt

Worum geht es?

In der Übung Zustandsdiagramm für ein Entity haben wir das logische Datenmodell für ein Exam von Studierenden angeschaut:

Logisches Datenmodell _Exams_ im CAMS

Dafür haben wir die folgende Zustandsfolge identifiziert (schauen Sie sich auch noch einmal den beschreibenden Text in Zustandsdiagramm für ein Entity an):

Zustandsdiagramm

Ihre Aufgabe

  1. Implementieren Sie das Entity Exam. Orientieren Sie sich am Text, welche Methoden Sie implementieren müssen.
  2. Schreiben Sie Unit Tests für die folgenden Fälle (auf Englisch):
    1. Students can register for an exam until the registration period is closed. Same for cancelling participation.
    2. Students can only cancel their participation if they have registered first.
    3. Students can upload a solution only after the exam has been opened, and before it is closed.
    4. A supervisor can only publish the results if all corrections are available, and none of it is marked “disputed”.
    5. Students can access their solutions only after they have been published, and before the exam is archived.

Hinweise

  • Auch wenn hier von Entity die Rede ist, brauchen Sie die Persistenz für diese Übung nicht zu berücksichtigen. D.h. es reicht, einfache POJOs zu implementieren. (Annotation mit @Entity oder @Embeddable schadet nicht, kann aber weggelassen werden).
  • Supervisor ist nicht Teil des LDM. Sie brauchen also nicht nachzuhalten, wer eine Korrektur vorgenommen hat.
  • Die Klassen aus dem LDM von oben können Sie (bis auf Exam) mit den genannten Attributen implementieren; insbesondere brauchen Sie keine Punkte für die Klausur vorzusehen.
  • Ein Exam wird einfach per Konstruktur erzeugt. Stellen Sie sicher, dass es dann im richtigen Startzustand ist.
  • Bei Exam brauchen Sie noch weitere Member-Variablen für die Abbildung der Zustände; das ist Ihnen überlassen.
  • Wenn Sie einen Methodenaufruf in einem invaliden Zustand haben, werfen Sie einfach eine RuntimeException.
  • In einem Unit-Test können Sie so einfach auf eine erwartete Exception prüfen:
assertThrows( RuntimeException.class, () -> {
// ... action expected to throw an exception ...
});