Dipartimento: DIMES
Corso di Laurea: INGEGNERIA INFORMATICA
Indirizzo Internet Corso di Laurea: www.dimes.unical.it
Nome insegnamento: PROGRAMMAZIONE ORIENTATA AGLI OGGETTI
Condivisione:
Articolazione in moduli: si
Settore Scientifico Disciplinare: ING-INF/05
Docente responsabile: PUPO FRANCESCO / NIGRO LIBERO
PROFESSORE ASSOCIATO - PROFESSORE ORDINARIO UNIVERSITA’
Posizione docente responsabile:
DELLA CALABRIA
Crediti formativi universitari: 12
Numero ore lezioni: 72
Numero ore riservate attività didattiche assistite: 114
Numero ore esercitazioni: 42
Numero ore riservate studio individuale: 188
Tipologia: ATTIVITA’ DI BASE
Lingua di insegnamento: ITALIANO
Collocazione: I ANNO, II SEMESTRE
Prerequisiti: Fondamenti di Informatica
Il corso approfondisce la programmazione in Java in accordo alla tecnologia degli oggetti. Attraverso lo sviluppo e la messa a
punto di esempi/progetti didattici sperimentali, si studiano i concetti della programmazione orientata agli oggetti e la realizzazione
di classi di libreria estendibili e riutilizzabili. Si illustrano quindi gli aspetti di sviluppo di software robusto alle eccezioni, dotato di
interfaccia utente grafica e capace di essere elaborato in ambiente Internet (es. applet). Il corso illustra, infine, la gestione di
strutture dati dinamiche (liste ed alberi binari) e la programmazione ricorsiva.
Competenze da acquisire:








comprensione della tecnologia degli oggetti nello sviluppo modulare del software
abilità ad impostare la risoluzione di problemi mediante gerarchie di classi riusabili
abilità ad implementare una soluzione ad oggetti e a validarne il funzionamento mediante testing
abilità ad avvalersi delle classi e metodi della libreria di Java, es. relativamente a liste, insiemi e tabelle
abilità a sviluppare classi robuste alle eccezioni, che si interfacciano con il file system e sono dotate di GUI
abilità a sviluppare in proprio classi per la gestione di strutture dati dinamiche (liste ed alberi)
abilità a sviluppare software mediante la programmazione ricorsiva
capacità di saper sfruttare le conoscenze acquisite anche in altri linguaggi di programmazione, es. C++
Argomenti delle lezioni:
Introduzione alla tecnologia degli oggetti.
Il paradigma degli oggetti. Classi, oggetti e messaggi. Struttura e comportamento: campi, metodi e parametri. Modificatori di
accesso. Regole di visibilità dei nomi. Approfondimento delle classi array e stringhe di caratteri. Classi e invarianti.
Gerarchie di oggetti e sviluppo di programmi.
Dal generale al particolare. Progetto di classi per specializzazione di classi esistenti. Definizione di pacchetti di classi riutilizzabili.
Operazione di assegnazione tra oggetti e casting sui riferimenti. Polimorfismo e collegamento dinamico ai metodi. La classe
Object e i metodi toString(), equals(). hashCode(), clone(). Linee guida al progetto generale di una classe riusabile. Classi
astratte e interfacce. Relazioni d’ordine tra gli oggetti di una classe. Risoluzione di problemi mediante il progetto e la messa a
punto di gerarchie di classi. Organizzazione delle fasi di testing.
Gestione delle eccezioni e classi della libreria di Java.
Il meccanismo delle eccezioni di Java. Regole di progetto di classi di eccezioni. Panoramica sulle classi della libreria di Java.
Classi wrapper e tipi primitivi. Classi e interfacce di utilità. Liste, insiemi e mappe di java.util e loro utilizzo pratico. Cenni ai tipi
generici. Introduzione ai flussi di ingresso/uscita e file.
Elementi di programmazione dell’interfaccia utente grafica (GUI)
Principali classi per il progetto di semplici applicazioni provviste di GUI.
Elementi di C++
Analogie e differenze tra Java e C++. Breve guida alla programmazione in C++.
Approfondimento gestione di flussi e file.
Altre classi per la gestione di flussi e file. File ad accesso diretto. Serializzazione degli oggetti.
Strutture dati dinamiche e programmazione ricorsiva.
Gestione di una lista concatenata. Classi per la gestione di liste lineari: pila, coda, doppia coda etc. Implementazione
sequenziale e concatenata. La lista doppia. Classi parametriche e meccanismo dei tipi generici. Approfondimento del framework
delle collection di Java. Tecniche di programmazione ricorsiva. Esempi di problemi risolti ricorsivamente. Trasformazione
ricorsione-iterazione. Alberi binari di ricerca. Sviluppo di classi per la gestione di strutture ad albero binario. Ricorsione e strutture
dati dinamiche. Stack e heap di un programma Java.
Interfaccia utente e applet.
Programmazione pilotata dagli eventi. Il modello di delegazione degli eventi di Java AWT e swing. Sorgenti di eventi ed
ascoltatori. Contenitori e componenti di una GUI. Ridisegno di oggetti grafici. Gestione eventi del mouse e della tastiera.
Applicazioni ed applet. Aggancio di applet a pagine HTML. Scaricamento remoto di applet da Internet e problemi di sicurezza.
Sviluppo di applicazioni dotate di GUI. Cenni alla struttura multi-thread.
Sviluppo di qualche case study significativo.
Argomenti delle esercitazioni:
• Progetto e realizzazione di classi basate sui concetti presentati a lezione. Sviluppo e verifica di progetti didattici sperimentali.
Modalità di frequenza: OBBLIGATORIA
Modalità di svolgimento delle lezioni:
In aula, con metodologie tradizionali e con l’uso di trasparenze e proiettore collegato al PC.
Modalità di svolgimento delle esercitazioni:
In aula, con metodologie tradizionali e proiettore collegato al PC.
Metodi di valutazione:
Sviluppo di un progetto, prova scritta e prova orale obbligatoria.
Testi di riferimento:
L. Nigro, Appunti dalle lezioni di Programmazione orientata agli oggetti, 2008.
Cay S. Horstmann, Concetti di informatica e fondamenti di Java, Nuova edizione per le versioni 5 e 6 del linguaggio,
Apogeo 2007.
Cay S. Horstmann, Gary Cornell, Core Java, Vol. 1-Fundamentals, 8 Edizione (in inglese), Pearson Education,
2008.
S. Mazzanti, V. Milanese, Programmazione di applicazioni grafiche in Java. Apogeo, 2006.
Orario e aule lezioni:
Calendario prove valutazione:
www.dimes.unical.it