Programmazione Orientata agli Oggetti

Codice: 20810075

Scheda insegnamento

Anno Accademico di erogazione
2026/2027
Periodo di erogazione
Secondo semestre
CFU
9 CFU
Lingua
Italiano
SSD
ING-INF/05

Scopri il programma didattico

Programma, testi adottati e modalità d’esame sono quelli pubblicati dai docenti per l’anno accademico 2026/2027. L’insegnamento è diviso in canali: ogni canale ha il suo programma.

Curriculum
Sistemi informatici
Anno di corso
2
Periodo
Secondo semestre
Ore
81
CUIN
260002587

Programma

Programma
Il corso si articola in sette parti, svolte in quest'ordine nel semestre; ogni parte comprende lezioni ed esercizi di verifica al calcolatore.

Parte 1: Il Paradigma Orientato agli Oggetti

Il linguaggio di programmazione Java

Classi e Oggetti

Costruttori

Information Hiding

Parte 2: Qualità del codice

Coesione e accoppiamento

Testing

Parte 3: Polimorfismo

Interfacce

Principio di sostituzione, polimorfismo

Ereditarietà

Parte 4: Collezioni

Generics

Mappe, insiemi, liste

Iteratori

Parte 5: Riuso del codice

Ereditarietà: approfondimenti

Classi astratte

Tipi enumerati

Classi nidificate

Java Record

Tipi sealed

Parte 6: stream, eccezioni, riflessione, annotazioni

Gestione delle Eccezioni

Stream

Riflessione

Annotazioni

Parte 7: Introduzione alla programmazione concorrente

Java Thread, definizione, creazione, terminazione

Interferenza

Speed-up e problemi di decomposizione parallela

Un modello multi-thread per le applicazioni grafiche

Prerequisiti

Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.

Testi adottati

Claudio De Sio Cesari , Programmazione Java, Hoepli

Bibliografia di riferimento

Dispense del docente, esercizi di verifica, studio di caso e testi d'esame degli anni precedenti, pubblicati sul sito del corso (sites.google.com/view/rm3-poo). Il materiale è lo stesso per frequentanti e non frequentanti.

Modalità di erogazione

Lezioni frontali in aula (tre a settimana), con esempi di codice ed esercizi di verifica da svolgere al calcolatore. Uno studio di caso accompagna il corso e viene esteso progressivamente. Sono previsti homework da svolgere in coppia e prove in itinere a quiz in laboratorio. Esercizi di autovalutazione sono disponibili tutto l'anno sul sistema di quiz usato anche all'esame.

Modalità di frequenza

La frequenza non è obbligatoria. Le lezioni si tengono in presenza, tre volte a settimana. Il percorso HQ richiede di partecipare alle prove in itinere in laboratorio e di consegnare gli homework nei tempi indicati.

Modalità di valutazione

