L'obiettivo principale del corso consiste nel rendere gli studenti in grado di programmare in linguaggi orientati agli oggetti. Inoltre, il corso illustrerà i principi di base della programmazione funzionale e dell’implementazione dei linguaggi. Le principali conoscenze acquisite saranno: - principi di base della programmazione orientata agli oggetti - tecniche di programmazione ad oggetti - il linguaggio di programmazione Java - basi delle potenzialità grafiche del linguaggio Java - cenni di programmazione funzionale - implementazione dei linguaggi di programmazione Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno: - analisi e soluzione di problemi di crescente complessità mediante codice ad oggetti in Java - comprensione di semplici algoritmi in programmazione funzionale
Prerequisiti
E’ necessario avere acquisito e assimilato le seguenti conoscenze: - principi della programmazione strutturata - linguaggio C - semplici strutture di dati - algoritmi di base
Metodi didattici
Il corso prevede 72 ore di lezione più tutorato. Le lezioni riguardano gli argomenti del corso e includono anche semplici prove al calcolatore da parte degli studenti. Le lezioni saranno trasmesse in streaming e registrate.
Verifica Apprendimento
L'esame consiste di tre prove. La prima consiste nella scrittura di un programma, in Java che legga dati da file di testo e li elabori. Il programma deve essere scritti al calcolatore. Inoltre, la prova include un esercizio di programmazione funzionale in Java. La seconda prova consiste di una domanda a risposta aperta scritta sull’implementazione dei linguaggi. La terza prova consiste nello sviluppo di un’applicazione a casa per la gestione di una piccola base di dati secondo una specifica fornita dal docente o proposta dallo studente. L’elaborato deve essere mostrato al docente in funzione su un portatile. La valutazione è di tipo “si/no”: se l’elaborato rispetta i requisiti e funziona è “sì”. La prima prova dura due ore. Vale 29 punti. La seconda prova dura 10 minuti e vale 3 punti. Il voto finale è dato dalla somma dei voti nelle prime due prove. L’esame è superato se il voto finale è almeno 18 e l’elaborato ha ricevuto valutazione sì. E' consentito usare materiale didattico eccetto che per la domanda sull’implementazione dei linguaggi. Il codice del programma della prima prova deve poter essere compilato senza errori, altrimenti il compito non verrà corretto. L’esame può essere sostenuto anche mediante due esami parziali, il primo consistente nella prima prova, il secondo nella seconda e terza prova alla fine del corso.
Testi
I testi di riferimento sono - dispense del docente - Walter Savitch, Programmazione di base e avanzata con Java - 3/Ed, Pearson, 2024 - M. Gabbrielli, S. Martini, Linguaggi di programmazione. Principi e paradigmi 2a edizione McGraw-Hill, 2011
Contenuti
Introduzione alla programmazione orientata agli oggetti (OOP) (10 ore): OOP classica, OOP in Java, oggetti composti, package, stringhe, array, wrapper, IDE. OOP in Java (14 ore): Ereditarietà, subtyping, polimorfismo, la classe Object, classi astratte e interfacce, eccezioni, input/output. Java Collection Framework (JCF) (12 ore): JCF, generici, JCF con generici. Programmazione funzionale con Java (12 ore): espressioni lambda, Stream API. Sviluppo di applicazioni in Java (18 ore): strumenti di sviluppo, Junit, Javadoc, Copilot, JavaFX, modello ad eventi, esempio di sviluppo di una applicazione Java Implementazione dei linguaggi (6 ore): regole di scope, gestione della memoria, linguaggi imperativi e dichiarativi, comandi, programmazione strutturata, ricorsione e ricorsione tail, funzioni di prima classe, garbage collector, implementazione degli oggetti