La definizione di classi e la creazione di oggetti costituiscono il cuore operativo della programmazione moderna. In questa fase, gli studenti imparano a tradurre i modelli concettuali in codice eseguibile, definendo la struttura (attributi) e le funzionalità (metodi) delle loro entità software. Particolare attenzione viene data ai costruttori, strumenti essenziali per garantire che ogni oggetto nasca in uno stato coerente e valido.
Traguardi per lo Sviluppo delle CompetenzeIndicazioni Nazionali, Liceo Scientifico opzione Scienze Applicate, Informatica, Secondo biennio: Elementi fondamentali della programmazione orientata agli oggetti (classi, oggetti, metodi)Indicazioni Nazionali, Liceo Scientifico opzione Scienze Applicate, Informatica, Secondo biennio: Sviluppo di progetti software modulari
Rotazione a stazioni: Il Ciclo di Vita dell'Oggetto
Tre stazioni: nella prima si scrivono i costruttori per diversi scenari; nella seconda si implementano i metodi getter e setter; nella terza si scrivono test per istanziare gli oggetti. I gruppi ruotano ogni 15 minuti per completare l'intero processo di sviluppo.
Gli studenti lavorano in coppia: uno scrive un metodo con un errore logico intenzionale (es. un setter che non valida i dati) e l'altro deve individuarlo, correggerlo e spiegare perché la soluzione proposta è più robusta.
La classe deve progettare un sistema per una biblioteca. Ogni gruppo si occupa di una classe specifica (Libro, Utente, Prestito). Alla fine, devono integrare le classi assicurandosi che i metodi di una possano interagire correttamente con gli oggetti dell'altra.
Dimenticare di inizializzare gli attributi nel costruttore.
Molti studenti lasciano gli attributi al valore di default, causando errori a runtime. L'uso di attività pratiche di testing immediato aiuta a capire che il costruttore è il 'certificato di nascita' dell'oggetto e deve garantirne la validità.
Usare i metodi solo per stampare a video i risultati.
Gli studenti spesso confondono la logica applicativa con l'output. Bisogna insegnare che i metodi devono restituire valori o modificare lo stato, lasciando la visualizzazione a parti specifiche del programma. Il confronto tra pari su diversi design del codice chiarisce questa distinzione.