Ereditarietà e polimorfismo rappresentano i concetti più avanzati e potenti della OOP nel programma di terza liceo. L'ereditarietà permette di stabilire gerarchie tra classi, promuovendo il riutilizzo del codice e la specializzazione delle funzioni. Il polimorfismo, d'altra parte, introduce la capacità di trattare oggetti di tipi diversi attraverso un'interfaccia comune, rendendo il software estremamente flessibile e scalabile.
Traguardi per lo Sviluppo delle CompetenzeIndicazioni Nazionali, Liceo Scientifico opzione Scienze Applicate, Informatica, Secondo biennio: Concetti avanzati della programmazione orientata agli oggetti (ereditarietà e polimorfismo)Indicazioni Nazionali, Liceo Scientifico opzione Scienze Applicate, Informatica, Secondo biennio: Risoluzione di problemi complessi mediante scomposizione e astrazione
Dibattito regolamentato: Composizione vs Ereditarietà
La classe viene divisa in due squadre. Una deve sostenere l'uso dell'ereditarietà per risolvere un problema di design software, l'altra deve proporre la composizione (oggetti dentro oggetti). Devono argomentare basandosi su flessibilità e manutenibilità.
Come l'ereditarietà favorisce il riuso del codice?
Ogni gruppo disegna su un cartellone una gerarchia di classi per un videogioco (es. Personaggi, Nemici, Potenziamenti). I gruppi circolano nella stanza lasciando feedback con post-it su dove l'ereditarietà è usata bene o dove il polimorfismo potrebbe semplificare il codice.
Gli studenti devono implementare un sistema di disegno geometrico dove una lista contiene diversi tipi di forme (Cerchi, Quadrati). Devono usare il polimorfismo per calcolare l'area totale della lista chiamando lo stesso metodo su oggetti diversi.
Usare l'ereditarietà solo per risparmiare di scrivere codice.
L'ereditarietà deve rappresentare una relazione di tipo 'è un' (is-a). Se usata solo per pigrizia, crea gerarchie fragili. Discussioni su casi reali aiutano a capire quando è meglio usare l'ereditarietà e quando altri pattern.
Confondere Overloading e Overriding.
L'overloading riguarda metodi con lo stesso nome ma parametri diversi nella stessa classe; l'overriding riguarda la ridefinizione di un metodo della superclasse. Esercizi di peer-coding focalizzati sulla firma dei metodi chiariscono rapidamente la differenza.