Hinweis: Bei der in dieser und der folgenden Aufgabe zu verwendenden Klasse Punkt, die Punkte im zweidimensionalen Raum modelliert, handelt es sich um die aus Kapitel 3 der Vorlesung und aus Blatt 06, Aufgabe 6 bekannte Klasse, die jedoch so angepasst wurde, dass sie Rundungsfehler ignoriert.
Sie finden die Klasse in LEA zu dieser Aufgabe.
Modellieren Sie zweidimensionale geometrische Figuren, namentlich (achsparallele) Rechtecke. Deklarieren Sie dazu die folgenden Typen und überlegen Sie dabei, welche Klassen und Methoden konkret oder abstrakt deklariert werden sollten. Stellen Sie nur Methoden bereit, die sinnvolle Ergebnisse liefern.
Figur modelliert zweidimensionale Figuren und stellt folgende Eigenschaften bereit:
equals vergleicht eine Figur mit einem anderen Objekt auf Gleichheit. Dabei sollen Rundungsfehler ignoriert werden.
mitte liefert den Mittelpunkt der Figur (als von der Figur unabhängiges Objekt
durchmesser, umfang und flaeche liefern den (maximalen) Durchmesser, den Umfang und den Flächeninhalt der Figur.
istEnthalten nimmt eine Punkt-Referenz als Argument an und gibt als Wahrheitswert zurück, ob der Punkt innerhalb der Figur (incl. ihres Randes) liegt.
verschiebe nimmt zwei Gleitkommawerte dx und dy als Argumente an, in dieser Reihenfolge, und verschiebt die Figur um diese Werte in x- und y-Richtung. Die Methode gibt eine Referenz auf die Figur zurück.
toString liefert eine Darstellung der Figur als Zeichenkette.
FigurPerMitte hat die Eigenschaften von Figur und beschreibt intern die Lage einer Figur im Raum durch ihren Mittelpunkt (als private Instanz, auf die keine externe Partei Zugriff haben soll). Sie spezialisiert die Eigenschaften von Figur oder ergänzt sie in folgender Weise:
Ein Konstruktor nimmt eine Referenz auf ein Punkt-Objekt als Argument an und verwendet dieses als Vorgabe für den Mittelpunkt.
Ein weiterer Konstruktor nimmt eine Referenz auf ein FigurPerMitte-Objekt als Argument an und legt das Objekt als Kopie von diesem an.
RechteckXYPerMitteLaengen ist eine FigurPerMitte und beschreibt Rechtecke intern zudem durch ihre (nichtnegativen) Ausdehnungen in x- und y-Richtung. Sie spezialisiert die Eigenschaften von FigurPerMitte oder ergänzt sie in folgender Weise:
Ein Konstruktor nimmt eine Referenz auf ein Punkt-Objekt an, das den Mittelpunkt des Rechtecks vorgibt, sowie zwei nichtnegative Werte laenge und breite, die die Ausdehnungen des Rechtecks in x- und y-Richtung vorgeben.
Ein weiterer Konstruktor nimmt eine Referenz auf ein RechteckXYPerMitteLaengen-Objekt als Argument an und legt das Objekt als Kopie von diesem an.
laenge und breite liefern die Ausdehnungen des Rechtecks in x- und y-Richtung.
ecke nimmt zwei Wahrheitswerte istLinks und istUnten an. Je nach Wert der Argumente gibt die Methode die linke untere, linke obere, rechte untere oder rechte obere Ecke des Rechtecks als Punkt-Objekt zurück.
toString gibt eine Darstellung des Rechtecks als Zeichenkette der Form "[lup,rop ]" zurück, worin lup für die Darstellung des linken unteren Eckpunkts als Zeichenkette steht und rop für die des rechten oberen.
Verwenden Sie final überall wo möglich und angemessen.
Hinweis: Verwenden Sie so wenige Methodenimplementierungen wie möglich; überlegen Sie, welche Methoden gemeinsam für mehrere Klassen implementiert werden können.
Aufgabe 4 [Programmierung]
Hinweis: Bei der in dieser und der folgenden Aufgabe zu verwendenden Klasse Punkt, die Punkte im zweidimensionalen Raum modelliert, handelt es sich um die aus Kapitel 3 der Vorlesung und aus Blatt 06, Aufgabe 6 bekannte Klasse, die jedoch so angepasst wurde, dass sie Rundungsfehler ignoriert. Sie finden die Klasse in LEA zu dieser Aufgabe.
Modellieren Sie zweidimensionale geometrische Figuren, namentlich (achsparallele) Rechtecke. Deklarieren Sie dazu die folgenden Typen und überlegen Sie dabei, welche Klassen und Methoden konkret oder abstrakt deklariert werden sollten. Stellen Sie nur Methoden bereit, die sinnvolle Ergebnisse liefern.
Figur modelliert zweidimensionale Figuren und stellt folgende Eigenschaften bereit:
equals vergleicht eine Figur mit einem anderen Objekt auf Gleichheit. Dabei sollen Rundungsfehler ignoriert werden.
mitte liefert den Mittelpunkt der Figur (als von der Figur unabhängiges Objekt
durchmesser, umfang und flaeche liefern den (maximalen) Durchmesser, den Umfang und den Flächeninhalt der Figur.
istEnthalten nimmt eine Punkt-Referenz als Argument an und gibt als Wahrheitswert zurück, ob der Punkt innerhalb der Figur (incl. ihres Randes) liegt.
verschiebe nimmt zwei Gleitkommawerte dx und dy als Argumente an, in dieser Reihenfolge, und verschiebt die Figur um diese Werte in x- und y-Richtung. Die Methode gibt eine Referenz auf die Figur zurück.
toString liefert eine Darstellung der Figur als Zeichenkette.
FigurPerMitte hat die Eigenschaften von Figur und beschreibt intern die Lage einer Figur im Raum durch ihren Mittelpunkt (als private Instanz, auf die keine externe Partei Zugriff haben soll). Sie spezialisiert die Eigenschaften von Figur oder ergänzt sie in folgender Weise:
Ein Konstruktor nimmt eine Referenz auf ein Punkt-Objekt als Argument an und verwendet dieses als Vorgabe für den Mittelpunkt.
Ein weiterer Konstruktor nimmt eine Referenz auf ein FigurPerMitte-Objekt als Argument an und legt das Objekt als Kopie von diesem an.
RechteckXYPerMitteLaengen ist eine FigurPerMitte und beschreibt Rechtecke intern zudem durch ihre (nichtnegativen) Ausdehnungen in x- und y-Richtung. Sie spezialisiert die Eigenschaften von FigurPerMitte oder ergänzt sie in folgender Weise:
Ein Konstruktor nimmt eine Referenz auf ein Punkt-Objekt an, das den Mittelpunkt des Rechtecks vorgibt, sowie zwei nichtnegative Werte laenge und breite, die die Ausdehnungen des Rechtecks in x- und y-Richtung vorgeben.
Ein weiterer Konstruktor nimmt eine Referenz auf ein RechteckXYPerMitteLaengen-Objekt als Argument an und legt das Objekt als Kopie von diesem an.
laenge und breite liefern die Ausdehnungen des Rechtecks in x- und y-Richtung.
ecke nimmt zwei Wahrheitswerte istLinks und istUnten an. Je nach Wert der Argumente gibt die Methode die linke untere, linke obere, rechte untere oder rechte obere Ecke des Rechtecks als Punkt-Objekt zurück.
toString gibt eine Darstellung des Rechtecks als Zeichenkette der Form "[lup,rop ]" zurück, worin lup für die Darstellung des linken unteren Eckpunkts als Zeichenkette steht und rop für die des rechten oberen.
Verwenden Sie final überall wo möglich und angemessen.
Hinweis: Verwenden Sie so wenige Methodenimplementierungen wie möglich; überlegen Sie, welche Methoden gemeinsam für mehrere Klassen implementiert werden können.