Zum Hauptinhalt springen
BiografieGeschichte der InformatikAnfänger

Barbara Liskov: Abstraktion als Grundlage modularer Software

Erfahren Sie, wie Barbara Liskov mit abstrakten Datentypen, CLU, dem Substitutionsprinzip und fehlertoleranten verteilten Systemen die Softwareentwicklung geprägt hat.

Veröffentlicht 24. August 2026Lesezeit : 7 minVon Yann Bastien
Porträt von Barbara Liskov in einem universitären Umfeld der Informatikforschung
Inhalt anzeigen
  1. Vom wissenschaftlichen Rechnen zur Softwarekomplexität
  2. Datenabstraktion: Vertrag und Repräsentation trennen
  3. CLU: Abstraktion in die Sprache einbauen
  4. Vom abstrakten Typ zum Substitutionsprinzip
  5. Argus: Abstraktionen trotz Ausfällen bewahren
  6. Replikation, Objektdatenbanken und Fehlertoleranz
  7. Eine kollektive Leistung als intellektuelle Infrastruktur
  8. Warum Barbara Liskov weiterhin wichtig ist
  9. Chronologie
  10. Häufig gestellte Fragen
  11. Was hat Barbara Liskov erfunden?
  12. Was ist ein abstrakter Datentyp?
  13. Warum ist CLU wichtig, obwohl es wenig verbreitet war?
  14. Was besagt das Liskovsche Substitutionsprinzip genau?
  15. Wie hängen CLU und Liskovs verteilte Systeme zusammen?

Barbara Liskov widmete ihre Laufbahn einer Schwierigkeit, die jede große Software begleitet: Wie lässt sich ein Teil eines Systems verändern, ohne alle anderen Teile verstehen oder neu schreiben zu müssen? Ihre Antwort beruht auf präzisen Schnittstellen, verborgenen Repräsentationen und Eigenschaften, die Komponenten auch bei ihrer Weiterentwicklung bewahren müssen.

Daraus entstanden mehrere dauerhafte Beiträge. In den 1970er-Jahren entwickelten Liskov und ihr Team am MIT CLU, die erste implementierte Sprache, die Datenabstraktion direkt unterstützte. Ihre Arbeiten über Typhierarchien führten später zum nach ihr benannten Substitutionsprinzip. Argus, Viewstamped Replication und ihre Forschung zur Fehlertoleranz übertrugen dieselbe Strenge schließlich auf Programme, die über mehrere Rechner verteilt sind.

Liskov fügte Programmiersprachen also nicht nur neue Funktionen hinzu. Sie half, eine Methode zu definieren: beschreiben, was eine Komponente garantiert, verbergen, wie sie es umsetzt, und diesen Vertrag bewahren, wenn das System wächst.

Vom wissenschaftlichen Rechnen zur Softwarekomplexität

Barbara Huberman wurde 1939 in Los Angeles geboren und wuchs in San Francisco auf. Sie studierte Mathematik an der University of California, Berkeley, und begann 1961 bei der MITRE Corporation als Programmiererin. Informatik als akademisches Fach war noch jung; Fortran lernte sie unter anderem im Beruf.

Anschließend studierte sie Informatik in Stanford bei John McCarthy. Ihre 1968 abgeschlossene Dissertation behandelte ein Schachprogramm. Liskov gehörte damit zu den ersten Frauen in den USA, die an einem Informatikfachbereich promovierten.

Zurück bei MITRE arbeitete sie am experimentellen Venus-System. Dabei stieß sie auf ein allgemeineres Problem: Hardware besitzt sichtbare Grenzen zwischen Komponenten, in Software kann dagegen ein Teil leicht von internen Details eines anderen abhängen. Mit wachsendem Programm machen solche Abhängigkeiten jede Änderung riskanter.

Als Liskov Anfang der 1970er-Jahre ans MIT wechselte, suchte sie deshalb nach sprachlichen und methodischen Regeln, die Software ähnlich modular machen konnten.

Datenabstraktion: Vertrag und Repräsentation trennen

Ein abstrakter Datentyp wird durch die angebotenen Operationen und deren Eigenschaften definiert, nicht durch die intern verwendete Datenstruktur. Ein Stack kann etwa push, pop und top anbieten. Client-Code soll über dieses Verhalten nachdenken können, ohne zu wissen, ob intern ein Array, eine verkettete Liste oder etwas anderes verwendet wird.

