L'ereditarietà e il polimorfismo sono i concetti che permettono di sfruttare appieno la potenza dell'OOP, favorendo il riuso del codice e la flessibilità del software. Con l'ereditarietà, gli studenti imparano a creare gerarchie di classi, dove le sottoclassi ereditano e specializzano il comportamento delle superclassi. Il polimorfismo, invece, permette di trattare oggetti di tipi diversi in modo uniforme, a patto che condividano la stessa interfaccia o classe base.
Traguardi per lo Sviluppo delle CompetenzeIndicazioni Nazionali per i Licei, Informatica (Liceo Scientifico opzione Scienze Applicate), Secondo biennio: Programmazione orientata agli oggetti (OOP)Indicazioni Nazionali per i Licei, Informatica (Liceo Scientifico opzione Scienze Applicate), Secondo biennio: Algoritmi e strutture dati
Circolo di indagine: L'albero genealogico delle classi
Fornisci un set di oggetti reali (es. vari tipi di veicoli o animali). I gruppi devono costruire una gerarchia di ereditarietà, decidendo quali caratteristiche sono comuni a tutti e quali sono specifiche delle sottoclassi.
Come una classe può ereditare le caratteristiche di un'altra?
Gli studenti scrivono un programma che gestisce una lista di 'Forme Geometriche'. Usando il polimorfismo, devono far disegnare tutte le forme con un unico ciclo, chiamando lo stesso metodo 'disegna()' che si comporta diversamente per ogni forma.
Cos'è il polimorfismo e in quali scenari risulta utile?
Esponi diversi esempi di overriding di metodi. Gli studenti devono identificare quali metodi vengono eseguiti a runtime in base al tipo reale dell'oggetto, discutendo le loro previsioni con i compagni.
Come funziona il meccanismo di overriding dei metodi?
Usare l'ereditarietà solo per risparmiare righe di codice.
Gli studenti a volte fanno ereditare 'Quadrato' da 'Rettangolo' solo per i metodi, ignorando la logica 'è un'. Discussioni su casi limite aiutano a capire che l'ereditarietà deve riflettere una relazione logica reale.
Confondere Overloading con Overriding.
Molti pensano siano la stessa cosa. Esercizi di confronto visivo mostrano che l'overloading cambia la firma del metodo, mentre l'overriding cambia l'implementazione nella sottoclasse.