Aufgabe 09 - Mediathek
Aufgabe 09 - Mediathek
Abschnitt betitelt „Aufgabe 09 - Mediathek“Worum geht es?
Abschnitt betitelt „Worum geht es?“Ihre erste eigene Klassenhierarchie: Eine Schul-Mediathek verwaltet Bücher, Filme und Hörbücher. Gemeinsames wandert in eine Basisklasse, Besonderes in Subklassen, und eine Verwaltungsklasse behandelt alle Medien einheitlich (siehe Kapitel Vererbung). Die Übung trainiert genau den Dreischritt, der in jedem objektorientierten Entwurf wiederkehrt: Gemeinsamkeiten erkennen, Hierarchie bauen, Wiederverwendung mit super() statt Kopieren.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Vererbung (Basisklasse,
super(), Überschreiben) und Kapitel Klassen in Python. - Aufgabe 08 abgeschlossen.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie entwerfen eine Basisklasse und leiten Subklassen mit eigenen Attributen ab.
- Sie überschreiben Methoden und erweitern sie mit
super()statt zu duplizieren. - Sie behandeln gemischte Objektsammlungen über die gemeinsame Basisklasse.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: die Vererbungssyntax wiedergeben und eine vorgegebene Basisklasse umsetzen (Teil A).
- Reorganisation und Transfer: das Vererbungsmuster auf drei Subklassen übertragen und in einer Verwaltungsklasse anwenden (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: die Hierarchie um zeitabhängige Logik erweitern, den Entwurf grafisch darstellen und begründen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Die Basisklasse
Abschnitt betitelt „Teil A - Die Basisklasse“- Implementieren Sie
Mediummittitle,yearundis_borrowed(StartwertFalse). - Ergänzen Sie
describe(), das"Titel (Jahr)"liefert, und__str__, dasdescribe()verwendet. - Ergänzen Sie
borrow()undgive_back(): Doppeltes Ausleihen oder Zurückgeben eines nicht entlehnten Mediums führt zu einer verständlichen gedruckten Meldung (Exceptions folgen in einer späteren Übung). - Testen Sie die Klasse mit einem Objekt, bevor Sie weitermachen.
Teil B - Die Subklassen
Abschnitt betitelt „Teil B - Die Subklassen“Book(Medium): zusätzlichauthorundpages;describe()wird überschrieben zu"Titel (Jahr), Buch von Autor, 320 Seiten". Pflicht:super().describe()als Baustein verwenden, nicht den Basistext nachbauen.Movie(Medium): zusätzlichdirectorundminutes, eigene Beschreibung nach demselben Muster.Audiobook(Medium): zusätzlichnarratorundminutes, eigene Beschreibung.- Kontrolle: Kein Attribut und keine Logik existiert doppelt; alles Gemeinsame lebt in
Medium. Prüfen Sie mitisinstance(book, Medium), dass die “ist-ein”-Beziehung greift.
Teil C - Die Mediathek
Abschnitt betitelt „Teil C - Die Mediathek“- Implementieren Sie
Librarymit einer Medienliste,add(medium),search(text)(Suche im Titel, Groß-/Kleinschreibung egal) undprint_inventory(): druckt alle Medien über derendescribe(), ohne eine einzige Typabfrage. Markieren Sie mit einem Kommentar die Zeile, in der Polymorphismus wirkt. - Befüllen Sie die Mediathek mit je zwei Exemplaren pro Typ und demonstrieren Sie: Inventar, Suche, Ausleihen, Doppel-Ausleihe (Meldung), Rückgabe.
- Ergänzen Sie
available(): liefert eine Liste aller nicht entlehnten Medien. Auch hier: keine Typabfragen.
Teil D - Expertenteil: Fristen und Diagramm
Abschnitt betitelt „Teil D - Expertenteil: Fristen und Diagramm“- Erweitern Sie
borrow(due_date)um ein Fälligkeitsdatum (datetime.date).give_back()setzt es zurück. - Implementieren Sie
Library.overdue(today): liefert alle Medien, deren Frist am Stichtag überschritten ist. Überlegen Sie, wo diese Logik hingehört (inMediumalsis_overdue(today)oder inLibrary?), entscheiden Sie sich und begründen Sie die Wahl in zwei Sätzen. - Härtetest der Erweiterbarkeit: Ergänzen Sie eine vierte Medienart
Magazine(Medium)(mitissue_number), ohne eine bestehende Zeile vonLibraryzu ändern. Funktionieren Inventar, Suche und Fristen sofort? Dokumentieren Sie das Ergebnis. - Zeichnen Sie das Klassendiagramm der fertigen Hierarchie (Vererbungspfeile, Assoziation zwischen
LibraryundMediummit Multiplizität), von Hand oder mit Mermaid.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Woran erkennen Sie in einer Aufgabenstellung, dass sich eine Basisklasse lohnt?
- Was passiert ohne
super().__init__(...)im Konstruktor einer Subklasse, und wie sieht die typische Fehlermeldung aus? - Warum ist
super().describe()dem Kopieren des Basistexts vorzuziehen? Nennen Sie das konkrete Wartungsszenario. print_inventory()enthält keine Typabfragen und funktioniert trotzdem für vier Medienarten. Welcher Mechanismus steckt dahinter?- In welche Richtung zeigt der Vererbungspfeil im Klassendiagramm, und wie lautet die zugehörige Sprechweise?
media.py (Hierarchie), library.py (Verwaltung und Demo) und das Klassendiagramm. Die Begründungen aus Teil D als Kommentare im Code.