Ingegneria Informatica e dell'Intelligenza Artificiale
Cod 198289
- Laurea triennale
- 3 anni
- 180 CFU
- L-8 R
Codice: 20810075
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.
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
Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.
Claudio De Sio Cesari , Programmazione Java, Hoepli
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.
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.
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.
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.
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
Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.
Claudio De Sio Cesari , Programmazione Java, Hoepli
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.
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.
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.
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.
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
Conoscenza dei fondamenti della programmazione imperativa in C (tipi, variabili, strutture di controllo, funzioni, array, puntatori), come acquisita nell'insegnamento di Fondamenti di informatica.
Claudio De Sio Cesari , Programmazione Java, Hoepli
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.
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.
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.
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.
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à.
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.
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.
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.
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.
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.
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.
Cosa stai cercando?
Trova facilmente i contenuti di cui hai bisogno
Rubrica
Trova facilmente il contatto della persona o struttura di cui hai bisogno
Risultati suggeriti:
Risultati suggeriti: