CODICE 61799 ANNO ACCADEMICO 2022/2023 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: OCaml. 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 sarà in grado di 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, utilizzare 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 OCaml 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 dei liguaggi di programmazione PREREQUISITI Nozioni fondamentali di programmazione imperativa e di algoritmi e strutture dati MODALITA' DIDATTICHE Tradizionale 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 e visitor. Paradigma funzionale (linguaggio Objective Caml): 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. -Ken Arnold, James Gosling, and David Holmes. The Java Programming Language, Fourth Edition, Prentice Hall. -Emmanuel Chailloux, Pascal Manoury, and Bruno Pagano. Developing Applications With Objective Caml. -Josh Bloch. Effective Java (second edition). Prentice Hall. (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, via email Commissione d'esame DAVIDE ANCONA (Presidente) ELENA ZUCCA RICCARDO BIANCHINI (Supplente) GIOVANNI LAGORIO (Supplente) PAOLA MAGILLO (Supplente) LEZIONI Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME Esame scritto, progetto software finale e sua discussione individuale. MODALITA' DI ACCERTAMENTO Applicazione dei concetti base della programmazione object-oriented in piccolo: sviluppo di un progetto software, esercizi di comprensione e programmazione in Java da svolgere durante l'esame scritto e, se necessario, anche orale. Comprensione, uso e implementazione dei design pattern iterator e visitor: sviluppo di un progetto software, esercizi di programmazione in Java da svolgere durante l'esame scritto. Applicazione dei concetti base della programmazione funzionale e generica in piccolo: esercizi di programmazione in OCaml da svolgere durante l'esame scritto. Comprensione della specifica di un linguaggio di programmazione e delle problematiche alla base dell'implementazione dei liguaggi di programmazione: sviluppo di un progetto, 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: progetto finale in Java. Calendario appelli Data appello Orario Luogo Tipologia Note 20/06/2023 09:00 GENOVA Scritto 10/07/2023 09:00 GENOVA Scritto 20/09/2023 09:00 GENOVA Scritto 23/01/2024 09:00 GENOVA Scritto 08/02/2024 09:00 GENOVA Scritto OpenBadge PRO3 - Soft skills - Gestione progettuale base 1 - A PRO3 - Soft skills - Sociale base 1 - A