Vai al contenuto principale
BiografiaStoria dell’informaticaPrincipiante

Barbara Liskov: l'astrazione che ha reso modulare il software

Scopri come Barbara Liskov ha trasformato la progettazione del software con i tipi astratti, CLU, il principio di sostituzione e i sistemi distribuiti tolleranti ai guasti.

Pubblicato 24 agosto 2026Lettura : 6 minDi Yann Bastien
Ritratto di Barbara Liskov in un ambiente universitario dedicato alla ricerca informatica
Mostra indice
  1. Dal calcolo scientifico alla complessità del software
  2. Astrazione dei dati: separare contratto e rappresentazione
  3. CLU: incorporare l’astrazione nel linguaggio
  4. Dal tipo astratto al principio di sostituzione
  5. Argus: mantenere le astrazioni nonostante i guasti
  6. Replicazione e tolleranza ai guasti
  7. Un contributo collettivo diventato infrastruttura intellettuale
  8. Perché Barbara Liskov conta ancora oggi
  9. Cronologia
  10. Domande frequenti
  11. Che cosa ha inventato Barbara Liskov?
  12. Che cos’è un tipo astratto di dati?
  13. Perché CLU è importante se è stato poco usato?
  14. Che cosa dice il principio di sostituzione di Liskov?
  15. Qual è il legame tra CLU e i sistemi distribuiti di Liskov?

Barbara Liskov ha dedicato la propria carriera a una difficoltà che accompagna ogni grande software: come modificare una parte di un sistema senza dover comprendere o riscrivere tutte le altre? La sua risposta passa attraverso interfacce precise, rappresentazioni nascoste e proprietà che i componenti devono continuare a rispettare mentre evolvono.

Da questo approccio sono nati contributi duraturi. Negli anni Settanta Liskov e il suo gruppo al MIT progettano CLU, il primo linguaggio implementato che integra direttamente l’astrazione dei dati. I suoi lavori sulle gerarchie di tipi conducono poi al principio di sostituzione che porta il suo nome. Argus, Viewstamped Replication e le ricerche sulla tolleranza ai guasti applicano infine la stessa esigenza ai programmi distribuiti su più macchine.

Dal calcolo scientifico alla complessità del software

Barbara Huberman nasce nel 1939 a Los Angeles e cresce a San Francisco. Studia matematica alla University of California, Berkeley, e nel 1961 entra alla MITRE Corporation come programmatrice, imparando tra l’altro Fortran sul lavoro.

Prosegue gli studi di informatica a Stanford sotto la guida di John McCarthy. La sua tesi, completata nel 1968, riguarda un programma di scacchi. Liskov diventa una delle prime donne negli Stati Uniti a ottenere un dottorato da un dipartimento di informatica.

Tornata alla MITRE, lavora al sistema sperimentale Venus e incontra un problema generale: nell’hardware i confini tra componenti sono visibili, mentre nel software una parte può facilmente dipendere dai dettagli interni di un’altra. Con la crescita del programma, queste dipendenze rendono ogni modifica rischiosa.

Astrazione dei dati: separare contratto e rappresentazione

Un tipo astratto è definito dalle operazioni che offre e dalle proprietà che garantisce, non dalla struttura usata internamente. Una pila può esporre operazioni come inserimento, estrazione e cima senza rivelare se usa un array o una lista concatenata.

La separazione offre tre vantaggi: il client usa un’interfaccia più piccola dell’implementazione completa; l’autore può cambiare la rappresentazione senza rompere gli utenti; le proprietà del modulo possono essere spiegate e verificate separatamente.

Il punto centrale è la barriera di astrazione: i valori del tipo possono essere creati e osservati soltanto attraverso le operazioni autorizzate. L’implementazione diventa realmente nascosta.

CLU: incorporare l’astrazione nel linguaggio

Dal 1973 il Programming Methodology Group del MIT trasforma l’idea nel linguaggio sperimentale CLU, da cluster. Un cluster riunisce la rappresentazione privata di un tipo e le operazioni pubbliche che lo manipolano.

Liskov dirige il progetto, ma CLU è un’opera collettiva con Alan Snyder, Russell Atkinson, Craig Schaffert e altri ricercatori. Il linguaggio introduce o combina tipi astratti, tipi parametrizzati, iteratori, gestione strutturata delle eccezioni, memoria automatica e oggetti accessibili per riferimento.

CLU non diventa un grande prodotto industriale, ma influenza profondamente Ada, C++, Java, C# e molti linguaggi moderni.

