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