@@ -12,56 +12,8 @@ Wiederholung wichtiger Konzepte aus dem „Praktikum Programmieren“ wie Spezif
...
@@ -12,56 +12,8 @@ Wiederholung wichtiger Konzepte aus dem „Praktikum Programmieren“ wie Spezif
## Aufgabenstellung
## Aufgabenstellung
Für ein CAD-Programm sollen grundlegende Klassen für zweidimensionale Formen (engl. *Shape*) programmiert werden.
Für ein CAD-Programm sollen grundlegende Klassen für zweidimensionale Formen (engl. *Shape*) programmiert werden.
### (a) Rechteck und Kreis implementieren
### (e) Ausnahmebehandlung für `RectangleCircle`
Implementieren Sie eine Klasse, die ein Rechteck beschreibt (engl. *Rectangle*), und eine Klasse, die einen Kreis beschreibt (engl. *Circle*). Beide Klassen sollen geeignete Konstruktoren, Felder und Methoden enthalten. Diese Klassen implementieren das Interface `Shape`:
Bei Teilaufgkabe d) haben wir bisher nicht beachtet, dass der Durchmesser des Kreises nie
größer sein darf als eine der Seitenlängen des Rechtecks. Schreiben Sie hierzu eine eigene
```java
Exception `SizeException` (Subklasse von `java.lang.Exception`), welche in diesem Fall geworfen
packageio.fp.shapes;
werden soll und eine Methode `validate` zum Überprüfen der Korrektheit an allen nötigen Stellen.
\ No newline at end of file
publicinterfaceShape{
// Die Methode area() gibt den Flächeninhalt der Form zurück
doublearea();
// Die Methode circumference() gibt den Umfang der Form zurück
doublecircumference();
}
```
Schreiben Sie eine ausführbare Klasse `App`, um die Methoden der beiden Klassen zu überprüfen.
**Hinweis:** Mathematische Funktionen und Konstanten wie π sind in der Klasse `java.lang.Math` als statische Elemente verfügbar (z.B. `Math.PI`; siehe Java-API Dokumentation).
### (b) Klasse `Util` erstellen
Schreiben Sie eine Klasse `Util`, die zwei statische Methoden enthält, welche den Gesamtflächenbedarf bzw. den Gesamtumfang aller Formen in einem Array berechnen. Die beiden Methoden haben folgende Signatur:
Erweitern Sie die ausführbare Klasse `App` aus Teilaufgabe (a) so, dass Sie ein `Shape`-Array erstellen und es mit diversen Rechtecken und Kreisen füllen. Verwenden Sie die Methoden aus der Klasse `Util`, um die Gesamtfläche bzw. den Gesamtumfang der Objekte im Array zu berechnen.
### (c) Schnittstellen vs. Objekt-Typen
Ein C-Programmierer, der auch PHP4 toll findet, sieht Ihren Code und sagt: "Das kapiere ich nicht! Wozu verwendest Du Schnittstellen? Das geht doch auch ohne!" Er fügt der Klasse `Util` eine Methode mit folgender Signatur hinzu, die tatsächlich das Gleiche macht, ohne die Schnittstelle `Shape` zu verwenden:
Programmieren Sie diese Methode. Überlegen Sie, welche Nachteile diese Methode gegenüber der Variante hat, die die Schnittstelle `Shape` verwendet.
### (d) Rechteck mit zentriertem Kreis (RectangleCircle)
Erstellen Sie eine neue Form unter Verwendung der Klassen aus Teilaufgabe (a). Die neue Form ist ein Rechteck, das einen Kreis zentriert enthält (Klasse `RectangleCircle`). Zur Fläche dieser neuen Form zählt nur der Bereich, der sich zwischen den Rechteckbegrenzungen und dem Kreis befindet. Der Umfang ist durch die Summe der Umfänge von Kreis und Rechteck gegeben.
Überlegen Sie sich, welche Konstruktoren, Felder und Methoden nötig sind. Die neue Klasse muss ebenfalls die Schnittstelle `Shape` implementieren.
**Hinweis:** Versuchen Sie, so viel wie möglich aus Aufgabe (a) wiederzuverwenden!
Verändern Sie anschließend Ihre ausführbare Klasse `App` so, dass Sie auch Objekte der Klasse `RectangleCircle` im Array speichern und damit deren Flächeninhalt bzw. Umfang in die Berechnung einfließt.