Ir para o conteúdo principal
BiografiaHistória da informáticaIniciante

Barbara Liskov: a abstração que tornou o software modular

Descubra como Barbara Liskov transformou o desenvolvimento de software com tipos abstratos, CLU, o princípio da substituição e sistemas distribuídos tolerantes a falhas.

Publicado 24 de agosto de 2026Leitura : 6 minPor Yann Bastien
Retrato de Barbara Liskov num ambiente universitário dedicado à investigação informática
Mostrar índice
  1. Do cálculo científico à complexidade do software
  2. Abstração de dados: separar contrato e representação
  3. CLU: colocar a abstração dentro da linguagem
  4. Do tipo abstrato ao princípio da substituição
  5. Argus: manter abstrações apesar das falhas
  6. Replicação e tolerância a falhas
  7. Uma contribuição coletiva tornada infraestrutura intelectual
  8. Porque Barbara Liskov continua importante
  9. Cronologia
  10. Perguntas frequentes
  11. O que inventou Barbara Liskov?
  12. O que é um tipo abstrato de dados?
  13. Porque é CLU importante se foi pouco utilizado?
  14. O que diz exatamente o princípio da substituição de Liskov?
  15. Qual é a ligação entre CLU e os sistemas distribuídos de Liskov?

Barbara Liskov dedicou a carreira a uma dificuldade presente em todo o software de grande dimensão: como alterar uma parte de um sistema sem ter de compreender ou reescrever todas as outras? A sua resposta passa por interfaces precisas, representações ocultas e propriedades que os componentes devem continuar a respeitar à medida que evoluem.

Esta abordagem produziu contribuições duradouras. Nos anos 1970, Liskov e a sua equipa no MIT conceberam CLU, a primeira linguagem implementada a integrar diretamente a abstração de dados. Os seus trabalhos sobre hierarquias de tipos conduziram depois ao princípio da substituição que leva o seu nome. Argus, Viewstamped Replication e a investigação sobre tolerância a falhas aplicaram a mesma exigência a programas distribuídos por várias máquinas.

Do cálculo científico à complexidade do software

Barbara Huberman nasceu em 1939 em Los Angeles e cresceu em São Francisco. Estudou matemática na Universidade da Califórnia em Berkeley e, em 1961, entrou na MITRE Corporation como programadora, aprendendo nomeadamente Fortran no trabalho.

Prosseguiu estudos de informática em Stanford sob orientação de John McCarthy. A tese, concluída em 1968, incidia sobre um programa de xadrez. Liskov tornou-se uma das primeiras mulheres nos Estados Unidos a obter um doutoramento atribuído por um departamento de informática.

De regresso à MITRE, trabalhou no sistema experimental Venus. A experiência mostrou-lhe um problema geral: no hardware, as fronteiras entre componentes são visíveis; no software, uma parte pode facilmente depender dos detalhes internos de outra. À medida que o programa cresce, essas dependências tornam cada alteração arriscada.

Abstração de dados: separar contrato e representação

Um tipo abstrato define-se pelas operações que oferece e pelas propriedades que garante, não pela estrutura de dados usada internamente. Uma pilha pode expor operações de inserir, retirar e consultar o topo sem revelar se utiliza um vetor, uma lista ligada ou outra representação.

A separação traz três vantagens: o cliente trabalha com uma interface menor do que a implementação completa; o autor pode alterar a representação sem quebrar os utilizadores; e as propriedades do módulo podem ser explicadas e verificadas de forma independente.

O elemento central é a barreira de abstração: os valores só podem ser criados e observados através das operações autorizadas. A implementação fica realmente escondida.

CLU: colocar a abstração dentro da linguagem

A partir de 1973, o Programming Methodology Group do MIT transformou esta ideia na linguagem experimental CLU, de cluster. Um cluster reúne a representação privada de um tipo e as operações públicas usadas para o manipular.

Liskov dirigiu o projeto, mas CLU foi uma criação coletiva com Alan Snyder, Russell Atkinson, Craig Schaffert e outros investigadores. A linguagem introduziu ou combinou tipos abstratos, tipos parametrizados, iteradores, tratamento estruturado de exceções, gestão automática de memória e objetos por referência.