L'esame si compone di due prove individuali, svolte al calcolatore nel laboratorio didattico, senza poter consultare alcun materiale. Per superare l'esame occorre la sufficienza in entrambe le prove; alla seconda prova si accede solo superando la prima.
- Prima prova (peso circa 12/31, durata circa un'ora): quiz a risposta chiusa ed esercizi di programmazione corretti automaticamente con il sistema di quiz del corso. I quiz sono ispirati agli esercizi di verifica pubblicati sul sito del corso, sul quale ci si può esercitare con lo stesso sistema.
- Seconda prova (peso circa 19/31, durata circa un'ora e mezza): esercizi di ristrutturazione di codice, progettazione e implementazione di piccole applicazioni e scrittura di casi di test, svolti con l'ambiente di sviluppo Eclipse.
In alternativa alla prima prova, durante il corso si può seguire il percorso HQ (homework e quiz): tre prove in itinere a quiz, svolte con le stesse modalità della prima prova, e alcuni homework in coppia da consegnare nei tempi indicati. Chi ottiene la sufficienza in tutte le prove in itinere e consegna tutti gli homework accede direttamente alla seconda prova; il punteggio della prima prova è allora 1 + (punteggio ottenuto / punteggio massimo) × 12.
Il voto finale è la somma dei punteggi delle due prove. Nella seconda prova si valutano la correttezza e la completezza delle soluzioni, la qualità del codice (leggibilità, coesione, accoppiamento, uso appropriato del linguaggio) e l'adeguatezza dei casi di test. I testi d'esame degli anni precedenti, dal 2019, sono disponibili sul sito del corso.

Prove previste

  • Prova pratica
  • Prove intermedie

Curriculum
Gestionale
Anno di corso
2
Periodo
Secondo semestre
Ore
81
CUIN
260002595

Programma

Programma
Il corso si articola in sette parti, svolte in quest'ordine nel semestre; ogni parte comprende lezioni ed esercizi di verifica al calcolatore.

Parte 1: Il Paradigma Orientato agli Oggetti

Il linguaggio di programmazione Java

Classi e Oggetti

Costruttori

Information Hiding

Parte 2: Qualità del codice

Coesione e accoppiamento

Testing

Parte 3: Polimorfismo

Interfacce

Principio di sostituzione, polimorfismo

Ereditarietà

Parte 4: Collezioni

Generics

Mappe, insiemi, liste

Iteratori

Parte 5: Riuso del codice

Ereditarietà: approfondimenti

Classi astratte

Tipi enumerati

Classi nidificate

Java Record

Tipi sealed

Parte 6: stream, eccezioni, riflessione, annotazioni

Gestione delle Eccezioni

Stream

Riflessione

Annotazioni

Parte 7: Introduzione alla programmazione concorrente

Java Thread, definizione, creazione, terminazione

Interferenza

Speed-up e problemi di decomposizione parallela

Un modello multi-thread per le applicazioni grafiche

Prerequisiti

Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.

Testi adottati

Claudio De Sio Cesari , Programmazione Java, Hoepli

Bibliografia di riferimento

Dispense del docente, esercizi di verifica, studio di caso e testi d'esame degli anni precedenti, pubblicati sul sito del corso (sites.google.com/view/rm3-poo). Il materiale è lo stesso per frequentanti e non frequentanti.

Modalità di erogazione

Lezioni frontali in aula (tre a settimana), con esempi di codice ed esercizi di verifica da svolgere al calcolatore. Uno studio di caso accompagna il corso e viene esteso progressivamente. Sono previsti homework da svolgere in coppia e prove in itinere a quiz in laboratorio. Esercizi di autovalutazione sono disponibili tutto l'anno sul sistema di quiz usato anche all'esame.

Modalità di frequenza

La frequenza non è obbligatoria. Le lezioni si tengono in presenza, tre volte a settimana. Il percorso HQ richiede di partecipare alle prove in itinere in laboratorio e di consegnare gli homework nei tempi indicati.

Modalità di valutazione

L'esame si compone di due prove individuali, svolte al calcolatore nel laboratorio didattico, senza poter consultare alcun materiale. Per superare l'esame occorre la sufficienza in entrambe le prove; alla seconda prova si accede solo superando la prima.
- Prima prova (peso circa 12/31, durata circa un'ora): quiz a risposta chiusa ed esercizi di programmazione corretti automaticamente con il sistema di quiz del corso. I quiz sono ispirati agli esercizi di verifica pubblicati sul sito del corso, sul quale ci si può esercitare con lo stesso sistema.
- Seconda prova (peso circa 19/31, durata circa un'ora e mezza): esercizi di ristrutturazione di codice, progettazione e implementazione di piccole applicazioni e scrittura di casi di test, svolti con l'ambiente di sviluppo Eclipse.
In alternativa alla prima prova, durante il corso si può seguire il percorso HQ (homework e quiz): tre prove in itinere a quiz, svolte con le stesse modalità della prima prova, e alcuni homework in coppia da consegnare nei tempi indicati. Chi ottiene la sufficienza in tutte le prove in itinere e consegna tutti gli homework accede direttamente alla seconda prova; il punteggio della prima prova è allora 1 + (punteggio ottenuto / punteggio massimo) × 12.
Il voto finale è la somma dei punteggi delle due prove. Nella seconda prova si valutano la correttezza e la completezza delle soluzioni, la qualità del codice (leggibilità, coesione, accoppiamento, uso appropriato del linguaggio) e l'adeguatezza dei casi di test. I testi d'esame degli anni precedenti, dal 2019, sono disponibili sul sito del corso.

Prove previste

  • Prova pratica
  • Prove intermedie

Curriculum
Intelligenza Artificiale e Machine Learning
Anno di corso
2
Periodo
Secondo semestre
Ore
81
CUIN
260002611

Programma

Programma
Il corso si articola in sette parti, svolte in quest'ordine nel semestre; ogni parte comprende lezioni ed esercizi di verifica al calcolatore.

Parte 1: Il Paradigma Orientato agli Oggetti

Il linguaggio di programmazione Java

Classi e Oggetti

Costruttori

Information Hiding

Parte 2: Qualità del codice

Coesione e accoppiamento

Testing

Parte 3: Polimorfismo

Interfacce

Principio di sostituzione, polimorfismo

Ereditarietà

Parte 4: Collezioni

Generics

Mappe, insiemi, liste

Iteratori

Parte 5: Riuso del codice

Ereditarietà: approfondimenti

Classi astratte

Tipi enumerati

Classi nidificate

Java Record

Tipi sealed

Parte 6: stream, eccezioni, riflessione, annotazioni

Gestione delle Eccezioni

Stream

Riflessione

Annotazioni

Parte 7: Introduzione alla programmazione concorrente

Java Thread, definizione, creazione, terminazione

Interferenza

Speed-up e problemi di decomposizione parallela

Un modello multi-thread per le applicazioni grafiche

Prerequisiti

Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.

Testi adottati

Claudio De Sio Cesari , Programmazione Java, Hoepli

Bibliografia di riferimento

Dispense del docente, esercizi di verifica, studio di caso e testi d'esame degli anni precedenti, pubblicati sul sito del corso (sites.google.com/view/rm3-poo). Il materiale è lo stesso per frequentanti e non frequentanti.

Modalità di erogazione

Lezioni frontali in aula (tre a settimana), con esempi di codice ed esercizi di verifica da svolgere al calcolatore. Uno studio di caso accompagna il corso e viene esteso progressivamente. Sono previsti homework da svolgere in coppia e prove in itinere a quiz in laboratorio. Esercizi di autovalutazione sono disponibili tutto l'anno sul sistema di quiz usato anche all'esame.

Modalità di frequenza

La frequenza non è obbligatoria. Le lezioni si tengono in presenza, tre volte a settimana. Il percorso HQ richiede di partecipare alle prove in itinere in laboratorio e di consegnare gli homework nei tempi indicati.

Modalità di valutazione

L'esame si compone di due prove individuali, svolte al calcolatore nel laboratorio didattico, senza poter consultare alcun materiale. Per superare l'esame occorre la sufficienza in entrambe le prove; alla seconda prova si accede solo superando la prima.
- Prima prova (peso circa 12/31, durata circa un'ora): quiz a risposta chiusa ed esercizi di programmazione corretti automaticamente con il sistema di quiz del corso. I quiz sono ispirati agli esercizi di verifica pubblicati sul sito del corso, sul quale ci si può esercitare con lo stesso sistema.
- Seconda prova (peso circa 19/31, durata circa un'ora e mezza): esercizi di ristrutturazione di codice, progettazione e implementazione di piccole applicazioni e scrittura di casi di test, svolti con l'ambiente di sviluppo Eclipse.
In alternativa alla prima prova, durante il corso si può seguire il percorso HQ (homework e quiz): tre prove in itinere a quiz, svolte con le stesse modalità della prima prova, e alcuni homework in coppia da consegnare nei tempi indicati. Chi ottiene la sufficienza in tutte le prove in itinere e consegna tutti gli homework accede direttamente alla seconda prova; il punteggio della prima prova è allora 1 + (punteggio ottenuto / punteggio massimo) × 12.
Il voto finale è la somma dei punteggi delle due prove. Nella seconda prova si valutano la correttezza e la completezza delle soluzioni, la qualità del codice (leggibilità, coesione, accoppiamento, uso appropriato del linguaggio) e l'adeguatezza dei casi di test. I testi d'esame degli anni precedenti, dal 2019, sono disponibili sul sito del corso.

Prove previste

  • Prova pratica
  • Prove intermedie

Esplora gli obiettivi dell’insegnamento

Ambito disciplinare: Ingegneria informatica

Presentare gli aspetti fondamentali della programmazione orientata agli oggetti, con una enfasi sui concetti di modularizzazione e di riuso del codice e gli aspetti avanzati del paradigma di programmazione orientato agli oggetti. Lo studente che abbia superato il corso dovrà essere in grado di scrivere autonomamente componenti (classi e moduli) per lo sviluppo di applicazioni software di media complessità, nonché partecipare al progetto e alla realizzazione di applicazioni software di grande complessità.

Risultati di apprendimento attesi — Valter Crescenzi

1) Conoscenza e capacità di comprensione. Al termine dell'insegnamento lo studente conosce i concetti fondamentali del paradigma orientato agli oggetti (classi, oggetti, riferimenti, information hiding, interfacce, polimorfismo, ereditarietà) e i principali costrutti del linguaggio Java, comprese le collezioni, i tipi generici, le eccezioni, gli stream e le basi della programmazione concorrente; sa descriverli e distinguerli, estendendo le nozioni di programmazione imperativa apprese in Fondamenti di informatica.

2) Capacità di applicare conoscenza e comprensione. Lo studente sa progettare, implementare e collaudare in Java piccole applicazioni di media complessità, sa ristrutturare codice esistente per migliorarne la qualità (coesione, accoppiamento) e sa scrivere casi di test.

3) Autonomia di giudizio. Attraverso gli esercizi di verifica, gli homework e lo studio di caso, lo studente sa valutare la qualità di una soluzione e confrontare progetti alternativi dello stesso programma.

4) Abilità comunicative. Attraverso gli homework svolti in coppia, lo studente sa discutere scelte di progetto e documentare il codice con un lessico tecnico appropriato.

5) Capacità di apprendimento. Lo studente sa approfondire in autonomia librerie e funzionalità del linguaggio Java consultandone la documentazione, e sa usare un ambiente di sviluppo integrato (Eclipse) per sviluppare e collaudare il proprio codice.

Risultati di apprendimento attesi — Valter Crescenzi

1) Conoscenza e capacità di comprensione. Al termine dell'insegnamento lo studente conosce i concetti fondamentali del paradigma orientato agli oggetti (classi, oggetti, riferimenti, information hiding, interfacce, polimorfismo, ereditarietà) e i principali costrutti del linguaggio Java, comprese le collezioni, i tipi generici, le eccezioni, gli stream e le basi della programmazione concorrente; sa descriverli e distinguerli, estendendo le nozioni di programmazione imperativa apprese in Fondamenti di informatica.