Dal tipo astratto al principio di sostituzione

Nascondere la rappresentazione non basta quando i tipi formano gerarchie. Se un programma si aspetta un oggetto di un tipo e riceve un sottotipo, la sostituzione deve preservare il comportamento atteso.

Nel 1987 Liskov formula una proprietà di sottotipizzazione comportamentale, poi approfondita con Jeannette Wing. Il principio di sostituzione di Liskov afferma che un oggetto di un sottotipo deve poter sostituire un oggetto del tipo base senza rendere false le assunzioni legittime del client.

Non basta quindi avere la stessa interfaccia: il sottotipo non deve richiedere di più al chiamante, promettere di meno come risultato o violare gli invarianti annunciati. Questa idea chiarisce un limite frequente della programmazione orientata agli oggetti: l’ereditarietà è robusta solo quando rappresenta una relazione comportamentale coerente.

Argus: mantenere le astrazioni nonostante i guasti

Dopo CLU, Liskov applica gli stessi metodi ai sistemi distribuiti. In un programma eseguito su più macchine, un’operazione può essere interrotta da un guasto o dalla rete. Il sistema deve comunque proteggere dati e coerenza.

Argus, sviluppato al MIT dalla fine degli anni Settanta, organizza il sistema attorno a guardians che incapsulano stato e operazioni. Le azioni atomiche raggruppano più modifiche: devono riuscire insieme oppure essere annullate.

Argus fornisce quindi astrazioni per descrivere dove si trova lo stato, quali operazioni sono protette e come recuperare dopo un errore, anticipando problemi oggi comuni nei servizi distribuiti.

Replicazione e tolleranza ai guasti

Con Brian Oki, Liskov pubblica nel 1988 Viewstamped Replication, un protocollo che mantiene copie coerenti di un servizio. Una replica primaria ordina le operazioni; se fallisce, le altre scelgono una nuova vista e continuano senza perdere decisioni già confermate.

Il progetto Thor esplora poi un database a oggetti persistenti e transazionali. Più tardi Liskov e Miguel Castro lavorano sulla tolleranza ai guasti bizantini, in cui alcuni nodi possono comportarsi in modo arbitrario.

Il filo conduttore resta quello di CLU: una componente deve offrire una garanzia comprensibile anche quando la sua implementazione è complessa, distribuita e soggetta a guasti.

Un contributo collettivo diventato infrastruttura intellettuale

Liskov riceve il premio Turing 2008 per i contributi ai fondamenti pratici e teorici dei linguaggi e della progettazione dei sistemi. CLU dipende dal Programming Methodology Group; il principio di sostituzione viene approfondito con Jeannette Wing; Viewstamped Replication nasce con Brian Oki; Argus, Thor e gli altri sistemi coinvolgono numerosi collaboratori.

Il ruolo distintivo di Liskov consiste nel mantenere un filo tra questi lavori: partire da un problema concreto, formulare l’astrazione necessaria, incorporarla in un linguaggio o sistema e valutarla attraverso un’implementazione reale.

Perché Barbara Liskov conta ancora oggi

Lo sviluppo moderno poggia su confini: API pubbliche, moduli, servizi, tipi, contratti e protocolli. Questi confini consentono a più gruppi di lavorare separatamente e a un’implementazione di evolvere senza imporre una riscrittura generale.

I lavori di Liskov ricordano però che un confine sintattico non basta. Un modulo deve nascondere i dettagli giusti, un sottotipo deve conservare il comportamento promesso e un servizio replicato deve mantenere le proprie garanzie quando una macchina scompare. L’astrazione non ignora la realtà: la contiene dietro un contratto esplicito.

Cronologia

  • 1939: nascita di Barbara Huberman a Los Angeles.
  • 1961: laurea in matematica a Berkeley e ingresso alla MITRE.
  • 1968: dottorato in informatica a Stanford con John McCarthy.
  • 1972: ingresso al MIT.
  • 1973: avvio del progetto CLU.
  • 1976: importante pubblicazione sui meccanismi di astrazione di CLU.
  • Anni 1980: sviluppo di Argus.
  • 1987: formulazione della proprietà poi nota come principio di sostituzione di Liskov.
  • 1988: Viewstamped Replication con Brian Oki.
  • 1994: formulazione approfondita della sottotipizzazione comportamentale con Jeannette Wing.
  • 2008: premio Turing.
  • 2018: IEEE Computer Pioneer Award.

