Q1 OOP in Java

Die Klasse Termin

Lösung geprüft

Die Aufgabe der heutigen Stunde ist die Klasse Termin! Wir entwerfen sie erstmal auf dem Papier – welche Attribute, welche Methoden. Neu dabei ist das enum, mit dem man eine feste Auswahl an Werten festlegt. Genau so ein Auswahlfeld haben wir auf dem Screenshot ja gesehen.

Die Aufgabenstellung lautet

Eine Klasse Termin wird benötigt.

a) Beschreiben Sie die Klasse Termin anhand des Screenshots der App.

b) Bestimmen Sie, welche Attribute und Methoden die Klasse Termin braucht. Sie können dafür eine Notation in Stichpunkten verwenden. Tipp: Es sollen die Klasse LocalDate und die Klasse LocalTime verwendet werden, beide benötigen eine Import-Anweisung. Beschreiben Sie zunächst, welche Zwecke (bzw. Typ) ein Termin haben könnte, beschränken Sie sich auf maximal 4.

a) Die Klasse Termin anhand des Screenshots

Im Block TERMINE steht ein Feld Datum und daneben ein Auswahlfeld, in dem GEBU…TAG steht – also „Geburtstag", abgeschnitten. Daraus liest man zwei Sachen: ein Termin hat ein Datum, und er hat eine Art, die man aus einer Liste auswählt.

Eine Uhrzeit ist im Screenshot nicht zu sehen. Sinnvoll ist sie trotzdem: ein Geburtstag braucht keine, ein geschäftliches Treffen schon. Deshalb nehmen wir sie dazu, sie darf aber leer bleiben.

b) Attribute, Methoden und der Zweck

Die vier Arten von Terminen

Die Aufgabe sagt ausdrücklich: höchstens vier. Meine Wahl:

ArtWofür
GEBURTSTAGJährlich wiederkehrend, ohne Uhrzeit
JAHRESTAGHochzeitstag und Ähnliches, ebenfalls jährlich
GESCHAEFTLICHTermin mit Uhrzeit, beruflich
PRIVATTermin mit Uhrzeit, privat

Attribute und Methoden in Stichpunkten

Das ist genau die Klasse, die im nächsten Schritt im UML-Editor gebaut wird:

Termin (UML)
                    Termin
------------------------------------------------
- datum: LocalDate
- uhrzeit: LocalTime
- art: Art
------------------------------------------------
c Termin(datum: LocalDate, art: Art)
c Termin(datum: LocalDate, uhrzeit: LocalTime, art: Art)
+ getDatum(): LocalDate
+ setDatum(datum: LocalDate)
+ getUhrzeit(): LocalTime
+ setUhrzeit(uhrzeit: LocalTime)
+ getArt(): Art
+ setArt(art: Art)
+ toString(): String

Die Zeichen davor sind die Sichtbarkeit: - ist private, + ist public, c markiert im Java-Editor einen Konstruktor. Die Attribute sind alle privat, die Methoden alle öffentlich – das ist das Prinzip der minimalen Sichtbarkeit: jede Klasse bekommt nur so viel Zugriff, wie sie wirklich braucht.

Warum zwei Konstruktoren

Konstruktor-Überladung, schon wieder. Ein Geburtstag hat keine Uhrzeit, ein Geschäftstermin schon. Statt bei Geburtstagen irgendeine Dummy-Uhrzeit hinzuschreiben, gibt es einfach einen Konstruktor ohne:

new Termin(LocalDate.of(2025, 12, 24), Art.GEBURTSTAG);
new Termin(LocalDate.of(2025, 9, 1), LocalTime.of(14, 30), Art.GESCHAEFTLICH);

Was ein enum ist und warum man es nimmt

Ein enum (kurz für Enumeration, also Aufzählung) legt eine endliche, feste Menge benannter Konstanten fest. Für unsere vier Terminarten sieht das so aus:

public enum Art {
    GEBURTSTAG, JAHRESTAG, GESCHAEFTLICH, PRIVAT
}

Man könnte die Art stattdessen als String speichern. Der Vergleich zeigt, warum man das nicht tut:

Mit StringMit enum
Tippfehler"Gebrutstag" kompiliert klaglosArt.GEBRUTSTAG → Fehler beim Kompilieren
Schreibweise„privat", „Privat", „PRIVAT" – alles verschiedenEs gibt nur eine Schreibweise
AutovervollständigungDer Editor kann nichts vorschlagenNach Art. kommt die Liste
Erlaubte WerteJeder beliebige Text geht reinNur die vier festgelegten

Der wichtigste Punkt ist die erste Zeile: Fehler werden schon beim Kompilieren gefunden statt erst im laufenden Programm. Ein Tippfehler in einem String fällt dir erst auf, wenn ein Geburtstag plötzlich nicht mehr in der Geburtstagsliste auftaucht – und dann suchst du lange.

Zugegriffen wird über den Klassennamen davor, also Termin.Art.GESCHAEFTLICH, wenn das enum innerhalb von Termin steht. Praktisch sind enums außerdem mit switch:

switch (art) {
    case GEBURTSTAG:    return "Geburtstag ohne Uhrzeit";
    case JAHRESTAG:     return "Jahrestag";
    case GESCHAEFTLICH: return "Geschäftlich";
    case PRIVAT:        return "Privat";
}

Beim switch über ein enum schreibt man die Konstanten ohne den Typ davor, also case GEBURTSTAG: und nicht case Art.GEBURTSTAG:. Java weiß ja schon, um welches enum es geht.

LocalDate und LocalTime statt String

Dasselbe Argument nochmal, nur für das Datum. Man könnte "24.12.2025" als String speichern. Dann kann man aber nicht sortieren, nicht vergleichen und nicht ausrechnen, wie viele Tage bis dahin sind. Mit LocalDate geht das alles:

import java.time.LocalDate;
import java.time.LocalTime;

LocalDate weihnachten = LocalDate.of(2025, 12, 24);
LocalTime treffen     = LocalTime.of(14, 30);

weihnachten.isAfter(LocalDate.now());   // liegt das noch vor uns?

Beide brauchen eine Import-Anweisung, sonst findet der Compiler sie nicht. Sie stehen über der Klasse, genau wie bei der ArrayList.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung