Object-Oriented Programming
Il secondo corso di programmazione del ciclo di base tenuto alla FILS, nel secondo anno, primo semestre, nel periodo 2005–2011. Proseguiva il corso Programming Languages e sviluppava sistematicamente la programmazione orientata agli oggetti in Java, sia a livello concettuale sia a livello pratico.
Riferimenti essenziali
- Istituzione: Università POLITEHNICA di Bucarest
- Facoltà: FILS – Facoltà di Ingegneria in Lingue Straniere
- Anno / semestre: secondo anno, primo semestre
- Titolo ufficiale: Object Oriented Programming
- Struttura: 2 ore di lezione + 2 ore di laboratorio
- Valutazione: esame
- Crediti: 5
- Prerequisiti: i concetti e le ricette di progettazione del corso Programming Languages
Il posto del corso nella mia attività didattica
Questo corso proseguiva naturalmente l’introduzione svolta in Programming Languages. Se il primo corso aveva il compito di costruire le basi della programmazione e di introdurre Java, qui l’accento si spostava verso un pensiero autenticamente orientato agli oggetti: ereditarietà, polimorfismo, interfacce, riuso, gestione degli eventi e uso delle librerie standard Java in programmi più complessi.
Nello stesso tempo, il corso svolgeva anche un ruolo di maturazione: lo studente non era più chiamato soltanto a scrivere programmi corretti, ma a comprendere come si struttura un programma più ampio, come vengono distribuite le responsabilità tra le classi e come si può controllare la complessità attraverso l’astrazione e la collaborazione tra oggetti.
Obiettivo del corso
La scheda della disciplina formulava molto bene l’obiettivo del corso: presentare concetti avanzati di programmazione in Java e sviluppare capacità di progettazione e programmazione mediante il linguaggio Java e le sue librerie standard. Inoltre, il corso mirava a formare una comprensione più profonda dei programmi orientati agli oggetti in termini di responsibility e collaboration.
Era dunque un corso di programmazione, ma non ridotto alla sintassi. Mirava a compiere il passaggio dalla scrittura dei programmi alla loro progettazione nello spirito del paradigma orientato agli oggetti.
Struttura del corso
1. Ripasso e consolidamento delle basi
La prima parte iniziava con un riepilogo del corso Programming Languages, quindi riprendeva alcuni concetti di base nel contesto OO: definizione delle classi, attributi, metodi, membri statici, passaggio dei parametri, oggetti e istanze.
2. Ereditarietà e polimorfismo
Una sezione centrale era dedicata all’ereditarietà, alla relazione extends,
alla ridefinizione dei metodi, al binding statico e dinamico, al polimorfismo,
alle gerarchie di classi, al modificatore protected, alla classe
Object, alle classi wrapper e alle classi astratte.
La scheda e il materiale del corso coincidevano molto bene in quest’area.
3. Interfacce e conversioni di tipo
Il corso trattava le interfacce come mezzo per descrivere ciò che le classi devono fare,
senza imporre come debbano farlo. Il materiale discuteva esplicitamente la definizione
delle interfacce, l’ordinamento mediante Comparable, le conversioni tra tipi
di riferimento e il rapporto tra classi, interfacce e riuso.
4. Classi interne e callback
Un capitolo importante era dedicato alle classi interne, ai callback e al loro uso nei programmi basati sugli eventi. Qui emergeva chiaramente l’orientamento pratico del corso: i concetti OO erano collegati direttamente a meccanismi reali di programmazione Java.
5. Applet, grafica ed eventi
La scheda della disciplina comprendeva poi una sequenza specifica dell’epoca del Java desktop / web:
applet, comunicazione sul web, protocollo HTTP, HTML, contesto dell’applet, disegno,
parametri, quindi programmazione grafica con java.awt, contenitori,
componenti, colori, font, immagini, layout management e gestione degli eventi
mediante listener e adapter.
6. Gestione delle eccezioni e debugging
Il corso comprendeva anche la gestione degli errori, il catching delle eccezioni, il logging, le assertion e le tecniche di debugging. Qui lo studente veniva confrontato con l’idea che la robustezza del programma faccia parte della sua progettazione e non sia soltanto una questione di sintassi.
7. Input / Output avanzato
La seconda parte del materiale sviluppava sistematicamente java.io:
la gerarchia delle classi di input e output, stream di byte e di caratteri,
lettura dalla console, Scanner, PrintWriter,
uso dei file e stream filtrati. Questa parte approfondisce ed estende
l’introduzione svolta nel primo corso di programmazione.
8. Generics e collezioni
L’ultima parte principale era dedicata alla programmazione generica in Java: classi generiche, metodi generici, type erasure, wildcard, bounded type parameters e limiti dei generics. La scheda della disciplina menzionava anche il Collections framework, le gerarchie Collection e Map, l’ordinamento e la ricerca; il materiale sviluppava precisamente la base teorica necessaria per quest’area.
Laboratorio
I laboratori seguivano da vicino i capitoli del corso: ripasso di Java, ereditarietà e polimorfismo, classi astratte, interfacce, classi interne, applet, interfacce grafiche, gestione degli eventi, pattern Observer, eccezioni, I/O con file e introduzione alle collezioni. Il semestre si concludeva con esercizi di riepilogo, simulazione d’esame ed eventuali recuperi di laboratorio e di test.
La scheda menzionava dieci brevi esercitazioni e alcuni piccoli progetti. L’impostazione didattica era molto sana: i concetti dovevano essere esercitati attraverso la programmazione effettiva, mentre i piccoli progetti offrivano agli studenti l’occasione di integrare più capitoli in un’unica applicazione.
Valutazione
La valutazione era ripartita tra l’esame finale (40%) e l’attività svolta durante il semestre (60%): frequenza alle lezioni e ai laboratori, due test annunciati e attività di laboratorio / compiti a casa. L’esame finale consisteva nello sviluppo di uno o due programmi.
Significato del corso
Visto retrospettivamente, questo corso occupa un posto molto importante nella formazione di base degli studenti FILS. Era il punto in cui Java cessava di essere soltanto un linguaggio e diventava un ambiente di pensiero e di costruzione software orientata agli oggetti.
Inoltre, il corso stabiliva il collegamento tra la programmazione di base e le discipline più avanzate dedicate ai metodi, alla progettazione e all’architettura del software. Senza di esso, quei corsi successivi non avrebbero avuto la stessa base pratica.