Domande frequenti

Che cosa ha inventato Barbara Liskov?

Ha avuto un ruolo centrale nell’astrazione dei dati, ha diretto CLU e ha formulato la proprietà nota come principio di sostituzione di Liskov. Ha inoltre contribuito ad Argus, Viewstamped Replication e a sistemi di archiviazione distribuiti.

Che cos’è un tipo astratto di dati?

È un tipo definito dalle operazioni e dalle proprietà garantite, mentre la rappresentazione interna resta nascosta. Il client può quindi usare una pila, un insieme o una tabella senza dipendere dalla struttura concreta.

Perché CLU è importante se è stato poco usato?

Perché ha permesso di sperimentare in un linguaggio completo tipi astratti, iteratori, eccezioni e tipi parametrizzati, influenzando linguaggi successivi.

Che cosa dice il principio di sostituzione di Liskov?

Un oggetto di un sottotipo deve poter sostituire un oggetto del tipo base senza violare le proprietà su cui si basa il client. La compatibilità riguarda quindi il comportamento, non solo nomi e firme dei metodi.

Qual è il legame tra CLU e i sistemi distribuiti di Liskov?

Entrambi contengono la complessità dietro astrazioni esplicite: CLU protegge la rappresentazione di un tipo, mentre Argus e i protocolli di replicazione proteggono le garanzie di un servizio nonostante concorrenza, distribuzione e guasti.

Questo articolo ti è stato utile?

Fonti e riferimenti

  1. 1.MIT CSAIL --- Barbara Liskov
  2. 2.Barbara Liskov --- A History of CLU
  3. 3.ACM --- Interview with Barbara Liskov
  4. 4.MIT Infinite History --- Barbara Liskov
  5. 5.MIT CSAIL --- Liskov Honored With SIGOPS Hall of Fame Award

Raccolta

Linguaggi di programmazione

20 / 26

  1. 01Grace Hopper: dai primi compilatori a COBOL
  2. 02John Backus: FORTRAN, la notazione BNF e il rifiuto del codice macchina
  3. 03Dennis Ritchie: il linguaggio C al cuore di Unix
  4. 04FORTRAN: dimostrare che un compilatore può competere con l'assembly
  5. 05Il linguaggio C: rendere portabili i sistemi senza nascondere la macchina
  6. 06Niklaus Wirth: da Pascal a Oberon, progettare con la semplicità
  7. 07Bjarne Stroustrup: progettare C++ senza rinunciare alle prestazioni
  8. 08Pascal: imparare a programmare rendendo visibile la struttura
  9. 09C++: da C with Classes al C++ moderno
  10. 10Programmazione orientata agli oggetti: oggetti, messaggi e astrazioni riutilizzabili
  11. 11Guido van Rossum: creare Python per rendere il codice leggibile
  12. 12Brendan Eich: JavaScript, dal prototipo Netscape allo standard del Web
  13. 13James Gosling: l'ingegnere all'origine di Java
  14. 14Python: leggibilità, batterie incluse e un ecosistema globale
  15. 15Java: scrivere una volta, eseguire ovunque
  16. 16JavaScript: il linguaggio che ha reso interattivo il Web
  17. 17Ken Thompson: da Unix a Go, la semplicità come metodo
  18. 18John McCarthy: Lisp e l'idea di programmare con i simboli
  19. 19Alan Kay: Smalltalk e il computer come medium personale
  20. 20Barbara Liskov: l'astrazione che ha reso modulare il software
  21. 21Robin Milner: ML, dimostrazione assistita e linguaggi dell'interazione
  22. 22Brian Kernighan: AWK, Unix e l'arte di spiegare il codice
  23. 23Anders Hejlsberg: da Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, il linguaggio che ha collegato gli strumenti di Internet
  25. 25Yukihiro Matsumoto: Ruby e la felicità del programmatore
  26. 26Rasmus Lerdorf: PHP e la democratizzazione del Web dinamico
StoriaStoria dell’informaticaPrincipiante

C++: da C with Classes al C++ moderno

Da C with Classes agli standard moderni: come C++ ha conciliato astrazione, programmazione generica, compatibilità e controllo delle prestazioni.

10 agosto 202610 min
BiografiaStoria dell’informaticaPrincipiante

James Gosling: l'ingegnere all'origine di Java

Come James Gosling e il team Green di Sun progettarono Java: da Oak alle macchine virtuali e alla promessa della portabilità.

17 agosto 20265 min