Programma del corso - Nucleo di Ricerca in Didattica dell`Informatica

Università degli Studi di Udine
Dipartimento di Matematica e Informatica
33100 - UDINE (UD)
Via delle Scienze, 206
Tel. 432 558400
CORSO SULLA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI IN JAVA
Istituto Tecnico Industriale “V. Volterra” di S. Donà di Piave
Obiettivi del corso
Il corso si propone di introdurre le principali idee della programmazione orientata agli oggetti
attraverso il linguaggio Java, mettendo in rilievo il ruolo centrale dei processi di astrazione e la
ricerca di strumenti che consentano di “dare vita” ai modelli astratti nell’ambito dei programmi. La
discussione cercherà anche di evidenziare potenzialità e criticità da un punto di vista didattico, che
non può trascurare il notevole sforzo richiesto agli allievi per apprendere e assimilare i processi di
astrazione.
Prerequisiti: Una minima esperienza di programmazione con qualche linguaggio procedurale (per
esempio: Pascal, C) può senza dubbio favorire la fruizione del corso.
Contenuti del corso
Per quanto possibile, le caratteristiche di base del linguaggio Java non verranno esposte secondo
uno schema manualistico di tipo sistematico, ma verranno preferibilmente presentate in relazione a
(semplici) esempi, nell’intento di fare emergere idee e modelli generali di riferimento.
Auspicabilmente, al termine del corso i partecipanti saranno in grado di orientarsi autonomamente
nel vastissimo mondo di Java e di scegliere gli argomenti da approfondire in base ai propri interessi
e/o ai propri obiettivi didattici.
1. Introduzione (4 ore)
Principali approcci all’insegnamento della programmazione: imperative-first, functional-first,
object-first, hardware-first, algorithm-first; esempi; possibili vantaggi e svantaggi dal punto di vista
didattico.
L’astrazione nella programmazione: astrazione su memoria e controllo, astrazione procedurale,
astrazione sui dati, astrazione sullo stato, astrazioni relative ai tipi; linguaggi orientati agli oggetti e
strumenti linguistici per esprimere le forme dell’astrazione.
Ambienti e strumenti didattici per lo sviluppo di programmi in Java: DrJava, BlueJ,
JavaPowerTools; motivazioni alla base delle possibili scelte. Ambienti visuali di supporto allo
sviluppo di interfacce grafiche (p.es. NetBeans); vantaggi e svantaggi in un contesto didattico.
2. Astrazione procedurale in Java (4 ore)
Rappresentazione di funzioni in Java attraverso metodi static; variabili (parametri) ed espressioni;
un po’ di terminologia. Classi come collezioni di metodi static. Applicazione di funzioni
nell’ambiente di sviluppo DrJava.
Assegnazione e strutture di controllo per formalizzare semplici programmi. Metodi funzionali e
metodi procedurali. Input/output testuale standard in Java. Approccio funzionale e approccio
sequenziale a confronto dal punto di vista didattico.
Valori e oggetti in Java; tipi primitivi (tipi numerici, boolean, char); tipi di oggetti usati
frequentemente (tipi array, String); assegnazione di valori e oggetti; passaggio dei parametri in
Java.
3. Astrazione sui dati e astrazione sullo stato: concetto di incapsulamento (6 ore)
Astrazione sui dati e classi di oggetti immutabili; concetto di classe e relativo protocollo; campi,
costruttori e metodi; caratterizzazione dei campi per mezzo degli attributi final (valori immutabili)
e static final (costanti); definizione dell’ambito di visibilità e incapsulamento: attributi public e
private. Esempi relativi alla definizione di strutture dinamiche (liste, alberi).
Interazione nello stile funzionale (metodi funzionali + oggetti immutabili) utilizzando l’ambiente
DrJava; motivazioni didattiche alla base dell’approccio: semplificazione dell’interazione.
Astrazione sullo stato e classi di oggetti che evolvono; variabili di stato e ruolo dei costruttori;
metodi per acquisire informazioni sullo stato e metodi per modificare lo stato; metodi di supporto
(private).
Confronto fra oggetti: interpretazione di == e equals; equals per oggetti immutabili e per oggetti
che evolvono. Garbage collection. Creazione e uso di oggetti nell’ambiente DrJava.
4. Astrazioni relative ai tipi: eredità e polimorfismo (6 ore)
Principali forme dell’eredità: specializzazione, estensione, eredità per specifica; caratteristiche e
utilizzo dell’eredità in Java, relazioni fra tipi (classi) e compatibilità per sostituzione.
Eredità e specializzazione: overriding di metodi; funzione dei costruttori in relazione all’eredità;
costruttori definiti implicitamente; ruolo della classe Object.
Eredità ed estensione: overloading di costruttori e metodi.
Eredità e specifica: interfacce; metodi e classi abstract; disciplina dell’eredità multipla in Java.
Rappresentazione delle relazioni fra classi nell’ambiente di sviluppo BlueJ; motivazioni didattiche.
Creazione e uso di oggetti nell’ambiente BlueJ.
Polimorfismo, variabili polimorfe e condivisione del codice ad alto livello; selezione dinamica dei
metodi (pubblici) nel modello computazionale di Java; utilizzo della classe Object in relazione al
polimorfismo.
5. Modelli di riferimento per lo sviluppo di programmi in Java (6 ore)
Modello relativo alla gestione di eccezioni: dichiarazione throws, comando throw e costrutto trycatch; gerarchie Exception e RuntimeException.
Modello relativo alla gestione di stream di input/output; stream basati sul trasferimento di byte
(InputStream/OutputStream) e di caratteri (Reader/Writer); struttura della gerarchia di classi e
componibilità delle istanze; accesso al file-system; trasferimento di oggetti attraverso stream e
interfaccia Serializable.
Modello relativo alla gestione dei thread: classe Thread, interfaccia Runnable e metodo run().
Sincronizzazione di thread: attributo di metodi (e costrutto) synchronized.
Esempi di uso comune nell’ambito delle librerie API di Java e organizzazione in package.
6. Modelli di riferimento per lo sviluppo di interfacce grafiche (6 ore)
Realizzazione di interfacce grafiche (GUI) secondo il modello AWT di Java; principali componenti
e gestione del layout; componibilità ad albero; utilizzo del metodo paint(Graphics).
Modello relativo alla gestione degli eventi in Java; definizione di “ascoltatori di eventi” e ruolo
delle interfacce associate (eredità per specifica).
Utilizzo di strumenti didattici per semplificare la realizzazione di GUI: JavaPowerTools. Esempi di
sviluppo in ambiente visuale (p.es. NetBeans) e considerazioni didattiche.
Programmi attraverso il web: il modello delle applet in Java. Cenni all’utilizzo di elementi
multimediali (immagini e suoni) nelle interfacce grafiche.
7. Modelli di riferimento per il progetto di soluzioni orientate agli oggetti (4 ore)
Progettazione orientata agli oggetti: identificazione di componenti e interazioni, definizione delle
responsabilità (schede CRC). Organizzazione del codice in Java: classi nidificate e classi interne;
confronto fra eredità e aggregazione fra classi.
L’ambiente BlueJ come supporto all’analisi della struttura di un progetto.
Cenni ad alcuni esempi notevoli di design pattern, da individuare fra i seguenti schemi: modelview-controller, observer, composite, decorator, prototype, iterator, proxy, strategy.
8. Tecniche di programmazione avanzate (4 ore)
Cenni alla programmazione in rete: modalità di comunicazione attraverso soket; classi Socket e
ServerSocket; gestione delle sessioni attraverso thread indipendenti.
Cenni sull’accesso a basi di dati: protocollo JDBC; connessione e interrogazione di una base di
dati. Ruolo degli iteratori e interfaccia Iterator.
Commenti
I tempi riportati sono solo indicativi (e probabilmente sottostimati); saranno gli interlocutori a
determinare il ritmo più adeguato per lo svolgimento delle lezioni e l’eventuale scelta degli
argomenti cui dare maggior risalto nel caso si dovesse rinunciare a qualcosa.
Gli strumenti che penserei di adoperare per lo svolgimento delle lezioni sono una lavagna
tradizionale (possibilmente con un’ampia superficie) e un videoproiettore a cui collegare un
portatile personale.
Alcune attività potranno essere svolte in un laboratorio informatico (e a tal fine spero di potermi
avvalere di un collaboratore che sto cercando di individuare all’interno della mia istituzione); in
ogni caso, tutti gli strumenti software indicati nella descrizione dei conentuti del corso sono
disponibili gratuitamente attraverso la rete e possono essere installati sostanzialmente su tutte le
principali piattaforme.
Udine, Giugno 2005
Claudio Mirolo
Riferimenti bibliografici
D. Arnow, G. Weiss
Introduction to Programming Using Java: An Object-Oriented Approach
Addison-Wesley, 1998
D.J. Barnes, M. Kölling
Programmare in BlueJ – Introduzione alla programmazione a oggetti
Addison-Wesley, 2003 (Edizione italiana)
T. Budd
Understanding Object-Oriented Programming with Java
Addison-Wesley, 2000
T. Budd
Introduction to Object-Oriented Programming
Addison-Wesley, 2002
B. Eckel
Thinking in Java
Prentice Hall, 2000
J. Graba
Introduction to Network Programming with Java
Addison-Wesley, 2004
X. Jia
Object Oriented Software Development Using Java
Addison-Wesley, 2002
P. Kuchana
Software Architecture Design Patterns in Java
Auerbach Publications, 2004J. Lewis, W. Loftus
Java - Fondamenti di progettazione software
Addison-Wesley, 2000 (Edizione italiana 2001)
B. Liskov, J. Guttag
Program Development in Java
Addison-Wesley, 2000