2) Capacità di applicare conoscenza e comprensione. Lo studente sa progettare, implementare e collaudare in Java piccole applicazioni di media complessità, sa ristrutturare codice esistente per migliorarne la qualità (coesione, accoppiamento) e sa scrivere casi di test.

3) Autonomia di giudizio. Attraverso gli esercizi di verifica, gli homework e lo studio di caso, lo studente sa valutare la qualità di una soluzione e confrontare progetti alternativi dello stesso programma.

4) Abilità comunicative. Attraverso gli homework svolti in coppia, lo studente sa discutere scelte di progetto e documentare il codice con un lessico tecnico appropriato.

5) Capacità di apprendimento. Lo studente sa approfondire in autonomia librerie e funzionalità del linguaggio Java consultandone la documentazione, e sa usare un ambiente di sviluppo integrato (Eclipse) per sviluppare e collaudare il proprio codice.

Risultati di apprendimento attesi — Valter Crescenzi

1) Conoscenza e capacità di comprensione. Al termine dell'insegnamento lo studente conosce i concetti fondamentali del paradigma orientato agli oggetti (classi, oggetti, riferimenti, information hiding, interfacce, polimorfismo, ereditarietà) e i principali costrutti del linguaggio Java, comprese le collezioni, i tipi generici, le eccezioni, gli stream e le basi della programmazione concorrente; sa descriverli e distinguerli, estendendo le nozioni di programmazione imperativa apprese in Fondamenti di informatica.

