Salta al contenuto principale
CODICE 61799
ANNO ACCADEMICO 2025/2026
CFU
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.

DOCENTI E COMMISSIONI

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