diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d0a4d29637827053fda500919c0a4f1d4996b8ce --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# 1.06 Schuhe + +**Voraussetzung**: +Vorlesung zum Thema generische Klassen, Methoden (Generics). + +**Ziel**: +Kennenlernen und Anwenden des Einschränkens von Typvariablen sowie von komplexen, mehrdimensionalen, generischen Datenstrukturen. + +**Dauer**: +1,5 Stunden + +## Aufgabenstellung +Für die Lagerverwaltung in einem Schuhladen soll ein Programm zur Zuordnung von Schuhen in Schuhschachteln erstellt werden. + +### (a) Abstrakte Klasse `Shoes` +Schreiben Sie die abstrakte Klasse `Shoes`. Diese dient als Basisklasse für ein Paar verschiedener Schuharten. Jedes Schuhpaar-Objekt besteht aus: +- einem Namen und +- einer Schuhgröße (es sollen auch halbe Schuhgrößen erlaubt sein). + +Erstellen Sie für die Schuharten Stiefel und Sportschuhe eigene Klassen, welche von der Klasse `Shoes` erben. **Hinweis:** Überlegen Sie sich dabei aussagekräftige englische Bezeichnungen für Klassen, Methoden und Variablen. + +### (b) Generische Klasse `Box` +Ein beliebiges Objekt soll in einer Schachtel (engl. `Box`) aufbewahrt werden können (nur ein Objekt je Schachtel!). Erstellen Sie dazu eine generische, abstrakte Klasse `Box` mit Methoden zum Hineinlegen und Entfernen eines Objekts und geeigneten Konstruktoren. + +Außerdem soll die Klasse `Box` über eine Methode `public String toString()` verfügen, welche die Schachtel und ihren Inhalt in Zeichenform zurückgibt. + +### (c) Klasse `ShoeBox` +Jedes Schuhpaar soll in einer eigenen Schachtel untergebracht werden. Um die generische Klasse `Box` wiederverwenden zu können, soll eine neue Klasse `ShoeBox` erstellt werden, welche von `Box` erbt. + +Um zu verhindern, dass neben Schuhobjekten auch andere Objekte in `ShoeBox` abgelegt werden können, ist es erforderlich, den generischen Platzhalter der Klasse entsprechend einzuschränken. + +**Weitere Informationen:** +Erstellen Sie in der `main()`-Methode der Testklasse `App` von den verschiedenen Schuharten jeweils ein Objekt. Außerdem sind `ShoeBox`-Objekte zu erstellen, in denen Sie die Schuhpaare aufbewahren und herausnehmen können. Der Inhalt der `ShoeBox`-Objekte soll auf der Konsole ausgegeben werden. + +### (d) Klasse `Shelf` +Erstellen Sie eine Klasse `Shelf`, welche ein Regal für Boxen repräsentiert (diese Klasse ist **nicht** generisch!). + +Diese Klasse soll einen Konstruktor besitzen, der es erlaubt, eine feste Höhe und Breite dieses Regals zu definieren. Jedes Regal hat also Höhe x Breite Fächer. In diesem Regal sollen nur Schuhboxen hinzugefügt und entfernt werden können. In jedem Fach hat genau eine Schuhbox Platz. Verwenden Sie `ArrayList<ArrayList<ShoeBox<? extends Shoes>>>` als Typ für die interne Struktur des Regals in der Klasse `Shelf`. + +Die Methoden für das Hinzufügen und Entfernen von Schuhboxen sollen neben der eigentlichen Schuhbox auch Parameter enthalten, welche die Position der Schuhbox im Regal bestimmen (Höhe und Breite im Regal). + +Schreiben Sie eine `toString()`-Methode für das Regal, welche alle Schuhboxen, inklusive deren Inhalte, als Zeichenkette zurückgibt. + +Fangen Sie mögliche Fehler in einer eigens erstellten `BoxException` (erweitert `java.lang.Exception`) ab. Diese soll geworfen werden, wenn beim Hinzufügen einer Schuhbox festgestellt wird, dass das Fach schon belegt ist, bzw. wenn beim Entfernen einer Schuhbox aus einem Fach das Fach leer ist. + +**Ergänzung zur `main()`-Methode:** +Ergänzen Sie Ihre `main()`-Methode in der Klasse `App` mit einem Regal, in welchem Sie einige Schuhboxen hinzufügen und auch wieder entfernen. Achten Sie darauf, dass das Regal Schuhboxen von beliebigen Typen lagern kann (also z.B. `ShoeBox<Boots>` oder `ShoeBox<Sneaker>`). \ No newline at end of file