CODICE 61799 ANNO ACCADEMICO 2025/2026 CFU 12 cfu anno 2 INFORMATICA 8759 (L-31) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO Annuale MATERIALE DIDATTICO AULAWEB PRESENTAZIONE I linguaggi di programmazione e la programmazione funzionale e object-oriented sono strumenti e concetti alla base dello sviluppo del software. L'insegnamento fornisce le principali nozioni necessarie alla progettazione, comprensione, utilizzo, e implementazione di un linguaggio di programmazione: sintassi, sematica statica e dinamica, interpreti. Vengono inoltre approfondite le tecniche e metodologie di programmazione funzionale e object-oriented mediante l'apprendimento dei linguaggi F# e Java. L'insegnamento permette di applicare i concetti più teorici acquisiti a lezione attraverso diverse esperienze pratiche di laboratorio e lo sviluppo di un progetto finale di medie dimensioni. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Acquisire le nozioni fondamentali relative ai linguaggi di programmazione ad alto livello e una conoscenza approfondita di diversi paradigmi di programmazione (in particolare object-oriented e funzionale), dal punto di vista concettuale e operativo. Essere in grado, inoltre, di sviluppare programmi a partire da specifiche informali nell'ambito della programmazione in piccolo mediante l'utilizzo di un ambiente di sviluppo integrato. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Al termine dell'insegnamento, la studentessa/lo studente sarà in grado di: applicare i concetti base del paradigma object-oriented per modellare dati e progettare programmi in Java di piccole e medie dimensioni, organizzati modularmente per favorire il riuso e la manutenibilità del codice. Sviluppare programmi a partire da specifiche informali mediante l'utilizzo di un ambiente di sviluppo integrato e collaborativo. comprendere, applicare e implementare in modo corretto alcuni design pattern comuni della programmazione object-oriented applicare i concetti base del paradigma funzionale per sviluppare programmi in F# di piccole dimensioni basandosi sulle più comuni techiche di programmazione funzionale e generica comprendere la specifica di un linguaggio di programmazione e le problematiche alla base dell'implementazione di un interprete per un liguaggio di programmazione gestire le proprie relazioni sociali con atteggiamento collaborativo e comunicazione costruttiva in ambienti differenti, sviluppando un progetto software con l'aiuto dello strumento collaborativo GitHub Classroom. dimostrare capacità di autonomia decisionale, attitudine collaborativa, gestione di risorse umane e materiali e coordinamento durante lo sviluppo in gruppo di un progetto software. PREREQUISITI Nozioni fondamentali di programmazione imperativa e di algoritmi e strutture dati MODALITA' DIDATTICHE Lezioni frontali dedicate alla teoria, a dimostrazioni pratiche e alla discussione degli esercizi via via proposti da svolgere individualmente per l'autovalutazione dell'apprendimento. Esercitazioni di gruppo in laboratorio su programmazione in F# e Java. Svolgimento in gruppo di un progetto finale in Java. Le esercitazioni e il progetto vengono svolti utilizzando lo strumento GitHub Classroom per lo sviluppo collaborativo del software. PROGRAMMA/CONTENUTO Elementi di un linguaggio di programmazione: generalità, diversi paradigmi; sintassi, semantica statica e dinamica, sviluppo di un interprete guidato dalla semantica formale. Paradigma object oriented (linguaggio Java): oggetti, classi, interfacce, ereditarietà e dispatch dinamico dei metodi, casting, overloading, eccezioni. Caratteristiche avanzate: classi e metodi generici, cenni alla programmazione funzionale in Java. Esempi d'uso dell'API standard, design pattern iterator, decorator e visitor. Paradigma funzionale (linguaggio F#): funzioni di ordine superiore e polimorfe, inferenza di tipi polimorfi, currying, funzioni su liste, ricorsione di coda e parametri di accumulazione, tipi user-defined. TESTI/BIBLIOGRAFIA Davide Ancona, Giovanni Lagorio, Elena Zucca. Linguaggi di Programmazione. Città Studi Edizioni Raymond Gallardo, Scott Hommel, Sowmya Kannan, Joni Gordon, Sharon Biocca Zakhour. The Java Tutorial: A Short Course on the Basics (Sixth Edition), Oracle (limitatamente alla versione 8 di Java) Documentazione e riferimenti a libri su F# sono disponibili sul sito Web 'Learning F#' Joshua Bloch. Effective Java (third edition). Addison-Wesley Professional (approfondimento) Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. (approfondimento) DOCENTI E COMMISSIONI DAVIDE ANCONA Ricevimento: Su appuntamento tramite email o Teams FRANCESCO DAGNINO LEZIONI INIZIO LEZIONI In accordo con il calendario didattico approvato dal Consiglio dei Corsi di Studio in Informatica Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME Esame scritto, progetto software finale in Java, colloquio individuale sul progetto. MODALITA' DI ACCERTAMENTO Apprendimento e capacità di applicazione dei concetti base della programmazione object-oriented: sviluppo del progetto software finale e corrispondente colloquio individuale; esercizi di comprensione e programmazione in Java da svolgere durante l'esame scritto. Comprensione, uso e implementazione dei design pattern iterator, decorator e visitor: sviluppo del progetto software finale e corrispondente colloquio individuale; esercizi di programmazione in Java da svolgere durante l'esame scritto. Apprendimento e applicazione dei concetti base della programmazione funzionale: esercizi di programmazione in F# da svolgere durante l'esame scritto. Comprensione della specifica di un linguaggio di programmazione e delle problematiche alla base dell'implementazione di interpreti di liguaggi di programmazione: sviluppo del progetto software finale e corrispondente colloquio finale; esercizi su espressioni regolari e grammatiche context free da svolgere durante l'esame scritto. Capacità di collaborare all'interno di un team di sviluppo software per implementare un progetto di un migliaio di linee di codice; capacità di interazione con gli altri componenti del team e con i docenti: sviluppo del progetto software finale con l'aiuto dello strumento collaborativo GitHub e corrispondente colloquio finale. OpenBadge PRO3 - Soft skills - Gestione progettuale base 1 - A PRO3 - Soft skills - Sociale base 1 - A