Salta al contenuto principale
CODICE 61799
ANNO ACCADEMICO 2019/2020
CFU
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

- Basandosi sulle conoscenze di programmazione imperativa acquisite dallo studente nei corsi precedenti, fornire allo studente le nozioni fondamentali relative ai linguaggi di programmazione ad alto livello e un buon livello di conoscenza di diversi paradigmi di programmazione (in particolare object-oriented e funzionale), dal punto di vista sia concettuale che operativo. - Presentare e far sperimentare lo sviluppo di programmi a partire da specifiche informali nell'ambito della programmazione in piccolo, e mediante l'utilizzo di un ambiente di sviluppo integrato, estendendo quanto visto nel corso di Introduzione alla Programmazione.

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
  • comprendere la specifica di un linguaggio di programmazione e le problematiche alla base dell'implementazione dei liguaggi di programmazione

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, 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, 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

Commissione d'esame

DAVIDE ANCONA (Presidente)

PIETRO BARBIERI

GIOVANNI LAGORIO

PAOLA MAGILLO

ELENA ZUCCA

LEZIONI

Orari delle lezioni

L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy

ESAMI

MODALITA' D'ESAME

Esame scritto e orale, progetto software finale

MODALITA' DI ACCERTAMENTO

Applicazione dei concetti base del paradigma object-oriented nell'ambito della programmazione 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 e, se necessario, anche orale.

Applicazione dei concetti base del paradigma funzionale nell'ambito della programmazione in piccolo: esrcizi di programmazione in OCaml da svolgere durante l'esame scritto e, se necessario, anche orale. 

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 e, se necessario, anche orale. 

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
23/01/2020 09:00 GENOVA Scritto
04/06/2020 09:00 GENOVA Scritto
17/06/2020 09:00 GENOVA Scritto
08/07/2020 09:00 GENOVA Scritto
09/09/2020 09:00 GENOVA Scritto
21/01/2021 09:00 GENOVA Scritto

ALTRE INFORMAZIONI

Prerequisiti: nozioni fondamentali di programmazione imperativa e di algoritmi e strutture dati.