Java · MIS und Unternehmenssoftware · Lernseite · Klausurvorbereitung

TimeValidator — Java Zeile für Zeile erklärt

Diese Seite erklärt jede einzelne Zeile des Codes: was sie macht, warum sie dort steht, was sie voraussetzt und wie sie mit dem Rest zusammenhängt. Klicke unten auf eine Codezeile, um ihre Erklärung zu öffnen.

01 · Datenstruktur
  • Type — Enum mit KOMMEN / GEHEN
  • TimeEntry — type + timestamp
  • ValidationResult — List<String> errors
02 · Ablauf
  • 1 · Einträge sortieren
  • 2 · Konsistenz prüfen
  • 3 · nach Tag gruppieren
  • 4 · Arbeit & Pausen je Tag
  • 5 · Ruhezeit & Ergebnis
03 · Prüfungen
  • Kein doppeltes Kommen/Gehen
  • Jede Pause ≥ 15 Min
  • ≥ 9 h → ≥ 45 Min · ≥ 7 h → ≥ 30 Min
  • Max. 10 h Arbeit pro Tag
  • Ruhezeit ≥ 11 h
Der Quellcode

Interaktiver Code — jede Zeile aufklappbar

Klicke auf eine Zeile. Die Zeile wird hervorgehoben und darunter öffnet sich eine ausführliche Erklärung.

{{ openCount }} / {{ explainCount }} offen
TimeValidator.java
{{ row.n }} {{ tok.text }} {{ row.chev }}
Zeile {{ row.n }} {{ row.codeText }}
{{ b.label }}
{{ b.text }}
Datenstruktur

Die drei Bausteine der Daten

enum Type

Speichert: die Art eines Stempels — entweder KOMMEN oder GEHEN.

Warum: Es gibt nur diese zwei Möglichkeiten. Ein Enum verhindert Tippfehler und falsche Werte.

Verwendung: Jeder TimeEntry hat ein Type. Überall mit == verglichen (z. B. Type.KOMMEN).

record TimeEntry

Speichert: einen einzelnen Stempelvorgang — die Art (type) und den Zeitpunkt (timestamp).

Warum: Ein record ist ein kurzer, unveränderlicher Datencontainer. Konstruktor und type()/timestamp() entstehen automatisch.

Verwendung: validate bekommt eine List<TimeEntry> und verarbeitet sie.

record ValidationResult

Speichert: das Ergebnis der Prüfung — eine List<String> mit allen gefundenen Fehlertexten.

Warum: Verpackt das Resultat sauber in ein Objekt, statt nur eine Liste herumzureichen. Ist die Liste leer, gab es keine Verstöße.

Verwendung: validate gibt am Ende new ValidationResult(errors) zurück.

Grundbegriffe einfach erklärt

public

Zugriffsmodifizierer: „von überall sichtbar". Andere Klassen dürfen es benutzen.

private

Nur innerhalb dieser Klasse nutzbar. Die drei Hilfsmethoden sind private.

class

Ein Bauplan/Container. Bündelt Daten und Methoden zu einer Einheit (hier: TimeValidator).

enum

Eine Aufzählung: ein Typ mit fester, begrenzter Menge benannter Werte.

public vs. private

public = Eingang von außen (z. B. validate). private = interne Helfer, vor Außen verborgen.

Packages

Pakete ordnen Klassen in Namensräume/Ordner, vermeiden Namenskonflikte und gliedern große Projekte.

Kein Package initialisiert

Ganz oben steht keine package …;-Zeile. Die Klasse liegt daher im „default package" (Standardpaket). In echten Projekten ist ein benanntes Package üblich.

class TimeValidator

Die Klasse & ihr Zweck

TimeValidator ist die zentrale Klasse. Sie prüft Arbeitszeit-Stempel auf Verstöße gegen Arbeitszeitregeln (Pausen, Höchstarbeitszeit, Ruhezeit). Sie enthält das Enum Type, die Records TimeEntry und ValidationResult sowie eine öffentliche Methode validate(…) und drei private Hilfsmethoden.

