Salta al contenuto principale
CODICE 61799
ANNO ACCADEMICO 2024/2025
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, lo studente/la studentessa 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, 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)

ELENA ZUCCA SCHILLANI

FRANCESCO DAGNINO (Presidente Supplente)

GIOVANNI LAGORIO (Supplente)

PAOLA MAGILLO (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.

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.

Calendario appelli

Data appello Orario Luogo Tipologia Note
15/01/2025 09:00 GENOVA Scritto
06/02/2025 09:00 GENOVA Scritto
20/06/2025 09:00 GENOVA Scritto
09/07/2025 09:00 GENOVA Scritto
10/09/2025 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