2) Capacità di applicare conoscenza e comprensione. Lo studente sa progettare, implementare e collaudare in Java piccole applicazioni di media complessità, sa ristrutturare codice esistente per migliorarne la qualità (coesione, accoppiamento) e sa scrivere casi di test.

3) Autonomia di giudizio. Attraverso gli esercizi di verifica, gli homework e lo studio di caso, lo studente sa valutare la qualità di una soluzione e confrontare progetti alternativi dello stesso programma.

4) Abilità comunicative. Attraverso gli homework svolti in coppia, lo studente sa discutere scelte di progetto e documentare il codice con un lessico tecnico appropriato.

5) Capacità di apprendimento. Lo studente sa approfondire in autonomia librerie e funzionalità del linguaggio Java consultandone la documentazione, e sa usare un ambiente di sviluppo integrato (Eclipse) per sviluppare e collaudare il proprio codice.

Esempi di domande d’esame

Valter Crescenzi

Dato un insieme di oggetti con certe proprietà, calcolare una mappa che raggruppa tali oggetti per i valori di una di tale proprietà.

Scrivere dei test di unità minimali per dimostrarne la correttezza.

Prima prova: dato un frammento di codice con interfacce e classi che le implementano, indicare quale metodo viene invocato e che cosa stampa il programma.

Seconda prova: ristrutturare una classe poco coesa separandone le responsabilità; scrivere i casi di test JUnit per un metodo dato.

Valter Crescenzi

Dato un insieme di oggetti con certe proprietà, calcolare una mappa che raggruppa tali oggetti per i valori di una di tale proprietà.

Scrivere dei test di unità minimali per dimostrarne la correttezza.

Prima prova: dato un frammento di codice con interfacce e classi che le implementano, indicare quale metodo viene invocato e che cosa stampa il programma.

Seconda prova: ristrutturare una classe poco coesa separandone le responsabilità; scrivere i casi di test JUnit per un metodo dato.

Valter Crescenzi

Dato un insieme di oggetti con certe proprietà, calcolare una mappa che raggruppa tali oggetti per i valori di una di tale proprietà.

Scrivere dei test di unità minimali per dimostrarne la correttezza.

Prima prova: dato un frammento di codice con interfacce e classi che le implementano, indicare quale metodo viene invocato e che cosa stampa il programma.

Seconda prova: ristrutturare una classe poco coesa separandone le responsabilità; scrivere i casi di test JUnit per un metodo dato.

Il corso in cui è erogato questo insegnamento

API