Im MIS-Kontext zeigt der TimeValidator beispielhaft, wie Unternehmenssoftware fachliche Regeln wie Arbeitszeiten, Pausen und Ruhezeiten automatisiert prüfen kann — inklusive der Annahmen und möglichen Schwächen, die solche Geschäftslogik in der Praxis hat.

Ablauf & Beziehungen

Wie die Methoden zusammenarbeiten

validate(…) ruft drei Helfer auf

Die animierten Pfeile zeigen, wer wen aufruft.

validate(entries) Hauptprüfung · public calculateWorkTime Arbeitszeit/Tag calculatePauses Pausen/Tag checkRestPeriod Ruhezeit (über ganze Liste)

Prüfablauf als Zeitstrahl

1
Sortieren
Einträge nach Zeit ordnen
2
Gruppieren
nach Tag (TreeMap)
3
Arbeit & Pause
je Tag berechnen & prüfen
4
Ruhezeit
Abstand nach GEHEN < 11 h? → Ergebnis

Flussdiagramm von validate(…)

Start: errors-Liste anlegen
Einträge sortieren (Comparator)
Konsistenz prüfen — zweimal gleiche Art hintereinander? → „Hinweistext 0"
Nach Tag gruppieren (TreeMap)
Pro Tag: Arbeitszeit + Pausen berechnen · jede Pause ≥ 15 Min? · ≥ 9 h→45 / ≥ 7 h→30 Min Pause? · Max. 10 h?
Abstand nach jedem GEHEN < 11 h? (checkRestPeriod)
ValidationResult(errors) zurückgeben
Klausurfragen

Häufige Fragen & Antworten

{{ f.q }}+
Merkhilfen

Wichtige Lernpunkte

Das ist wichtig, weil…

…ohne das Sortieren (Zeile 15) keine Prüfung stimmt. Erst sortiert ergeben Kommen/Gehen-Paare und Abstände Sinn.

Dieser Teil hängt zusammen mit…

i += 2 in calculateWorkTime & calculatePauses: gerade Indizes = Kommen-Blöcke, ungerade = Pausen.

Dieses Muster ist typisch für…

Validierung: eine Fehlerliste anlegen, viele Regeln prüfen, Fehler sammeln und am Ende gebündelt zurückgeben.

Merke dir…

records ersetzen viel Boilerplate: ein TimeEntry bekommt Konstruktor und Getter (type(), timestamp()) geschenkt.

Achtung in der Klausur…

private Methoden sind Helfer und nur intern aufrufbar — validate ist public, der Einstieg von außen.

Faustregel Ruhezeit…

Pausen werden pro Tag geprüft; checkRestPeriod läuft über die ganze sortierte Liste und misst den Abstand nach jedem GEHEN — unterscheidet aber nicht zwischen Pause und echter Ruhezeit.

Gesamtzusammenfassung

Alles auf einen Blick

TimeValidator nimmt eine Liste von Stempeln (TimeEntry = Kommen/Gehen + Zeitpunkt), sortiert sie, prüft auf doppelte Stempel, gruppiert nach Tag und kontrolliert pro Tag Pausen, Pausensumme und Höchstarbeitszeit. Zum Schluss prüft sie über die gesamte sortierte Liste den Abstand nach jedem Gehen auf 11 Stunden — das erkennt Ruhezeiten zwischen Arbeitstagen, kann aber ohne Tageswechsel-Prüfung auch normale Pausen fälschlich als Verstoß werten. Alle Verstöße landen in einer Fehlerliste, die als ValidationResult zurückkommt.

Struktur

1 Enum, 2 Records, 1 öffentliche + 3 private Methoden.

Kern-Idee

Sammle Fehler in einer Liste, prüfe Regel für Regel.

Ergebnis

Leere Fehlerliste = alles in Ordnung.

Klicke jede Codezeile oben an, um sie einzeln zu lernen.

by Ph4ntomic · ph4ntomic.de ↗