Schreiben Sie eine Klasse Datum, die ein Datum modelliert, also die Angabe eines bestimmten Tages
durch das Jahr (als positive ganze Zahl), den Monat (als ganze Zahl im Bereich r1; 12s) und den Tag
(als ganze Zahl im Bereich r1; 31s).
Die Klasse soll folgende Konstruktoren bereitstellen:
Wird kein Argument übergeben, stellt das erzeugte Objekt den 1. Januar des Jahres 1 dar.
Werden Werte für Jahr, Monat und Tag (in dieser Reihenfolge) übergeben, stellt das erzeugte
Objekt das entsprechende Datum dar.
Dabei kann angenommen werden, dass die übergebenen Werte gültig sind.
Die Klasse soll zudem folgende Methoden bereitstellen:
anzahl nimmt kein Argument an und gibt die Anzahl aller seit Programmstart angelegten
Datum-Objekte zurück.
jahr, monat und tag nehmen kein Argument an und geben den entsprechenden Wert zurück.
equals nimmt eine Datum-Referenz als Argument an und gibt als Wahrheitswert zurück, ob das
durch die Instanz beschriebene Datum gleich ist zu dem durch das Argument beschriebenen
Datum.
istFrueher nimmt eine Datum-Referenz als Argument an und gibt als Wahrheitswert zurück,
ob das durch die Instanz beschriebene Datum ein früheres ist als das durch das Argument
beschriebene Datum.
toString gibt das Datum als Zeichenkette zurück, zunächst in der Form "jahr -monat -tag ".
Falls eine der beiden folgenden Methoden aufgerufen wird, wird danach die gewählte Reihenfolge
von jahr , monat und tag bzw. das gewählte Trennzeichen (statt ’-’) verwendet.
setzeFormatRF nimmt eine Zeichenkette als Argument an und gibt kein Ergebnis zurück. Es
kann angenommen werden, dass die Zeichenkette einen der drei Werte "jmt", "tmj" oder "mtj"
hat. Fortan wird die entsprechende Reihenfolge für die Anordnung von Jahres-, Monats- und
Tagesangabe in Datumsdarstellungen als Zeichenkette verwendet.
Z.B. gibt nach dem Aufruf mit dem Argument "tmj" der Aufruf von toString für beliebige
Objekte Zeichenketten der Form "tag -monat -jahr " zurück (ggf. mit einem anderen Trennzeichen).
setzeFormatTZ nimmt ein Zeichen als Argument an und gibt kein Ergebnis zurück. Fortan wird
dieses Zeichen als Trennzeichen zwischen Jahres-, Monats- und Tagesangabe in Datumsdarstellungen als Zeichenkette verwendet.
Z.B. gibt nach dem Aufruf mit dem Argument ’/’ der Aufruf von toString für beliebige Objekte
Zeichenketten in der Form "jahr /monat /tag " zurück (ggf. in einer anderen Reihenfolge).
Sofern möglich, sollten Methoden Klassenmethoden sein.
Aufgabe 1 [Programmierung – bewertet]
Schreiben Sie eine Klasse Datum, die ein Datum modelliert, also die Angabe eines bestimmten Tages durch das Jahr (als positive ganze Zahl), den Monat (als ganze Zahl im Bereich r1; 12s) und den Tag (als ganze Zahl im Bereich r1; 31s).
Die Klasse soll folgende Konstruktoren bereitstellen:
Wird kein Argument übergeben, stellt das erzeugte Objekt den 1. Januar des Jahres 1 dar.
Werden Werte für Jahr, Monat und Tag (in dieser Reihenfolge) übergeben, stellt das erzeugte Objekt das entsprechende Datum dar. Dabei kann angenommen werden, dass die übergebenen Werte gültig sind.
Die Klasse soll zudem folgende Methoden bereitstellen:
anzahl nimmt kein Argument an und gibt die Anzahl aller seit Programmstart angelegten Datum-Objekte zurück.
jahr, monat und tag nehmen kein Argument an und geben den entsprechenden Wert zurück.
equals nimmt eine Datum-Referenz als Argument an und gibt als Wahrheitswert zurück, ob das durch die Instanz beschriebene Datum gleich ist zu dem durch das Argument beschriebenen Datum.
istFrueher nimmt eine Datum-Referenz als Argument an und gibt als Wahrheitswert zurück, ob das durch die Instanz beschriebene Datum ein früheres ist als das durch das Argument beschriebene Datum.
toString gibt das Datum als Zeichenkette zurück, zunächst in der Form "jahr -monat -tag ". Falls eine der beiden folgenden Methoden aufgerufen wird, wird danach die gewählte Reihenfolge von jahr , monat und tag bzw. das gewählte Trennzeichen (statt ’-’) verwendet.
setzeFormatRF nimmt eine Zeichenkette als Argument an und gibt kein Ergebnis zurück. Es kann angenommen werden, dass die Zeichenkette einen der drei Werte "jmt", "tmj" oder "mtj" hat. Fortan wird die entsprechende Reihenfolge für die Anordnung von Jahres-, Monats- und Tagesangabe in Datumsdarstellungen als Zeichenkette verwendet. Z.B. gibt nach dem Aufruf mit dem Argument "tmj" der Aufruf von toString für beliebige Objekte Zeichenketten der Form "tag -monat -jahr " zurück (ggf. mit einem anderen Trennzeichen).
setzeFormatTZ nimmt ein Zeichen als Argument an und gibt kein Ergebnis zurück. Fortan wird dieses Zeichen als Trennzeichen zwischen Jahres-, Monats- und Tagesangabe in Datumsdarstellungen als Zeichenkette verwendet. Z.B. gibt nach dem Aufruf mit dem Argument ’/’ der Aufruf von toString für beliebige Objekte Zeichenketten in der Form "jahr /monat /tag " zurück (ggf. in einer anderen Reihenfolge). Sofern möglich, sollten Methoden Klassenmethoden sein.