Salta al contenuto principale
CODICE 61799
ANNO ACCADEMICO 2023/2024
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: 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.

DOCENTI E COMMISSIONI

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 - Gestione progettuale base 1 - A
 PRO3 - Soft skills - Sociale base 1 - A
PRO3 - Soft skills - Sociale base 1 - A