Diese Trennung bringt drei miteinander verbundene Vorteile:

  • der Client arbeitet mit einer kleineren Schnittstelle als mit der vollständigen Implementierung;
  • die interne Repräsentation kann geändert werden, ohne Nutzer zu brechen;
  • die Eigenschaften des Moduls lassen sich unabhängig vom restlichen System erklären und prüfen.

Entscheidend ist die Abstraktionsbarriere: Werte eines Typs können nur über erlaubte Operationen erzeugt und beobachtet werden. Die Implementierung ist wirklich verborgen und nicht bloß eine Konvention, die jeder Aufrufer umgehen könnte.

Heute prägt dieses Denken Klassen, Module, Bibliotheken und APIs. Anfang der 1970er-Jahre musste jedoch erst gezeigt werden, wie eine Sprache solche Grenzen erzwingen und wie ein ganzes System daraus aufgebaut werden konnte.

CLU: Abstraktion in die Sprache einbauen

Ab 1973 verwandelte die Programming Methodology Group des MIT diese Idee in die experimentelle Sprache CLU. Der Name stammt von cluster: Ein Cluster bündelt die private Repräsentation eines Typs und die öffentlichen Operationen, mit denen er verwendet wird.

Liskov leitete das Projekt, doch CLU war Gemeinschaftsarbeit. Alan Snyder, Russell Atkinson, Craig Schaffert und weitere Studierende und Forschende wirkten an Entwurf, Compiler, Umgebung und Dokumentation mit. Ziel war, die Ideen an realen Programmen zu erproben.

CLU führte mehrere Mechanismen ein oder kombinierte sie auf neue Weise:

  • abstrakte Typen mit verborgener Repräsentation;
  • parametrisierte Typen für generische Sammlungen;
  • Iteratoren, die Strukturen durchlaufen, ohne deren Aufbau offenzulegen;
  • strukturierte Ausnahmebehandlung;
  • automatische Speicherverwaltung und Referenzobjekte.

CLU wurde kein großes Industrieprodukt. Dennoch beeinflussten seine Konzepte Ada, C++, Java, C# und viele moderne Sprachen.

Vom abstrakten Typ zum Substitutionsprinzip

Eine verborgene Repräsentation reicht bei Typhierarchien nicht aus. Wenn ein Programm ein Objekt eines Basistyps erwartet und ein Objekt eines Untertyps erhält, muss dieser Ersatz sicher bleiben. Gleiche Methodennamen allein garantieren kein kompatibles Verhalten.

Liskov formulierte 1987 eine Eigenschaft des verhaltensbasierten Subtypings, die sie später mit Jeannette Wing vertiefte. Praktisch besagt das Liskovsche Substitutionsprinzip, dass ein Objekt eines Untertyps ein Objekt des Basistyps ersetzen können muss, ohne Annahmen zu verletzen, auf die sich der Client berechtigterweise verlässt.

Angenommen, ein Typ Konto garantiert, dass ein zulässiger Auszahlungsbetrag vom Guthaben abgezogen wird. Ein Untertyp, der solche Auszahlungen willkürlich verweigert, ist kein korrekter Ersatz, auch wenn er eine gleichnamige Methode besitzt. Er verschärft eine Vorbedingung, mit der der Client nicht rechnen musste.

Das Prinzip verlangt daher mehr als eine identische Schnittstelle: Ein Untertyp darf vom Aufrufer nicht mehr verlangen, weniger versprechen oder angekündigte Invarianten brechen.

Diese Idee zeigt eine Grenze der objektorientierten Programmierung. Vererbung ist nur dann robust, wenn die Hierarchie eine kohärente Verhaltensbeziehung ausdrückt. Andernfalls sind Komposition oder getrennte Abstraktionen oft besser.

Argus: Abstraktionen trotz Ausfällen bewahren

Nach CLU wandte Liskov ihre Methoden auf verteilte Systeme an. In einem Programm auf mehreren Rechnern können Operationen durch Ausfälle oder Netzwerkunterbrechungen gestoppt werden. Manche Teile laufen weiter, während andere unerreichbar werden. Daten und Konsistenz müssen trotzdem erhalten bleiben.

Die ab Ende der 1970er-Jahre am MIT entwickelte Sprache Argus organisiert ein System um Guardians. Jeder Guardian kapselt Zustand und die darauf zugreifenden Operationen. Atomare Aktionen gruppieren Änderungen so, dass sie gemeinsam erfolgreich sein oder zurückgenommen werden müssen.

