INTERVISTA:
Domanda 1
Lei è specializzato in un tipo di programmazione orientata a oggetti, di cui oggi si
discute molto. Ci può spiegare di che cosa si tratta?
Risposta
Il mondo dell'informatica ha circa 50 anni e nei primi 20 o 30 ci siamo occupati
soprattutto di un tipo di programmazione che si basa sulle procedure: in esso si
programmano funzioni da un input ad un output. Poi è venuta la programmazione orientata a
oggetti. Essa presenta una differenza radicale rispetto alla prima perché gli oggetti
durano nel tempo, e per questo motivo non è possibile spiegare il loro funzionamento in
termini di input ed output. Gli oggetti sono, quindi, più potenti delle procedure: i
primi possono catturare le proprietà richieste dai sistemi di prenotazione delle
compagnie aeree, dai sistemi di progettazione di software e dai sistemi che operano in
tempo reale. Per illustrare la differenza ricorro ad un'analogia: i prodotti della
programmazione orientata a oggetti sono come il matrimonio, destinato a durare a lungo. I
prodotti, invece, della programmazione basata sulle procedure sono come contratti di
vendita: si dà un input e si ottiene un output. Questo scambio non dipende dal tempo:
resta identico a prescindere dal tempo in cui avviene. Ma il rapporto che ci lega agli
oggetti è simile ad un contratto di matrimonio, esso è destinato a durare per tutta la
vita dell'oggetto fino al venir meno di questo; fino a che "morte non ci
separi".
Domanda 2
Cosa può essere fatto con gli oggetti? Esistono applicazioni, che richiedono una
programmazione di tipo lineare o procedurale, e programmi per i quali è più adatta una
programmazione orientata all'oggetto?
Risposta
Il passaggio dalla programmazione tradizionale del primo tipo a quella del secondo tipo
avviene in modo molto naturale perché attualmente tutte le applicazioni, di cui si fa
uso, sono interattive. I sistemi software sono interattivi: ad esempio quelli per le
prenotazioni sulle linee aeree, i sistemi di controllo dei reattori nucleari e quelli del
World Wide Web di Internet. Quelli citati sono tutti sistemi interattivi piuttosto che
algoritmici. Il mio lavoro consiste, appunto, nel mostrare la maggiore potenza dei sistemi
interattivi rispetto a quelli algoritmici. Una delle ragioni di tale superiorità è che i
sistemi interattivi possono gestire il tempo che trascorre durante l'esecuzione. Un
algoritmo ci dà un output a partire da un input, ma mentre sta calcolando esso non può
interagire e quindi, durante le operazioni di calcolo, non può tener conto di ciò che
accade nell'ambiente circostante. Gli oggetti invece possono registrare gli effetti del
passaggio del tempo mentre svolgono la loro funzione, e quindi sono più potenti: per
esempio possono assicurare il risultato che si vuole conseguire con un programma di
prenotazione di posti su linee aeree, mentre un programma algoritmico non può fare
altrettanto. Uno dei risultati della Conferenza, in corso qui, sul ruolo della logica nei
sistemi informatici è che gli oggetti non possono essere descritti in base alle logiche
standard. Essi non possono essere descritti da una logica del primo ordine che sia
coerente e completa. Gli oggetti non sono completi e questa proprietà è riconducibile
all'incompletezza di cui ha trattato Gödel. Questi ha dimostrato un famoso teorema in
base al quale ogni sistema unitario non può essere descritto con una logica dotata di
coerenza e completezza. Neanche i sistemi interattivi possono essere descritti in base ad
una logica del genere, mentre possono esserlo gli algoritmi. Una differenza essenziale,
quindi, è che i sistemi orientati a oggetti sono incompleti. Essi hanno un comportamento
molto vario, troppo ricco perché possa venire descritto dalla logica e per questo aspetto
sono in realtà un po' simili ai sistemi materiali, agli oggetti dell'esperienza
quotidiana. Analogamente, il contratto di matrimonio appartiene al mondo reale, mentre un
contratto di vendita, un programma procedurale, è un contratto matematico che appartiene
ad un mondo matematico ideale. La differenza tra le funzioni e gli oggetti è, quindi,
analoga alla differenza tra la logica matematica e gli oggetti dell'esperienza. Essa è
anche simile alla differenza che intercorre tra la filosofia razionalista e quella
empirista. Potremmo dire che il calcolo è razionalista, un po' come il "cogito ergo
sum" di Descartes: questi riteneva che si potesse comprendere ogni cosa mediante il
pensiero senza interazione con il mondo esterno. Pensare, dedurre, è proprio ciò che fa
un algoritmo: non interagisce, pensa soltanto. Un oggetto, invece, può interagire; esso
è, quindi, più simile ad un sistema empirico o fisico e funziona proprio in un modo che
sembra dar ragione agli empiristi, i quali sostenevano che non possiamo fare tutto con il
solo pensiero, che dobbiamo riconoscere il ruolo dell'interazione con il mondo esterno. La
differenza tra i due tipi di programmazione è pari a quella intercorrente tra il
razionalismo platonico da un lato e l'empirismo e la fisica moderna: credo che ciò sia un
segno del fatto che l'informatica è giunta all'epoca della sua maturità.
Domanda 3
Dal punto di vista dei linguaggi di programmazione, il cambiamento da Lei descritto
richiede linguaggi di un tipo del tutto nuovo? Da un punto di vista teorico, questi nuovi
linguaggi sono diversi dai vecchi linguaggi procedurali?
Risposta
Non abbiamo bisogno di nuovi linguaggi, ma di nuovi modelli per descriverli. Anche un
linguaggio molto vecchio, come il Fortran o il Pascal, sarebbe analogo ad un oggetto se
fosse attivata la funzione di lettura e scrittura in contemporanea all'attività di
elaborazione dei dati. Il punto chiave della differenza è la possibilità, per il
sistema, di ricevere input mentre sta elaborando. Il vero errore dei vecchi modelli era
che la teoria del calcolo non descriveva tutta la capacità di input ed output, anche di
linguaggi molto vecchi come il Fortran ed il Pascal. La teoria descriveva soltanto cosa
accadeva quando il sistema stava compiendo una serie di calcoli senza input né output.
Così, sebbene un linguaggio come il Fortran possa svolgere, attualmente, funzioni
interattive, i modelli algoritmici non danno conto di tale capacità: abbiamo, quindi,
bisogno di modelli nuovi. E questi sono radicalmente diversi dai precedenti perché non
possono essere descritti in base alla logica. E' sbagliato, dunque, asserire che
l'informatica è la logica. E' vero che ogni dimostrazione è un'elaborazione, ma non vale
l'inverso.
Domanda 4
Programmazione orientata a oggetti ed elaborazione parallela sono due diversi paradigmi
per i quali si prevede un grande futuro. Può descrivere sia l'interazione che le
differenze tra i due?
Risposta
La programmazione orientata a oggetti contribuisce a realizzare programmi con linee di
elaborazione che collaborano lavorando in parallelo, ma ritengo che le differenze tra le
due modalità di programmazione siano maggiori di quel che si pensa. Si possono, infatti,
predisporre programmi che lavorano in parallelo senza input ed output, senza
interattività, e ciò è realizzabile mediante algoritmi. Se invece si intende realizzare
un programma interattivo, si è comunque impossibilitati a farlo ricorrendo agli
algoritmi, sia che il programma lavori in parallelo, sia che tale complicazione non sia
prevista. Dal punto di vista dei modelli di programma, il punto complicato è
l'interazione con il mondo esterno. E' evidente che il lavoro in parallelo presenta una
maggiore complessità rispetto ai programmi unilineari, ma esso può essere realizzato
all'interno dello schema di procedure e algoritmi. Esistono molti manuali sugli algoritmi
paralleli e molti vi fanno ricorso nella programmazione. Ma i teorici che vi si applicano
non tengono conto degli input e degli output; realizzare un programma che lavori in
parallelo e sia interattivo è difficile, ma lo è anche, quasi nella stessa misura, fare
un programma interattivo senza lavoro in parallelo. Esiste una grande differenza tra
occuparsi della questione degli input/output e occuparsi del lavoro in parallelo: una
differenza analoga a quella tra sistemi aperti e chiusi. Un sistema senza input ed output
è un sistema chiuso, e gli algoritmi sono sistemi chiusi, mentre i sistemi con input ed
output sono aperti. Questi ultimi sono difficili da realizzare e sono esattamente la
stessa cosa dei sistemi interattivi.
Domanda 5
Quale sarà la prossima rivoluzione nei modelli e nei linguaggi di programmazione?
Risposta
Credo che la prossima rivoluzione consisterà nel diventare consapevoli del fatto che la
programmazione orientata a oggetti è una rivoluzione, perché si è diffusa l'opinione
che questo tipo di programmazione sia soltanto un modo un po' più efficiente di
realizzare algoritmi. Ora si sta facendo strada la convinzione che la programmazione
orientata a oggetti sia qualcosa di veramente nuovo che darà vita ad una grande
rivoluzione e comporterà, certamente, anche un grande cambiamento di modelli. Basti
pensare a quello che Thomas Khun ha scritto sull'argomento in riferimento alle scienze ed
alla sua idea che i cambiamenti di modello causano problemi rilevanti fra i vecchi
scienziati ed i nuovi. Un grande cambiamento di modello che susciterà molte discussioni
è costituito dal ridimensionamento, nell'ambito della programmazione orientata a oggetti,
del ruolo della logica, che è stato invece esaltato dalla programmazione per algoritmi.
L'attuale generazione di teorici dovrà adattarsi al nuovo punto di vista e ciò potrà
causare problemi perché i teorici vogliono lavorare secondo i vecchi schemi invece di
adattarsi ai nuovi.
Domanda 6
Dal punto di vista delle applicazioni quotidiane, del modo in cui il fruitore finale
utilizzerà questo tipo di programmazione: ritiene che sia già in funzione qualche tipo
di applicazione di programmazione orientata a oggetti?
Risposta
Questa è la ragione per la quale la nuova impostazione è così importante: essa
corrisponde proprio al modo nel quale oggi si fruisce dei programmi. Chi lavora con il
personal computer, con il World Wide Web di Internet, lavora proprio secondo un paradigma
interattivo. Se si analizza cosa fanno questi utenti, emerge che non si dedicano ad
analisi algoritmiche o a quelle della complessità, perché il paradigma vecchio stile,
centrato sugli algoritmi, non riveste più tanta importanza per chi usa il computer
attraverso il personal computer e il Web. Con ciò credo di aver indicato anche il motivo
per il quale il cambiamento di modelli si realizzerà effettivamente: tutti sono coscienti
di usare i computer in modo molto diverso da quello diffuso venti anni fa. Indicare la
differenza tra l'interazione e gli oggetti da un lato, e gli algoritmi e le procedure che
li hanno preceduti, dall'altro, significa caratterizzare tecnicamente la rivoluzione
informatica che si è sviluppata negli ultimi venti anni.
Domanda 7
Lei parlava del World Wide Web e di Internet. Sarà un grande campo di sperimentazione in
fatto di programmazione? Ritiene che vi sia spazio su Internet per la diffusione della
programmazione orientata a oggetti?
Risposta
Sì. E' ciò che sta accadendo nella realtà ed in parte vi facevo cenno: i sistemi
distribuiti stanno diventando molto importanti, in particolare quelli interattivi. Noi non
abbiamo modelli del World Wide Web. Non riusciamo neanche ad avere modelli della
programmazione orientata a oggetti. Al riguardo vi è un famoso detto: "Tutti ne
parlano, ma nessuno sa cosa sia". Io sostengo che non si sappia di cosa si tratti
perché si cerca di usare vecchi modelli per descrivere il nuovo modo di pensare. Per
descrivere i sistemi orientati a oggetti abbiamo bisogno di una nuova generazione di
modelli che si basino sull'interattività. Ciò spiega perché tutti parlano del World
Wide Web, ma nessuno sa esattamente quale modello proporre per esso. Abbiamo bisogno di
una nuova serie di modelli ed affermo che noi comprendiamo in cosa consiste la differenza:
nell'interazione che va a sostituire gli algoritmi. Questo è un modo molto diverso di
guardare alla questione, rispetto ad altre risposte che ponevano l'accento sul lavoro in
parallelo o sulla distribuzione. Riconoscere che la difficoltà consiste nel realizzare
programmi interattivi significa, pertanto, fare un piccolo passo in avanti. E', però,
molto difficile individuare e sviluppare modelli che assicurino l'interazione facendo a
meno di una logica coerente e completa. Un'idea è far ricorso ad interfacce multiple.
Esiste un sistema Microsoft molto interessante, che si chiama Common Object Model, COM
(Modello di oggetto comune): lo considero più avanzato del tradizionale modello orientato
a oggetti. Così io non credo che l'ereditarietà, propria del modello rivolto agli
oggetti in modo tradizionale, sia un modello abbastanza ricco per le relazioni tra le
classi. E' necessario, invece, disporre di interfacce multiple con pochi vincoli i quali,
inoltre, non siano ordinati in modo gerarchico. Alcuni modelli, incluso il Modello di
oggetto comune della Microsoft, vanno in questa direzione. Esistono poi modelli di
progettazione software nei quali, secondo il nuovo modo di fare informatica, l'utente deve
tener conto di ciò che fa l'ingegnere informatico. Nell'Intelligenza Artificiale, vi
sono, inoltre, alcuni modelli molto interessanti, i quali generalizzano sulla base di ciò
che i programmatori stanno realmente facendo, invece di tentare di incasellare tali
attività entro una serie di modelli predefiniti, già disponibili.
Domanda 8
Lei ha menzionato l'intelligenza artificiale. Marvin Minski ha qualificato la
programmazione orientata a oggetti come un modo di realizzare la sua idea di società
della mente. Lei crede che potrebbe esserci interazione tra la programmazione basata
sull'oggetto e la mente?
Risposta
Sì. Ho già lavorato su questo e credo che il nuovo stile di programmazione, il quale
include la società della mente, la parola d'ordine sia programmazione orientata a agenti.
Se si osserva lo sviluppo dell'intelligenza artificiale, negli ultimi cinque anni, c'è
stata una grande svolta dalla logica e dalla ricerca teorica ad un'accresciuta attenzione
al soggetto agente. Questo cambiamento dalla logica e ricerca agli agenti è del tutto
parallelo al mutamento dalle procedure agli oggetti. Nell'intelligenza artificiale sta
accadendo la stessa cosa che si è verificata nella programmazione software ed in entrambi
i casi stiamo passando da un modo di vedere le cose imperniato sugli algoritmi ad un altro
basato sull'interazione.
Domanda 9
Nello sviluppo del software e delle teorie sottostanti ai diversi tipi di sviluppo del
software sono all'opera notevoli interessi economici. Se Lei fosse un investitore che
potesse scegliere in quale tipo di applicazioni, di settori dell'informatica applicata
collocare i propri capitali, quale considererebbe la scelta più fruttuosa?
Risposta
Credo la progettazione incentrata a oggetti e la programmazione orientata a agenti. Ora,
non voglio dare dritte al mercato azionario, ma dirò qualcosa sulla ricerca che ritengo
importante e sui manuali che il pubblico potrebbe voler leggere. Penso, per esempio, che
un ottimo libro sia il manuale sulla tecnica di progettazione orientata a oggetti (OMT,
Object Modelling Technique) di cinque autori. C'è anche un bel libro di Iver Jakobsen,
uno svedese che tratta l'uso dell'analisi dei casi. Credo che un tema molto importante sia
la interoperabilità, lavorare con sistemi eterogenei distribuiti e poter usare
applicazioni modellate su una piattaforma e utilizzarle su un'altra piattaforma. La
interoperabilità è sviluppata in parte dal programma COM di Microsoft ed anche da OLE,
così segnalo anche un altro libro interessante: "Dentro OLE", che riflette un
modo nuovo di pensare. Anche gli oggetti comuni richiedono, inoltre, un'architettura di
mediazione, CORBA: quindi OLE e CORBA sono due termini da tener d'occhio. Un altro punto
importante sono i linguaggi di coordinamento. In aprile si terrà a Cesena, vicino a
Bologna, una conferenza sull'argomento. Su questo tema, che rappresenta un'altra
importante area di ricerca, parlerò in questo convegno organizzato da esperti
dell'Università di Bologna, tra i quali Paolo Ciancarini. Quindi: programmazione
orientata agli oggetti, coordinamento e interoperabilità sono tre novità in espansione.
Domanda 10
Cosa pensa di Java? E' veramente il nuovo linguaggio per sistemi decentrati su Internet,
oppure lo giudica soltanto un primo passo?
Risposta
Ritengo che Java semplifica C++ e si rivelerà una soluzione semplice di uso pratico per
realizzare una programmazione orientata a oggetti nel World Wide Web ed in altri luoghi.
Penso che diventerà molto importante e vorrei dire persino che diventerà il Pascal degli
anni novanta e del decennio successivo. Quindi diverrà un linguaggio molto importante, ma
sarà semplice e probabilmente per applicazioni complicate avremo bisogno di utilizzare
qualcosa di diverso.
Domanda 11
Quindi Lei ritiene che c'è ancora spazio per nuovi linguaggi di programmazione che
possono essere alquanto più complessi.
Risposta
Non sono certo che vi saranno effettivamente linguaggi di programmazione per i nuovi
sistemi, ma credo anche che vi sia spazio per nuovi sistemi; credo anche che Java
diventerà il linguaggio per l'applicazione standard semplice, orientata a oggetti e
distribuita.
Domanda 12
Quale futuro prevede per linguaggi di programmazione come Smalltalk o anche C++?
Risposta
Saranno usati per altri 10 o 15 anni; ma credo che i linguaggi futuri saranno più simili
a Java, faranno uso di sistemi interattivi sul World Wide Web. Proprio come il Fortran è
ancora in uso, anche se non è il linguaggio principale dal punto di vista tecnologico,
così credo che le applicazioni di C++ e Smalltalk avranno probabilmente una vita di altri
15 o 20 anni, ma non rappresenteranno la linea avanzata dei nuovi linguaggi. Penso che
questi saranno del tipo di Java e dei nuovi sistemi dei quali non abbiamo ancora un'idea
precisa; di sicuro però diminuirà l'importanza di un linguaggio di programmazione nei
termini attualmente consueti, disporre di un linguaggio di programmazione di testi avrà
meno importanza. I nuovi sistemi saranno più interattivi - l'azione importante sarà fare
clic su un'operazione piuttosto che scrivere un programma.
|
|