Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03405.jsonl.gz/817

Übung Java ShapeSwing Inheritance
Ausgangslage
Mit dieser Übung soll das RectangleSwing erweitert werden, so dass nicht nur Rechtecke sondern auch Ovale darstellbar sind. Hierzu passen wir die bestehende RectangleSwing Lösung an. Wir benennen aber die Klasse RectangleSwing um nach ShapeSwing.
Der folgende ScreenShot zeigt das Layout des zu programmierenden ShapeSwing Programms:
Das folgende Klassendiagramm zeigt die beteiligten Klassen:
Die graphischen Klassen sind alle aus der abstrakten Klasse Shape abgeleitet. Diese Klasse definiert die zu überschreibenden abstrakten Methoden double getArea () und void draw (Graphics g). Mit der Methode draw() soll jede Komponente gezeichnet werden.
Vorgehen
Lösen Sie bitte die Aufgabe wie folgt:
- Gehen Sie ins Package der Klasse Rectangle.
- Kopieren Sie die Klasse Rectangle via Copy/Paste im Package Explorer um nach Oval.
- Öffnen Sie die neue Klasse Oval und programmieren Sie die Klasse um, so dass ein Oval gezeichnet wird. Die Attribute bleiben gleich.
- Integrieren Sie nun die Klasse Oval in die RectangleSwing Klasse, analog der Klasse Rectangle.
- Selektieren Sie nun beide Klassen Rectangle und Oval im Package Explorer und wenden Sie via Popup Menu die Funktion "Compare With" an. Was stellen Sie fest?
- Planen Sie nun das Refactoring "Extract Superclass" gemäss dem obigen Klassendiagramm. Erstellen Sie die Klasse Shape und verschieden Sie die Attribute anlog der Klassen Rectangle und Oval. Programmieren Sie die Klasse Shape aus inkl. den Konstruktoren. Alternativ könnte man die Refactoring Funktion "Extract Superclass" von Eclipse verwenden, doch das ist etwas trickreich.
- Leiten Sie die Klasse Rectangle via extends aus Shape ab und entfernen Sie alle Attribute und nicht mehr notwendigen Methode, die ja aus Shape nun vererbt werden.
- Wiederholen Sie das gleiche mit der Klasse Oval.
- Benennen Sie die die bestehende Klassen RectangleSwing um nach ShapeSwing. (Refactoring Rename)
- Benennen Sie das Package ch.std.jegl.rectangle um nach ch.std.jegl.shape. (Refactoring Rename inkl. Subpackages)
- Das neue ShapeSwing Programme sollte immer noch funktionieren.
Lösung
Eine mögliche Lösung finden Sie hier