Le classi sono un
esempio perfetto per rappresentare entità nel gioco che hanno
attributi e comportamenti. Ma le entità nei giochi sono spesso
correlate tra loro. In questi post saranno introdotti i concetti di
ereditarietà e polimorfismo, i quali permettono di esprimere tali
collegamenti e possono far costruire classi di gioco ancora più
semplici ed intuitive. I concetti espressi saranno:
- Derivare una classe da un'altra
- Usare i dati membro e funzioni di una classe ereditata
- maneggiare i membri della classe di base
- Definire funzioni virtuali per abilitare il polimorfismo
- Definire funzioni virtuali pure per le classi astratte
- Suddividere il codice in file multipli
Introdurre l'Ereditarietà
Uno degli elementi
chiave della OOP è l'ereditarietà,
la quale permette di derivare
una classe nuova da una esistente. Quando viene fatto, la nuova
classe eredita (ottiene) i dati membro e le funzioni membro della
classe esistente. E' come ottenere qualcosa che funziona con un
lavoro gratuito della classe esistente. L'ereditarietà è molto
utile quando si vuole creare una versione più specializzata di una
classe esistente poiché si vogliono solo aggiungere nuovi dati
membro e funzioni per estenderla. Un esempio è, immaginiamo di
avere la classe Nemico
che definisce un avversario nel gioco, la quale ha una funzione
membro Attacco() e il
dato membro m_Danno.
Da questa si vuole ricavare la classe Capo,
per un capo dei Nemici.
Questo significa che la classe Capo possiede automaticamente una
funzione Attacco() e
un dato m_Danno senza
dover scrivere del codice. Tuttavia per rendere il capo più
resistente, viene aggiunta la funzione AttaccoSpeciale()
e il membro dati Multi_Danno
alla classe Capo. Uno
dei maggiori vantaggi dell'ereditarietà è la possiiblità di
riutilizzo delle classi già scritte. Il quale si riassume nei
benefici:
- Minore lavoro. Non è necessario definire funzionalità già possedute. Una volta che una classe definisce funzioni di base per le altre classi, il codice non deve essere riscritto di nuovo.
- Meno errori. Un classe priva di bachi, può essere riutilizzata senza doverne cercare altri nel nuovo codice.
- Un codice più leggero. Poiché le funzionalità di base delle classi esistono nel programma, non si deve ripercorrere lo stesso codice più volte, rendendo la scrittura del programma più leggera e facile da comprendere.
Molte
entità nei giochi chiamano a gran voce l'ereditarietà delle classi.
Che si tratti di uno squadrone di nemici, o una serie di veicoli
comandati dall'utente, o un inventario di armi che il giocatore
possiede. Tutti possono essere definiti come un gruppo di elementi
connessi tra loro, risulta in una programmazione più veloce.
Nessun commento:
Posta un commento