Argus beseitigt Ausfälle nicht, gibt Programmierenden aber Abstraktionen dafür, wo Zustand liegt, welche Operationen geschützt sind und wie sich Berechnungen erholen. Das nimmt moderne Systeme vorweg, in denen Transaktionen, Dienste und Replikation zusammenarbeiten.

Replikation, Objektdatenbanken und Fehlertoleranz

Mit Brian Oki veröffentlichte Liskov 1988 Viewstamped Replication, ein Protokoll, das mehrere konsistente Kopien eines Dienstes verwaltet. Eine primäre Replik ordnet Operationen; fällt sie aus, müssen die übrigen eine neue Sicht wählen und fortfahren, ohne bereits bestätigte Entscheidungen zu verlieren.

Das Protokoll gehört zur Familie der State-Machine-Replikation, auf der heute hochverfügbare verteilte Dienste beruhen. Später untersuchte das Projekt Thor transaktionalen Zugriff auf persistente Objekte. Mit Miguel Castro arbeitete Liskov außerdem an byzantinischer Fehlertoleranz, bei der Knoten sich beliebig fehlerhaft verhalten können.

Diese Themen wirken weit von CLU entfernt, verfolgen aber dieselbe Frage: Eine Komponente muss verständliche Garantien bieten, selbst wenn ihre Implementierung komplex, verteilt und ausfallgefährdet ist.

Eine kollektive Leistung als intellektuelle Infrastruktur

Liskov erhielt 2008 den Turing Award für Beiträge zu praktischen und theoretischen Grundlagen von Programmiersprachen und Systementwurf. CLU beruhte auf der Programming Methodology Group, das Substitutionsprinzip wurde mit Jeannette Wing vertieft, Viewstamped Replication mit Brian Oki entwickelt und Argus, Thor sowie Fehlertoleranzsysteme entstanden mit vielen Mitarbeitenden.

Ihr besonderer Beitrag liegt im roten Faden: Sie beginnt bei einem konkreten Softwareproblem, formuliert die notwendige Abstraktion, baut sie in eine Sprache oder ein System ein und prüft sie durch Implementierung.

Darum bleibt CLU trotz begrenzter Verbreitung wichtig. Eine Forschungssprache kann Informatik verändern, ohne dominant zu werden: Sie macht Ideen testbar, zeigt Grenzen und liefert Begriffe, die andere Ökosysteme übernehmen.

Warum Barbara Liskov weiterhin wichtig ist

Moderne Entwicklung beruht auf Grenzen: öffentlichen APIs, Modulen, Diensten, Typen, Verträgen und Protokollen. Sie erlauben Teams, unabhängig zu arbeiten und Implementierungen zu verändern, ohne alles neu zu schreiben.

Liskovs Arbeiten erinnern daran, dass eine syntaktische Grenze nicht genügt. Ein Modul muss die richtigen Details verbergen. Ein Untertyp muss versprochenes Verhalten erhalten. Ein replizierter Dienst muss seine Garantien bewahren, wenn ein Rechner ausfällt. Abstraktion ignoriert die Realität nicht; sie kapselt sie hinter einem expliziten Vertrag.

Ob Sammlung im Speicher oder Dienst über mehrere Rechenzentren: Die zentrale Frage bleibt dieselbe - auf welche Eigenschaften darf sich der Rest des Programms verlassen?

Chronologie

  • 1939: Geburt von Barbara Huberman in Los Angeles.
  • 1961: Mathematikabschluss in Berkeley und Beginn als Programmiererin bei MITRE.
  • 1968: Promotion in Informatik in Stanford bei John McCarthy.
  • 1972: Wechsel ans MIT.
  • 1973: Start des CLU-Projekts.
  • 1976: wichtige Veröffentlichung über CLUs Abstraktionsmechanismen.
  • 1980er-Jahre: Entwicklung von Argus für verteilte Programmierung und atomare Aktionen.
  • 1987: Formulierung des später so genannten Liskovschen Substitutionsprinzips.
  • 1988: Viewstamped Replication mit Brian Oki.
  • 1994: vertiefte Formulierung des verhaltensbasierten Subtypings mit Jeannette Wing.
  • 2008: Turing Award.
  • 2018: IEEE Computer Pioneer Award.

Häufig gestellte Fragen

Was hat Barbara Liskov erfunden?

