Obiettivi formativi
Il corso si propone di introdurre lo studente alla programmazione
strutturata ed ad oggetti, in modo graduale ed utilizzando un
linguaggio semplice e diuffuso come Java. Essendo un corso di
laboratorio, l'enfasi è sull'imparare facendo.
Attività formative
Il corso viene svolto in 60 ore di esercitazione in laboratorio
nell'arco di un periodo.
Programma del corso
- Introduzione alla programmazione. Processo di risoluzione di un
problema. Correttezza: tipi di errori, tecniche di verifica (cenni)
Compilatori ed interpreti.
- Il linguaggio JAVA caratteristiche generali. Ambiente di
sviluppo JDK (compilatore, interprete, debugger). Struttura del
programma (applicazione). Variabili, tipi di dati, espressioni,
istruzioni di assegnamento, casting. Operatori relazionali ed
espressioni logiche (boolean). Literals stringhe, caratteri.
Semplice input/output.
- Programmazione strutturata e strutture di controllo. Diagrammi
di flusso. Istruzioni composte. L'istruzione if. L'istruzione
switch. Ciclo while. Ciclo for.
- Vettori e ordinamento. Vettori (array) monodimensionali e
bidimensionali. Gestione degli array per riferimento, allocazione
con new, aliasing. Ricerca lineare in un vettore e ordinamento di
vettori (per Selezione).
- Metodi di classe (static). Chiamate di metodi. Parametri
formali e parametri attuali. Passaggio di parametri per valore.
Passaggio di parametri per riferimento (Java non lo prevede).
Variabili locali. Effetti collaterali. Sovraccarico (overloading)
dei metodi.
- Modello runtime. Pila di attivazione, allocazione degli oggetti
nello heap, durata degli oggetti, visibilità (scope) delle
variabili. Effetti collaterali. Esempio: pila di attivazione di
chiamate annidate.
- Ricorsione. Chiamate ricorsive di metodi. Pila di attivazione
di chiamate ricorsive. Esempi di programmi ricorsivi: ricerca
binaria, ordinamento per Fusione,
- Programmazione orientata agli oggetti. Oggetti software,
messaggi, interfaccia. Concetto di classe e di esemplare. Metodi
istanza, sintassi (dot notation). La classe String. Standard UML
per i grafici.
- Classi ed oggetti. Definizione di classi. Metodi e variabili
istanza. Uso del this. Costruttori. Modificatori di
visibilità (public e private). Gestione degli oggetti per
riferimento, aliasing. Classi mutabili e immutabili, Metodi client.
Indipendenza dalla rappresentazione ed occultamento
dell'informazione. Implementazione del TDA ``Pila''.
- Ereditarietà. Estensione di classi. Polimorfismo con
sovrascrittura (overriding). Il meccanismo del dynamic binding.
Differenza tra variabili oscurate e metodi sovrascritti, uso del
super. Classi astratte. Interfaccie. Eccezioni.
- Packages. Java API. Uso dei packages e definizione di packages.
Regole di visibilità (riviste). Il package java.io, flussi
(streams) di ingresso e uscita. Lettura e scrittura di file binari
e di file di testo UNICODE.