Aufgabe 10 - Spielfiguren
Aufgabe 10 - Spielfiguren
Abschnitt betitelt „Aufgabe 10 - Spielfiguren“Worum geht es?
Abschnitt betitelt „Worum geht es?“Vererbung mit Verhalten: Sie bauen Spielfiguren für ein kleines rundenbasiertes Kampfspiel. Anders als in der Mediathek unterscheiden sich die Subklassen hier nicht nur in Daten, sondern in Verhalten, das überschrieben und erweitert wird. Am Ende stoßen Sie planmäßig an die Grenze der Vererbung und bereiten damit die Folgeübung vor (siehe Kapitel Vererbung).
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Vererbung, insbesondere Überschreiben,
super()und die Prüffragen für gute Hierarchien. - Aufgabe 09 abgeschlossen.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie entwerfen eine Hierarchie aus einer Verhaltensbeschreibung und setzen sie um.
- Sie überschreiben Methoden gezielt und begründen, welche Methode überschrieben wird.
- Sie erkennen Anforderungen, an denen einfache Vererbung scheitert.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: eine vorgegebene Basisklasse implementieren (Teil A).
- Reorganisation und Transfer: Verhaltensregeln in überschriebene Methoden übersetzen und im polymorphen Kampfablauf anwenden (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: die Grenzen des Entwurfs analysieren, Alternativen skizzieren und bewerten (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
Charactermitname,health(Start 100) undstrengthsowie den Methodenattack(target)(zieht dem ZielstrengthPunkte ab),take_damage(points),is_defeated()und__str__(Name und aktuelle Punkte). - Lassen Sie zwei Basisfiguren einige Runden aufeinander einschlagen und geben Sie den Verlauf aus. Erst wenn das läuft, kommen Subklassen dazu.
Teil B - Die Subklassen
Abschnitt betitelt „Teil B - Die Subklassen“Knight(Character): hat zusätzlicharmorund erleidet nur halben Schaden. Überschreiben Sie dafürtake_damage, nichtattack. Begründen Sie im Kommentar, warum das die richtige Stelle ist (wer ist für den erlittenen Schaden zuständig, der Angreifer oder der Getroffene?).Mage(Character): hatmana(Start 50);attackkostet 10 Mana und verursacht doppelten Schaden; ohne ausreichendes Mana ein gewöhnlicher Schlag übersuper().attack(target).Healer(Character): kann zusätzlichheal(target)(+20 Punkte, Obergrenze 100).- Kontrolle: Keine Subklasse wiederholt Code der Basisklasse; alles Geerbte bleibt geerbt,
super()wird überall dort verwendet, wo Basisverhalten erweitert statt ersetzt wird.
Teil C - Die Arena
Abschnitt betitelt „Teil C - Die Arena“- Simulieren Sie einen rundenbasierten Kampf 2 gegen 2 (Teamzusammenstellung frei) bis ein Team besiegt ist, mit lesbarer Rundenausgabe.
- Verbindliche Entwurfsregel: Die Kampfschleife behandelt alle Figuren einheitlich als
Character. Typspezifisches Verhalten entsteht ausschließlich durch überschriebene Methoden;isinstance-Abfragen in der Schleife sind nicht zulässig. Markieren Sie im Code, wo die Schleife von diesem Verzicht profitiert. - Bauen Sie eine einfache Zugregel für den Heiler ein (etwa: heilt den schwächsten Verbündeten, wenn dieser unter 40 Punkten liegt, sonst greift er an), ohne die Regel aus Punkt 2 zu verletzen. Hinweis: Die Entscheidung darf in einer überschriebenen Methode
take_turn(allies, enemies)liegen, die die Basisklasse mit Standardverhalten (angreifen) vorgibt.
Teil D - Expertenteil: Die Grenze der Vererbung
Abschnitt betitelt „Teil D - Expertenteil: Die Grenze der Vererbung“- Neue Anforderung: ein
Paladin, der Ritter und Heiler zugleich ist (halber Schaden und Heilfähigkeit). Versuchen Sie eine Lösung innerhalb Ihrer Hierarchie und dokumentieren Sie, woran sie krankt (Codeverdopplung? Mehrfachvererbung samt ihrer Probleme? Eine künstliche Zwischenklasse?). - Diskutieren Sie schriftlich in fünf bis acht Sätzen: Warum skaliert die Lösung “für jede Kombination eine Subklasse” nicht? Wie viele Klassen bräuchten Sie bei vier frei kombinierbaren Fähigkeiten?
- Skizzieren Sie (nur als Text oder Diagramm, ohne Implementierung) den Alternativentwurf: Fähigkeiten als eigene Objekte, die eine Figur hat statt ist. Genau dieser Entwurf wird in Aufgabe 11 gebaut.
- Prüfen Sie abschließend Ihre bestehende Hierarchie gegen das Substitutionsprinzip aus dem Kapitel: Gibt es eine Stelle, an der eine Subklasse Erwartungen an
Characterverletzt? Begründen Sie Ihr Urteil.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum gehört die Rüstungslogik in
take_damageund nicht inattack? - Was bewirkt
super().attack(target)im Magier, wenn das Mana nicht reicht? - Warum verbietet die Arena-Regel
isinstance-Abfragen in der Kampfschleife? Was würde bei einer fünften Figurenart passieren? - Formulieren Sie das Substitutionsprinzip in einem eigenen Satz.
- Ab wann ist “für jede Variante eine Subklasse” der falsche Weg? Nennen Sie das Erkennungszeichen aus Teil D.
arena.py mit Hierarchie und Kampfsimulation sowie die schriftliche Diskussion und Skizze aus Teil D.