Aufgabe 11 - Komposition statt Vererbung
Aufgabe 11 - Komposition statt Vererbung
Abschnitt betitelt „Aufgabe 11 - Komposition statt Vererbung“Worum geht es?
Abschnitt betitelt „Worum geht es?“In Aufgabe 10 ist der Paladin an der Vererbung gescheitert. Jetzt bauen Sie die Alternative wirklich: Fähigkeiten als eigene Objekte, die eine Figur hat statt ist (siehe Kapitel Vererbung, Abschnitt “ist-ein oder hat-ein”). Am Ende vergleichen Sie beide Entwürfe systematisch und leiten eigene Faustregeln ab. Die Wahl zwischen Vererbung und Komposition gehört zu den häufigsten Entwurfsentscheidungen der Objektorientierung; wer beide Seiten einmal selbst gebaut hat, entscheidet später begründet statt aus Gewohnheit.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Vererbung; Aufgabe 10 samt Ihrer Arena.
- Python, VS Code.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie setzen Komposition um: Verhalten entsteht aus zusammengesteckten Objekten.
- Sie lösen dieselbe Anforderung mit zwei Entwurfsmustern und vergleichen die Ergebnisse.
- Sie formulieren belastbare Kriterien für die Wahl zwischen Vererbung und Komposition.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: das Kompositionsmuster nach Vorlage umsetzen (Teil A).
- Reorganisation und Transfer: die Arena auf den neuen Entwurf umbauen und den Problemfall lösen (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: beide Entwürfe vergleichen, bewerten und Entwurfsregeln ableiten (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Fähigkeiten als Objekte
Abschnitt betitelt „Teil A - Fähigkeiten als Objekte“- Definieren Sie
Abilitymitnameund der Methodeuse(actor, target). Implementieren Sie drei konkrete Fähigkeiten als Subklassen:SwordStrike(Schaden in Höhe der Stärke des Anwenders),Fireball(kostet 10 Mana, doppelter Schaden; ohne Mana passiert nichts außer einer Meldung),Healing(+20 Punkte beim Ziel, Obergrenze 100). - Testen Sie jede Fähigkeit einzeln an zwei einfachen Figuren, bevor Sie weiterbauen.
Teil B - Die Figur neu
Abschnitt betitelt „Teil B - Die Figur neu“- Bauen Sie
Characterum: keine Subklassen für Figurentypen mehr. Jede Figur hatname,health,strength,manaund eine Listeabilities, dazuuse_ability(index, target)undtake_damage(points). - Erzeugen Sie mit dieser einen Klasse einen Ritter (nur
SwordStrike), einen Magier (SwordStrikeundFireball) und einen Heiler (SwordStrikeundHealing). Halten Sie fest: Wie viele Klassen brauchte Aufgabe 10 für dieselben drei Figuren, wie viele brauchen Sie jetzt? - Portieren Sie Ihre Arena-Kampfschleife aus Aufgabe 10 auf den neuen Entwurf. Sie sollte fast unverändert übernehmbar sein; notieren Sie, was Sie anpassen mussten.
Teil C - Der Paladin und die Beweglichkeit
Abschnitt betitelt „Teil C - Der Paladin und die Beweglichkeit“- Erzeugen Sie den Paladin:
SwordStrikeundHealingin der Fähigkeitenliste. Zählen Sie die dafür nötigen neuen Codezeilen und vergleichen Sie mit Ihrer Analyse aus Aufgabe 10 Teil D. - Demonstrieren Sie eine Änderung zur Laufzeit: Ein Magier findet im Kampf einen Trank und lernt
Healingdazu (abilities.append(...)). Erklären Sie in zwei Sätzen, warum das im Vererbungsentwurf strukturell unmöglich war (die Klasse eines Objekts steht fest). - Lassen Sie den Paladin in einem Demo-Kampf 2 gegen 2 mitkämpfen.
Teil D - Expertenteil: Das Urteil und die Grenze der Komposition
Abschnitt betitelt „Teil D - Expertenteil: Das Urteil und die Grenze der Komposition“- Vergleichen Sie beide Arena-Versionen in einer Tabelle: Anzahl der Klassen, Aufwand für eine neue Figurenart, Aufwand für eine neue Fähigkeit, Möglichkeit von Laufzeitänderungen, Lesbarkeit der Figurendefinition.
- Entwerfen Sie eine Fähigkeit mit eigenem Zustand:
PowerStrikedarf nur jede dritte Runde eingesetzt werden (Abklingzeit als Attribut der Fähigkeit, nicht der Figur). Implementieren Sie sie und erklären Sie, warum dieser Zustand in der Fähigkeitsklasse gut aufgehoben ist. - Auch Komposition hat Grenzen. Die Rüstung des Ritters (halber Schaden, aus Aufgabe 10) ist keine einsetzbare Fähigkeit, sondern verändert
take_damage. Diskutieren Sie in drei bis fünf Sätzen, wie Sie Rüstung im Kompositionsentwurf abbilden würden (Vorschläge: einarmor-Attribut; eine Liste passiver Modifikatoren, dietake_damagedurchläuft) und welche Variante Sie warum wählen. - Formulieren Sie zwei Faustregeln für Ihre künftigen Entwürfe: In welchen Situationen greifen Sie zu Vererbung, in welchen zu Komposition? Stützen Sie jede Regel auf eine konkrete Beobachtung aus den Aufgaben 10 und 11.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was bedeutet “hat-ein” gegenüber “ist-ein”, und wie sieht der Unterschied im Code aus?
- Wie viele Subklassen erspart die Komposition bei vier frei kombinierbaren Fähigkeiten? Rechnen Sie kurz vor.
- Warum kann eine Figur zur Laufzeit Fähigkeiten dazulernen, aber nicht die Klasse wechseln?
Abilitymit den SubklassenSwordStrike,Fireball,Healing: Hier steckt weiterhin Vererbung im Entwurf. Wofür ist sie an dieser Stelle zuständig, und warum ist das kein Widerspruch zur Übungsidee?- Nennen Sie Ihre zwei Faustregeln aus Teil D auswendig.
arena_composition.py mit Demo-Kampf (der Paladin kämpft mit), die Vergleichstabelle und die Diskussionen aus Teil D.