CLU não se tornou um grande produto industrial, mas influenciou profundamente Ada, C++, Java, C# e muitas linguagens modernas.

Do tipo abstrato ao princípio da substituição

Ocultar a representação não basta quando os tipos formam hierarquias. Se um programa espera um objeto de um tipo e recebe um subtipo, a substituição deve preservar o comportamento esperado.

Em 1987, Liskov formulou uma propriedade de subtipagem comportamental, depois aprofundada com Jeannette Wing. O princípio da substituição de Liskov afirma que um objeto de um subtipo deve poder substituir um objeto do tipo base sem tornar falsas as suposições legítimas do cliente.

Não basta, portanto, ter a mesma interface. Um subtipo não deve exigir mais do chamador, prometer menos como resultado nem violar invariantes anunciados. A ideia esclarece um limite frequente da programação orientada a objetos: a herança só é robusta quando representa uma relação comportamental coerente.

Argus: manter abstrações apesar das falhas

Depois de CLU, Liskov aplicou os mesmos métodos aos sistemas distribuídos. Num programa executado em várias máquinas, uma operação pode ser interrompida por uma avaria ou uma falha de rede. Mesmo assim, os dados e a coerência têm de ser preservados.

Argus, desenvolvido no MIT a partir do fim dos anos 1970, organiza o sistema em torno de guardians. Cada guardian encapsula estado e operações. Ações atómicas agrupam várias alterações: ou têm sucesso em conjunto ou são anuladas.

Argus fornece abstrações para indicar onde está o estado, que operações estão protegidas e como recuperar após falhas, antecipando problemas hoje comuns em serviços distribuídos.

Replicação e tolerância a falhas

Com Brian Oki, Liskov publicou em 1988 Viewstamped Replication, um protocolo que mantém várias cópias coerentes de um serviço. Uma réplica principal ordena as operações; se falhar, as restantes escolhem uma nova vista e continuam sem perder decisões já confirmadas.

O projeto Thor explorou depois uma base de dados orientada a objetos com acesso transacional a objetos persistentes. Mais tarde, Liskov e Miguel Castro trabalharam em tolerância a falhas bizantinas, em que alguns nós podem comportar-se de forma arbitrária.

Estes temas prolongam a mesma questão de CLU: um componente deve oferecer uma garantia compreensível mesmo quando a sua implementação é complexa, distribuída e sujeita a falhas.

Uma contribuição coletiva tornada infraestrutura intelectual

Liskov recebeu o Prémio Turing de 2008 pelas contribuições aos fundamentos práticos e teóricos das linguagens e do desenho de sistemas. CLU dependeu do Programming Methodology Group; o princípio da substituição foi aprofundado com Jeannette Wing; Viewstamped Replication foi criado com Brian Oki; Argus, Thor e os sistemas tolerantes a falhas envolveram muitos colaboradores.

O seu papel distintivo está no fio condutor: partir de um problema concreto de construção de software, formular a abstração necessária, incorporá-la numa linguagem ou sistema e avaliá-la através da implementação.

Porque Barbara Liskov continua importante

O desenvolvimento moderno assenta em fronteiras: APIs públicas, módulos, serviços, tipos, contratos e protocolos. Estas fronteiras permitem que equipas trabalhem separadamente e que uma implementação evolua sem exigir uma reescrita geral.

Os trabalhos de Liskov recordam, porém, que uma fronteira sintática não basta. Um módulo deve esconder os detalhes certos, um subtipo deve preservar o comportamento prometido e um serviço replicado deve manter as suas garantias quando uma máquina desaparece. A abstração não ignora a realidade: contém-na atrás de um contrato explícito.

Cronologia

  • 1939: nascimento de Barbara Huberman em Los Angeles.
  • 1961: licenciatura em matemática em Berkeley e entrada na MITRE.
  • 1968: doutoramento em informática em Stanford com John McCarthy.
  • 1972: entrada no MIT.
  • 1973: início do projeto CLU.
  • 1976: publicação importante sobre os mecanismos de abstração de CLU.
  • Anos 1980: desenvolvimento de Argus.
  • 1987: formulação da propriedade que ficará conhecida como princípio da substituição de Liskov.
  • 1988: Viewstamped Replication com Brian Oki.
  • 1994: formulação aprofundada da subtipagem comportamental com Jeannette Wing.
  • 2008: Prémio Turing.
  • 2018: IEEE Computer Pioneer Award.

