Luca Dan Șerbănați all'esame di maturità, 1961
Luca Dan Șerbănați nei primi anni Settanta
Luca Dan Șerbănați all'ultima lezione del quinto anno, aprile 1989

Luca Dan Șerbănați

Professore emerito alla Politehnica di Bucarest

Ricerca, insegnamento, industria e memorie

RO | EN | IT
Luca Dan Șerbănați a Venezia, 1990
Luca Dan Șerbănați a New York, 2005
Luca Dan Șerbănați

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.

Risorse