CLASSE QUARTA Ore 6(3)

OBIETTIVI
Valutare la qualità del software.
Applicare con proprietà tecniche di programmazione modulare.
Applicare il paradigma della programmazione orientata agli oggetti.
Applicare il paradigma della programmazione guidata da eventi.
Coniugare il controllo dei programmi con le strutture dei dati.
Progettare e costruire interfacce d’utente amichevoli.
Progettare e costruire moduli significativi per traduttori e/o interpreti di linguaggi.
Conoscere ed usare classi notevoli di oggetti contenitori.
Conoscere le basi della compilazione/interpretazione
Definire e manipolare strutture di dati connesse da puntatori.

CONTENUTI
La produzione del software
Elementi di analisi della complessità computazionale.
Concetti di astrazione, implementazione, visibilità minima.
Programmazione per moduli.
Metodologia di progetto orientata ad oggetti.
Interfaccia d’utente e programmazione guidata dagli eventi.
Documentazione del software.

Approfondimenti sulla programmazione imperativa
Strutturazione dei dati.
Vantaggi della tipizzazione.
Gestione dinamica dei dati:
- Puntatori ed operazioni relative
- Strutture a liste lineari e non lineari
- Tecniche di recupero della memoria inaccessibile. Programmazione per moduli.
Definizione di nuovi tipi di dato (tipi di dato astratti).
Archivi ad organizzazione sequenziale tipizzati: operazioni ed algoritmi classici (ricerca, modifica, inserimento, cancellazione e fusione, ordinamento, ecc) con accesso sequenziale e con accesso diretto.
File di testo ed archivi non tipizzati.

La programmazione rivolta agli oggetti
Oggetto, stato interno, operazioni e loro classificazione, metodo, classe, sottoclasse, polimorfismo, ereditarietà, genericità (parametrizzazione).
Collegamento statico e dinamico di un metodo. Persistenza di un oggetto.
Classi notevoli di oggetti contenitori:
- Insieme, multinsieme.
- Sequenza con cursore (stream) e sue sottoclassi (ad es. pila e coda).
- Albero binario, albero, grafo.
Analogie e differenze fra il paradigma degli oggetti ed altri paradigmi.

Elaborazione dei linguaggi
Linguaggi a basso ed alto livello.
Concetti di compilazione ed interpretazione.
Analisi lessicale.
Alberi sintattici.
Ambiguità.
Metodi di analisi sintattica; analisi ricorsiva discendente.
Implementazione della ricorsione.
Generazione e interpretazione del codice.

LABORATORIO
Uso e studio approfondito di un linguaggio per la programmazione imperativa.
Uso e studio di un linguaggio che supporta il paradigma degli oggetti, applicato alla
soluzione di problemi significativi.
Implementazione di fasi significative della compilazione di linguaggi, anche se elementari.

INDICAZIONI METODOLOGICHE
Nella classe quarta l’alunno dovrebbe acquisire le competenze per affrontare progetti di una certa dimensione.
In questo campo la metodologia orientata agli oggetti è un riferimento obbligato. Nell’adottare un particolare linguaggio che supporti la programmazione orientata ad oggetti si deve comunque avere cura di evidenziarne i limiti rispetto a ciò che è desiderabile e che si può ritrovare in altri linguaggi.
Due sono gli argomenti della programmazione imperativa da recuperare dal terzo anno:
la gestione delle strutture “heap” e gli archivi elementari.
Le strutture heap si devono affrontare con sufficiente approfondimento concettuale ma senza dedicarci troppo tempo.
Gli archivi si possono eventualmente vedere come particolari oggetti emergenti dal livel-lo del sistema operativo.
Anche i temi classici sulle strutture dati (sequenze, pile, code, alberi,...) si possono vedere con il paradigma degli oggetti in un’ottica unificante.
Il tema “Elaborazione dei Linguaggi” ha lo scopo di fornire importanti principi generali ma anche strumenti e occasioni per affrontare problemi di una certa complessità E auspicabile che in questo anno si ponga una certa attenzione all’efficienza delle solu-zioni, fornendo qualche minima nozione di analisi della complessità computazionale degli algoritmi e che si usi qualche strumento in grado di individuare i colli di bottiglia.