<aside> 🧩
super().__init__() per l’estensione dei costruttori.<aside> 🧠
Player senza che lui debba conoscerne i dettagli.
</aside><aside> 📢
Da questo esercizio in poi la classe (voi studenti, non quelle di Python) diventa un team di sviluppo che lavora su un unico progetto. Ognuno avrà un compito preciso e sarà un ingranaggio indispensabile.
In particolare, realizzeremo un sistema di generazione e gestione degli oggetti equipaggiabili. Non lavoreremo più su una singola classe Weapon, ma introdurremo una gerarchia di classi per coprire ogni tipo di oggetto: armi da mischia, a distanza, scudi, armature, accessori magici e simili.
La vera sfida non è creare tanti oggetti diversi, ma fare in modo che tutti, pur essendo sviluppati da persone diverse funzionino insieme senza litigare. Spoiler: litigheranno comunque, ma meno.
</aside>
Nello sviluppo di grandi titoli (pensa a Diablo, Elden Ring o Baldur’s Gate) il codice non è scritto da un eroe solitario davanti alla tastiera. l lavoro è diviso tra specialisti: chi cura il combattimento, chi il bilanciamento, chi gli effetti, ecc.
Immagina se tra i programmatori del team Alice chiamasse il bonus di una spada danno_extra e Bob chiamasse il bonus di un anello power_up. Il programmatore che gestisce il Player dovrebbe scrivere codice diverso per ogni oggetto.
Risultato: codice fragile, confuso e pronto a rompersi alla prima modifica. Un grande classico.
Usando l’ereditarietà, il Project Manager definisce una classe base (es. Item o EquippableItem) che stabilisce le regole per tutti, ad esempio:
get_stats().rarity.Questa classe base funziona come un contratto. Tutte le sottoclassi devono rispettarlo.
Grazie a ciò, il resto del software può usare spade, elmi o amuleti nello stesso modo, senza sapere cosa c’è sotto il cofano. Questo è il vero potere dell’ereditarietà: standardizzare la complessità.
Se una sottoclasse eredita da Item ma cambia completamente il significato di un metodo, probabilmente stai violando il contratto. E no, non è “creatività”.
In una software house moderna lo sviluppo è un lavoro di squadra. Anche se siamo tutti studenti programmatori, all’interno dei vostri team dovrete interpretare diversi ruoli: