Presentazione
dell’edizione italiana
La scelta di un testo dedicato agli algoritmi e alle strutture dati, di livello universitario, da tradurre in italiano è stata lunga e difficile, dovendosi prendere in considerazione esigenze didattiche, scientifiche ed editoriali: alla fine si è scelto questo
testo di Adam Drozdek, che è certamente innovativo per molti motivi.
La base di conoscenza esposta nel libro è quella, ormai classica, delle strutture
dati viste e introdotte prima come tipi di dati astratti, definite mediante la loro
interfaccia, per poi passare alla loro realizzazione concreta in un linguaggio di
programmazione e ad alcuni esempi significativi di un loro utilizzo in ambito progettuale, scientifico e ingegneristico.
Questa metodologia didattica si adatta alla perfezione a essere esemplificata
con un linguaggio di programmazione a oggetti, e su questo punto l’Autore fa la
prima scelta innovativa utilizzando il linguaggio Java, anziché il più consueto
linguaggio C++. La scelta del linguaggio, ovviamente, non è casuale, ma dettata
dall’obiettivo di adattare la didattica alla pratica industriale e scientifica, dove ormai il linguaggio Java ha largamente soppiantato gli altri linguaggi di programmazione per quanto riguarda i nuovi progetti software (se si esclude cioè la manutenzione di progetti già sviluppati).
Il linguaggio Java si rivela, leggendo il testo, particolarmente adatto alla didattica delle strutture dati, in quanto la definizione dei tipi di dati astratti si traduce in
modo naturale nella definizione di una interfaccia in Java, e la realizzazione di una
struttura dati concreta si traduce nella definizione di una classe che realizzi tale
interfaccia.
Un altro aspetto decisamente innovativo, che certamente si rivelerà molto utile nella didattica, consiste nella presentazione di un “caso di studio” in ciascun
capitolo del libro, un esempio di progetto software completo che porterà lo studente a confrontarsi con tutti i problemi tipici di tali realizzazioni, dove vedrà un
uso concreto degli argomenti appena studiati, insieme alla risoluzione delle classiche problematiche di ricezione dei dati in ingresso, di interazione con l’utente,
di manipolazione dei file.
Caratteristica non trascurabile per un testo prevalentemente (ma non solo)
orientato alla didattica, l’Autore propone parecchie decine di esercizi al termine di
xii
Presentazione dell’edizione italiana
ciascun capitolo, suddivisi in due sezioni: esercizi di verifica della comprensione
teorica degli argomenti trattati, ed eventualmente loro approfondimenti, e veri e
propri esercizi di progettazione software, di complessità spesso simile a quelli affrontati nei casi di studio. Una risorsa che si rivelerà sicuramente utile, vista anche
la cronica carenza di libri di esercizi in questo settore.
Per quanto riguarda la collocazione del testo nel panorama della didattica universitaria italiana, è difficile fare affermazioni precise, come invece è possibile negli Stati Uniti, dove i programmi dei corsi sono molto più uniformi. È ragionevole
ritenere che il testo si adatti con buona precisione al programma di un corso di
Fondamenti di Informatica II (nelle diverse denominazioni che esso può avere nei
vari Atenei italiani), cioè di un corso di base di scienza dell’informazione che si
collochi a valle di un primo corso in cui siano state studiate le strutture dati elementari (variabili, array) e lo studente abbia acquisito i rudimenti di un linguaggio
di programmazione, che non necessariamente deve essere il linguaggio Java.
In seguito alla definizione di nuovi percorsi di studio per le lauree triennali,
che si stanno profilando nel panorama italiano, si assiste ad una ancor maggiore
diversificazione delle denominazioni dei corsi e dei relativi programmi, con la tendenza a corsi più brevi e di argomento più focalizzato. Un esempio in tal senso
potrebbe essere un corso di “Dati e Algoritmi”, sul modello statunitense, il cui
programma potrebbe agevolmente coincidere con gli argomenti trattati nel testo,
forse con l’esclusione degli ultimi due capitoli, che presentano sostanzialmente
dei casi di studio molto approfonditi, ma non introducono argomenti teorici.
Per quanto riguarda l’aspetto linguistico della traduzione, alcune scelte si discostano dalla pratica comune, per cui meritano forse una giustificazione. Innanzitutto, negli esempi di codice Java i nomi dei vari identificatori (di variabili, di
metodi, di classi ecc.) sono stati mantenuti nella lingua originale: questo permette
una lettura del codice più fluida e coerente, perché risulta omogenea con le parole
chiave del linguaggio e con gli identificatori della libreria standard di Java, che
sono ovviamente in lingua inglese e non possono essere tradotti.
Sempre per omogeneità, si è deciso di usare il punto come separatore decimale, anziché la virgola che viene usata in Italia, perché altrimenti si sarebbe dovuto
usare la virgola nei numeri presenti nel testo e il punto nei numeri presenti nel
codice.
Infine, alcuni termini sono stati mantenuti nella lingua originale anche nella
trattazione teorica, quando questo risulti essere la pratica comune: esempi in tal
senso sono heap e hash.
Il testo è affiancato da un sito Web (booksite) in cui sono disponibili ulteriori
materiali didattici, nonché eventuali aggiornamenti e/o correzioni, all’indirizzo
http://www.apogeonline.com/libri/00895/allegati/
Marcello Dalpasso
Dipartimento di Elettronica e Informatica
Università degli Studi di Padova