Sie spielte eine zentrale Rolle bei der Formulierung der Datenabstraktion, leitete die Entwicklung von CLU und formulierte die Eigenschaft, die als Liskovsches Substitutionsprinzip bekannt wurde. Außerdem trug sie zu Argus, Viewstamped Replication und verteilten Speichersystemen bei.

Was ist ein abstrakter Datentyp?

Ein Typ, der durch seine Operationen und garantierten Eigenschaften definiert wird, während seine interne Repräsentation verborgen bleibt. Client-Code kann dadurch etwa einen Stack oder eine Menge verwenden, ohne von deren konkreter Implementierung abzuhängen.

Warum ist CLU wichtig, obwohl es wenig verbreitet war?

CLU erprobte abstrakte Typen, Iteratoren, Ausnahmen und parametrisierte Typen in einer vollständigen Sprache. Diese Mechanismen beeinflussten spätere Sprachen und Programmierpraktiken.

Was besagt das Liskovsche Substitutionsprinzip genau?

Ein Objekt eines Untertyps muss ein Objekt des Basistyps ersetzen können, ohne Eigenschaften zu verletzen, auf die sich der Client verlässt. Kompatibilität betrifft also versprochenes Verhalten und nicht nur Methodennamen und Signaturen.

Wie hängen CLU und Liskovs verteilte Systeme zusammen?

Beide kapseln Komplexität hinter expliziten Abstraktionen. CLU schützt die Repräsentation eines Typs; Argus und Replikationsprotokolle schützen die Garantien eines Dienstes trotz Parallelität, Verteilung und Ausfällen.

War dieser Artikel hilfreich?

Quellen und Referenzen

  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

Sammlung

Programmiersprachen

20 / 26

  1. 01Grace Hopper: von frühen Compilern zu COBOL
  2. 02John Backus: FORTRAN, BNF und die Abkehr vom Maschinencode
  3. 03Dennis Ritchie: die Sprache C im Herzen von Unix
  4. 04FORTRAN: der Beweis, dass ein Compiler mit Assembler konkurrieren kann
  5. 05Die Sprache C: Systeme portabel machen, ohne die Maschine zu verbergen
  6. 06Niklaus Wirth: von Pascal bis Oberon – Entwurf durch Einfachheit
  7. 07Bjarne Stroustrup: C++ entwerfen, ohne auf Leistung zu verzichten
  8. 08Pascal: Programmieren lernen, indem Struktur sichtbar wird
  9. 09C++: von C with Classes zum modernen C++
  10. 10Objektorientierte Programmierung: Objekte, Nachrichten und wiederverwendbare Abstraktionen
  11. 11Guido van Rossum: Python für lesbaren Code entwickeln
  12. 12Brendan Eich: JavaScript vom Netscape-Prototyp zum Webstandard
  13. 13James Gosling: der Ingenieur hinter Java
  14. 14Python: Lesbarkeit, Batteries included und ein globales Ökosystem
  15. 15Java: einmal schreiben, überall ausführen
  16. 16JavaScript: die Sprache, die das Web interaktiv machte
  17. 17Ken Thompson: von Unix bis Go, Einfachheit als Methode
  18. 18John McCarthy: Lisp und die Idee, mit Symbolen zu programmieren
  19. 19Alan Kay: Smalltalk und der Computer als persönliches Medium
  20. 20Barbara Liskov: Abstraktion als Grundlage modularer Software
  21. 21Robin Milner: ML, rechnergestützte Beweise und Sprachen der Interaktion
  22. 22Brian Kernighan: AWK, Unix und die Kunst, Code zu erklären
  23. 23Anders Hejlsberg: von Turbo Pascal zu C# und TypeScript
  24. 24Larry Wall: Perl, die Sprache, die die Werkzeuge des Internets verband
  25. 25Yukihiro Matsumoto: Ruby und das Glück der Programmierenden
  26. 26Rasmus Lerdorf: PHP und die Demokratisierung des dynamischen Webs
GeschichteGeschichte der InformatikAnfänger

C++: von C with Classes zum modernen C++

Von C with Classes bis zu modernen Standards: Wie C++ Abstraktion, generische Programmierung, Kompatibilität und Leistungskontrolle miteinander verbindet.

10. August 20269 min
BiografieGeschichte der InformatikAnfänger

James Gosling: der Ingenieur hinter Java

Wie James Gosling und Suns Green-Team Java entwickelten: von Oak über virtuelle Maschinen bis zum Versprechen der Portabilität.

17. August 20265 min