Perguntas frequentes

O que inventou Barbara Liskov?

Teve um papel central na abstração de dados, dirigiu a criação de CLU e formulou a propriedade conhecida como princípio da substituição de Liskov. Contribuiu também para Argus, Viewstamped Replication e sistemas de armazenamento distribuído.

O que é um tipo abstrato de dados?

É um tipo definido pelas operações e propriedades que garante, mantendo oculta a representação interna. O cliente pode usar uma pilha, um conjunto ou uma tabela sem depender da estrutura concreta.

Porque é CLU importante se foi pouco utilizado?

Porque permitiu testar numa linguagem completa tipos abstratos, iteradores, exceções e tipos parametrizados, influenciando linguagens posteriores.

O que diz exatamente o princípio da substituição de Liskov?

Um objeto de um subtipo deve poder substituir um objeto do tipo base sem violar as propriedades em que o cliente se apoia. A compatibilidade diz respeito ao comportamento, não apenas aos nomes e assinaturas dos métodos.

Qual é a ligação entre CLU e os sistemas distribuídos de Liskov?

Ambos contêm a complexidade atrás de abstrações explícitas: CLU protege a representação de um tipo; Argus e os protocolos de replicação protegem as garantias de um serviço apesar da concorrência, distribuição e falhas.

Este artigo foi útil?

Fontes e referências

  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

Coleção

Linguagens de programação

20 / 26

  1. 01Grace Hopper: dos primeiros compiladores ao COBOL
  2. 02John Backus: FORTRAN, a notação BNF e a recusa do código de máquina
  3. 03Dennis Ritchie: a linguagem C no coração do Unix
  4. 04FORTRAN: provar que um compilador pode competir com assembly
  5. 05A linguagem C: tornar os sistemas portáteis sem esconder a máquina
  6. 06Niklaus Wirth: de Pascal a Oberon, conceber pela simplicidade
  7. 07Bjarne Stroustrup: conceber C++ sem abdicar do desempenho
  8. 08Pascal: aprender a programar tornando a estrutura visível
  9. 09C++: de C with Classes ao C++ moderno
  10. 10Programação orientada a objetos: objetos, mensagens e abstrações reutilizáveis
  11. 11Guido van Rossum: criar Python para tornar o código legível
  12. 12Brendan Eich: JavaScript, do protótipo da Netscape ao padrão da Web
  13. 13James Gosling: o engenheiro na origem de Java
  14. 14Python: legibilidade, baterias incluídas e um ecossistema global
  15. 15Java: escrever uma vez, executar em qualquer lugar
  16. 16JavaScript: a linguagem que tornou a Web interativa
  17. 17Ken Thompson: de Unix a Go, a simplicidade como método
  18. 18John McCarthy: Lisp e a ideia de programar com símbolos
  19. 19Alan Kay: Smalltalk e o computador como meio pessoal
  20. 20Barbara Liskov: a abstração que tornou o software modular
  21. 21Robin Milner: ML, prova assistida e linguagens da interação
  22. 22Brian Kernighan: AWK, Unix e a arte de explicar código
  23. 23Anders Hejlsberg: de Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, a linguagem que ligou as ferramentas da Internet
  25. 25Yukihiro Matsumoto: Ruby e a felicidade do programador
  26. 26Rasmus Lerdorf: PHP e a democratização da Web dinâmica
HistóriaHistória da informáticaIniciante

C++: de C with Classes ao C++ moderno

De C with Classes aos padrões modernos, descubra como C++ conciliou abstração, programação genérica, compatibilidade e controlo do desempenho.

10 de agosto de 202610 min
BiografiaHistória da informáticaIniciante

James Gosling: o engenheiro na origem de Java

Como James Gosling e a equipa Green da Sun conceberam Java: de Oak às máquinas virtuais e à promessa de portabilidade.

17 de agosto de 20265 min