Programmazione ii

A.A. 2023/2024
6
Crediti massimi
56
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento, che si colloca nel percorso ideale iniziato dall'insegnamento di "Programmazione" e che proseguirà nell'insegnamento di "Ingegneria del software", ha l'obiettivo di presentare alcune astrazioni e concetti utili al progetto, sviluppo e manutenzione di programmi di grandi dimensioni. L'attenzione è focalizzata sul paradigma orientato agli oggetti, con particolare enfasi riguardo al processo di specificazione, modellazione dei tipi di dato e progetto.
Risultati apprendimento attesi
Lo studente deve essere in grado di applicare i concetti, le tecniche e gli strumenti illustrati nell'insegnamento alla costruzione di programmi di medie dimensioni, che coinvolgano un numero non trascurabile di tipi di dato, tra loro opportunamente organizzati. Lo studente dovrà inoltre mostrare di comprendere e saper discutere in modo chiaro e con proprietà di linguaggio le soluzioni adottate in tale processo e le loro eventuali criticità, ponendole a confronto con altre soluzioni possibili.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Primo semestre

Programma
L'insegnamento è incentrato attorno alle tematiche del progetto, realizzazione ed analisi di programmi secondo il paradigma object oriented. A tal fine l'insegnamento prevede sia una trattazione più astratta e principiata dell'argomento, che una presentazione più pratica e concreta, svolta attraverso esempi basati sul linguaggio di programmazione Java.

Riguardo ai principi, sono introdotti e discussi:

* l'uso di astrazioni di vario livello (come i metodi, i tipi di dato astratti, l'iterazione esterna, l'estensione e delega),

* alcuni strumenti concettuali per ragionare su tali astrazioni (come l'invariante di rappresentazione, la funzione di astrazione, le pre-/post-condizioni, gli effetti collaterali, l'induzione sui tipi di dato ),

* alcuni criteri di valutazione della qualità del progetto di codice object oriented (come l'incapsulamento, il data hiding, la manutenibilità, il riuso e l'estendibilità),

* alcune tecniche di verifica (come i test unitari) e di debugging.

Riguardo al linguaggio Java, sono presentati i seguenti aspetti del lignuaggio:

* costrutti di controllo del flusso (sequenza, iterazione e selezione),

* tipi di dati elementari,

* funzioni (metodi statici),

* classi (concrete, astratte ed interne),

* interfacce (con metodi di default),

* ereditariertà e polimorfismo,

* tipi generici (uso e cenni alla progettazione e realizzazione, vincoli di tipo e wildcard).
Prerequisiti
Di seguito sono elencate alcune conoscenze preliminari che è bene aver acquisito in modo solido prima di apprestarsi a seguire le lezioni:

* programmazione [l'insegnamento "Programmazione" è formalmente propedeutico],

* tecniche di dimostrazione di base [dagli insegnamenti di "Matematica del discreto" e/o "Logica matematica"];

* aspetti elementari dei linguaggi formali [dall'insegnamento "Linguaggi formali e automi"].
Metodi didattici
Lezioni frontali ed esercitazioni. Si consiglia la frequenza.
Materiale di riferimento
I libri di testo (ossia il cui uso non è facoltativo) dell'insegnamento sono:

* Barbara H. Liskov, John Vogel Guttag (2000) Program Development in Java: Abstraction, Specification, and Object-Oriented Design Addison-Wesley Professional,

* Joshua Bloch (2017), Effective Java, Addison-Wesley Professional.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'insegnamento non prevede prove in itinere. La prova finale è costituita da un progetto, da svolgere individualmente, che verte sulla progettazione e sviluppo di un software secondo delle specifiche assegnate seguito da un colloquio orale. Attraverso tali prove il candidato deve dimostrare:

* la conoscenza delle definizioni e delle nozioni fondamentali riguardo agli aspetti di orientazione agli oggetti e programmazione,

* la capacità di applicare tale conoscenza a un semplice caso concreto tramite lo sviluppo di frammenti di codice.
INF/01 - INFORMATICA - CFU: 6
Esercitazioni: 24 ore
Lezioni: 32 ore
Docente: Santini Massimo
Docente/i
Ricevimento:
https://santini.di.unimi.it/d/ricevimento
stanza 5007, V piano, via Celoria, 18