PROGRAMMAZIONE ORIENTATA AGLI OGGETTI A - L
Anno accademico 2026/2027 - Docente: ANTONELLA DI STEFANORisultati di apprendimento attesi
Conoscenza e comprensione
Il corso introduce alla programmazione ad oggetti, mostrandone le principali caratteristiche e prendendo come principale linguaggio di riferimento Java.
Lo scopo è che l'allievo acquisisca le competenze per poter programmare ad oggetti, applicando coerentemente ed efficacemente gli strumenti messi a disposizione dal linguaggio.
Obiettivo del corso è fornire allo studente i concetti base di classe e oggetto e i principi fondamentali di encapsulation, polimorfismo, ereditarietà e i meccanismi di gestione delle eccezioni, ma anche gli elementi fondamentali della programmazione parametrica e multithread.
Capacità di applicare conoscenza e comprensione
L'approccio by example mira a sviluppare nello studente la capacità di organizzare un software ad oggetti. Il corso fornisce allo studente le tecniche e gli strumenti base per lo sviluppo di programmi applicativi adottando Java come linguaggio di programmazione ad oggetti di riferimento. Utilizzando alcuni package di base universalmente noti, e analizzando e applicando concetti di programmazione parametrica (Generics), per la gestione di Collection, e Map e multithread, l'allievo avrà modo di cominciare ad apprendere le best practice di strutturazione del codice ad oggetti. L'uso di un IDE sin dai primi passi del corso mira a sollecitare nello studente la capacità di definire e organizzare gli oggetti, le loro responsabilità e relazioni.
Autonomia di giudizio (Ability of making judgements)
Lo studente sarà in grado di valutare il funzionamento di un programma scritto utilizzando un linguaggio per la programmazione orientata agli oggetti (OOP), di comprendere eventuali problemi e possibili soluzioni canoniche.
Abilità comunicative (Communication skills)
Il corso fornisce la conoscenza della programmazione orientata agli oggetti e del vocabolario tecnico ad essa associato.
Capacità di apprendimento (Learning skills)
Il corso fornisce la capacità di apprendere i concetti propri del paradigma di programmazione orientata agli oggetti, necessari per intraprendere futuri studi di linguaggi OOP diversi e di tecniche di progettazione e sviluppo software in autonomia.
Modalità di svolgimento dell'insegnamento
Il metodo di insegnamento principale è la didattica frontale, integrata da attività esercitative e di laboratorio, con svolgimento e discussione di esercizi ed esempi applicativi in linguaggio Java.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza, potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
Concetti di programmazione strutturata, il linguaggio C per istruzioni e tipi di dati.
Conoscenze delle principali strutture dati statiche e dinamiche, caratteristiche/peculiarità di file, liste, pile, code, hash table e alberi e i relativi algoritmi classici di manipolazione.
Concetti di base di sistema operativo e software di base (es. variabili d'ambiente) e comandi di sistema, i concetti di interrupt ed eccezioni, processi e threading, concorrenza, semafori e monitor.
Frequenza lezioni
La frequenza non è obbligatoria ma fortemente incoraggiata per sostenere la prova di esame.
La frequenza (70%) è necessaria solo per gli studenti che intendano sostenere le prove in itinere.
Contenuti del corso
Il corso presenta la programmazione ad oggetti, mostrandone le principali caratteristiche e prendendo come principale linguaggio di riferimento Java.
Vengono trattati i concetti base di classe e oggetto e i principi fondamentali di encapsulation, polimorphism, inheritance, exception handling. Questi aspetti vengono applicati alla programmazione Java, accennando agli elementi fondamentali della Java Virtual Machine (JVM), alla gestione della memoria e al meccanismo di late binding.
Vengono approfonditi i concetti di programmazione parametrica (Generics) e multithreading.
Testi di riferimento
Cay S. Horstmann, "Concetti di informatica e fondamenti di Java" (attualmente la versione più recente in italiano è la 7a ma non contiene una parte thread che si pò reperire nella versione inglese più recente indicata di seguito)
Cay S. Horstmann, Core Java, Volume I: Fundamentals, 13th Edition.
Programmazione del corso
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | (*)Concetto di oggetto. Relazione tra oggetti. Concetto di classe e di interfaccia pubblica (metodi) | i lucidi (delle prime lezioni) reperibili su Studium alla sezione documenti forniscono rappresentano materiale di studio adeguato a questo argomento introduttivo |
| 2 | (*)Principi di base della programmazione ad oggetti: incapsulamento, ereditatietà e polimorfismo. | i lucidi (delle prime lezioni) reperibili su Studium alla sezione documenti forniscono rappresentano materiale di studio adeguato a questo argomento introduttivo |
| 3 | Cenni di UML e regole di progettazione del software | |
| 4 | (*) caratteristiche del linguaggio di programmazione ad oggetti di riferimento: Java | i lucidi (delle prime lezioni) reperibili su Studium alla sezione documenti forniscono rappresentano materiale di studio adeguato a questo argomento introduttivo |
| 5 | Uso di un IDE per la programmazione Java. | vedi sito relativo |
| 6 | (*)Incapsulamento e modificatori di accesso e package | ch. 3,8 |
| 7 | (*)Ereditarietà e polimorfismo | ch.9 |
| 8 | (*)Classi astratte ed interfacce | ch.9,10 |
| 9 | (*)Gestione delle eccezioni | ch.11 |
| 10 | I/O, File e gestione di stringhe (cenni). | ch.11 |
| 11 | (*)Programmazione parametrica (Generics) | ch.15 |
| 12 | classi wrapperm Autoboxing | ch.7 |
| 13 | (*)Collections, Collection e Map | ch.14 |
| 14 | ordinamento: Comparable<> e Comparator<> | ch.13 |
| 15 | (*)Multithreading e e gestione della concorrenza tramite synchronized e wait()-notifyAll(). | -- |
| 16 | Conoscenze minime irrinunciabili per il superamento dell'esame: la loro conoscenza è condizione necessaria ma non sufficiente. Per superare l'esame occorre dimostrare di saperle usare in modo adeguato. |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
- Una prova pratica al calcolatore: programma in linguaggio Java.
- Una successiva prova orale, in caso di superamento della prova precedente in base ad una soglia minima di ammissione.
Durante il corso è prevista la possibilità di sostenere 2 prove in itinere:
1a parte fino ad eccezioni incluse (primi 9 item del programma) durante la pausa didattica; 2a parte sul resto del programma a conclusione del corso.
Potranno partecipare ad ogni prova solo gli studenti che abbiano una frequenza di almeno il 70% delle lezioni nel periodo relativo.
- Il superamento delle due prove, valutate di pari peso, può essere sostitutivo dell'esame.
- Le prove in itinere sono prove al calcolatore che dimostrano la capacità di sviluppo di semplici programmi in Java.
- Il superamento delle due prove può essere sostitutivo dell'esame per lo studente che abbia superato entrambe le prove in itinere ottenendo una valutazione complessiva di almeno 18/30.
- La valutazione delle prove verrà fornita a conclusione del corso.
NB: nelle prove pratiche al calcolatore (in itinere e non) lo studente dovrà dimostrare di conoscere la programmazione Java avvalendosi esclusivamente dei concetti, dei costrutti e delle librerie introdotti nel corso, senza ricorrere a costrutti, librerie o meccanismi non trattati nel programma. Le soluzioni dovranno pertanto essere sviluppate utilizzando in modo consapevole gli strumenti oggetto dell'insegnamento.
Esempi di domande e/o esercizi frequenti
Es. domande orali:
discutere polimorfismo, encapsulation, concorrenza nei thread, tipi parametrici, mappe, exception handling.
Es. di prove pratiche reperibili su Studium.