CODICE 61799 ANNO ACCADEMICO 2023/2024 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 Elementi di un linguaggio di programmazione: sintassi, sematica statica e dinamica, interpreti. Programmazione funzionale: F#. Programmazione object-oriented: Java. 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, lo studente saprà applicare i concetti base del paradigma object-oriented nell'ambito della programmazione in piccolo per modellare dati e sviluppare codice in Java organizzato modularmente per favorirne il riuso comprendere, applicare e implementare in modo corretto alcuni design pattern comuni della programmazione object-oriented applicare i concetti base del paradigma funzionale nell'ambito della programmazione in piccolo per sviluppare codice in F# 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 binding dinamico, casting, overloading, eccezioni. Caratteristiche avanzate: classi e metodi generici. 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 Commissione d'esame DAVIDE ANCONA (Presidente) GIOVANNI LAGORIO ELENA ZUCCA SCHILLANI FRANCESCO DAGNINO (Presidente Supplente) RICCARDO BIANCHINI (Supplente) 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. Comprensione della specifica formale di un linguaggio di programmazione e tecniche di implementazione object-oriented di un interprete: sviluppo del progetto software finale e corrispondente colloquio finale. 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 e corrispondente colloquio finale. Calendario appelli Data appello Orario Luogo Tipologia Note 23/01/2024 09:00 GENOVA Scritto 08/02/2024 09:00 GENOVA Scritto 21/06/2024 09:00 GENOVA Scritto 17/07/2024 09:00 GENOVA Scritto 10/09/2024 09:00 GENOVA Scritto OpenBadge PRO3 - Soft skills - Gestione progettuale base 1 - A PRO3 - Soft skills - Sociale base 1 - A