Torna alle interviste

    Peter Wegner

    Roma, 06/01/1996
    La programmazione orientata a oggetti
  • Wegner dà una definizione della programmazione orientata a oggetti, confrontandola con quella basata sulle procedure (1) .
  • La programmazione orientata a oggetti è più adatta a sviluppare applicazioni interattive (2) .
  • Piuttosto che linguaggi nuovi, ora sono necessari nuovi modelli che descrivano le interazioni dei sistemi (3) .
  • C'è una differenza essenziale tra la programmazione orientata a oggetti e l'elaborazione parallela (4) .
  • La programmazione orientata a oggetti provocherà una notevole rivoluzione di modelli (5) .
  • L'utilizzo sempre più popolare dei personal computer in collegamento con il World Wide Web richiede un paradigma interattivo caratterizzato dall'uso di oggetti (6) .
  • Il World Wide Web svolgerà un ruolo centrale in futuro, anche se non esiste ancora un modello per descriverlo (7) .
  • Nell'intelligenza artificiale è stato introdotto un nuovo stile di programmazione orientata a agenti (8) .
  • Ci sono dei buoni libri per l'introduzione alla teoria degli oggetti nella programmazione (9) .
  • Java è un semplice linguaggio per utilizzare la programmazione orientata a oggetti sul World Wide Web (10) (11) ,
  • mentre C++ e Smalltalk continueranno a essere utilizzati nei prossimi dieci o quindici anni (12) .




  • 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".

    Back

    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à.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back

    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.

    Back torna a inizio pagina