Menu
Coddy logo textTech

O que é abstração em programação?

Em programação, abstração significa esconder os detalhes de como algo funciona por trás de uma interface mais simples, para que você possa usá-lo sabendo só o que ele faz. Chamar sorted(names) ordena uma lista sem que você escreva, ou sequer veja, o algoritmo de ordenação.

Por Kevin Spektor, Cofundador e CTO

Atualizado em 24 de setembro de 2026

Quando você escreve print("hi"), não pensa em como essas letras chegam à tela. Por baixo dessa única linha, o Python transforma o texto em bytes e pede ao sistema operacional que os escreva, o sistema operacional os entrega ao seu terminal, e o terminal desenha cada letra como pixels usando uma fonte. Cada camada oferece à camada de cima uma promessa simples e esconde como cumpre essa promessa. Esse esconder é a abstração, e todo programa está apoiado em muitas camadas assim.

Níveis de abstração

NívelCom o que você trabalhaO que ele esconde
O seu programaprint("hi"), sorted(names)Como a biblioteca faz o trabalho
O Python e a biblioteca padrãoStrings, listas, arquivosGerenciamento de memória, chamadas de sistema
O interpretador (CPython)BytecodeO código C e o código de máquina que o executam
Sistema operacionalArquivos, processosBlocos de disco, drivers de dispositivo, escalonamento da CPU
HardwareInstruções de máquinaTransistores e sinais elétricos

Cada nível é construído a partir do nível de baixo e pode ser entendido sem ele. Você consegue escrever Python que funciona sem saber o que é um bloco de disco, e o sistema operacional consegue armazenar um arquivo sem saber que ele contém código Python.

Como a abstração funciona no código

Os programadores constroem as próprias camadas de duas formas principais.

A abstração procedural é uma função. O nome, os parâmetros e o valor de retorno são a interface; o corpo é o detalhe escondido. Depois que average(scores) existe, o resto do programa a usa sem ler como ela soma e divide.

A abstração de dados define um tipo pelo que você pode fazer com ele, não por como ele guarda as coisas. Uma fila é "acrescentar no fim, retirar do começo". Como os itens ficam na memória é uma decisão privada:

serving soup
serving pasta
serving cake

O código no final não sabe nada sobre deque. Se você o trocar por uma lista comum e pop(0), a saída é idêntica, só mais lenta para filas longas, porque remover o primeiro item de uma lista move todos os outros itens. A interface continuou a mesma, então nada fora da classe precisou mudar.

Classes abstratas e interfaces

Na programação orientada a objetos, abstração costuma significar declarar o que uma família de classes precisa fazer e deixar o como para cada classe. Em Python, o módulo abc marca um método como abstrato; uma classe com um método abstrato não implementado não pode ser instanciada:

email to ana@example.com: Your package arrives today
sms to +15550100: Your package arrives today
Notifier is abstract: create an Email or an SMS instead

remind() depende só da abstração: qualquer coisa que tenha um método send. Acrescentar notificações push significa escrever uma classe nova, e remind() fica intocada. Esse último passo, uma chamada executando código diferente para classes diferentes, é o polimorfismo: a abstração define a interface comum, o polimorfismo a faz funcionar.

O Java tem as mesmas ferramentas como palavras-chave:

interface Notifier {
    void send(String to, String text);
}

class Email implements Notifier {
    public void send(String to, String text) { /* talk to the mail server */ }
}

Escrever new Notifier() é um erro de compilação, porque uma interface não tem implementação para executar. A documentação explica em detalhe classes abstratas e interfaces em Java.

Abstração e encapsulamento

As duas ideias aparecem juntas com tanta frequência que é fácil confundi-las.

AbstraçãoEncapsulamento
Pergunta que respondeO que isto faz?Quem pode mexer nos dados?
FocoA interface: as operações oferecidasO interior: os dados por trás da interface
Ferramentas principaisFunções, classes abstratas, interfaces, módulosprivate, _name, propriedades, #fields
ExemploNotifier.send() funciona para e-mail e SMS_balance só muda por meio de withdraw()
NívelProjetoImplementação

A abstração decide quais operações mostrar; o encapsulamento garante que o resto fique escondido. A Queue acima faz as duas coisas: add e next são a abstração, e o sublinhado em _items é o encapsulamento.

Abstrações que vazam e outros erros

Joel Spolsky deu nome à lei das abstrações que vazam (law of leaky abstractions) em 2002: toda abstração não trivial deixa passar parte do detalhe escondido. Os números de ponto flutuante são o vazamento clássico. Eles parecem decimais comuns, até que o armazenamento binário por baixo aparece:

0.30000000000000004
False

Nem 0,1 nem 0,2 podem ser armazenados exatamente em bits binários, então a soma sai um pouco errada. Você pode usar floats por anos sem pensar nisso, mas não para sempre, e é por isso que ajuda conhecer uma camada abaixo daquela em que você trabalha.

Dois outros erros são comuns:

  • Abstrair cedo demais. Uma hierarquia de classes construída para casos que nunca chegam é código extra para ler e mudar. Sandi Metz resumiu assim: "duplicação é muito mais barata do que a abstração errada".
  • Confundir abstração com a palavra-chave abstract. Classes abstratas são uma ferramenta. Toda função com um bom nome também é uma abstração.

Próximos passos

Leia encapsulamento e polimorfismo para completar o quadro da orientação a objetos. A página de sistema operacional mostra a maior abstração de que os seus programas dependem. Para praticar, o curso de Python constrói classes e funções desde o início, e o curso de Java cobre classes abstratas e interfaces.

Perguntas frequentes

Qual é um exemplo de abstração?
Uma função é o exemplo mais simples: você chama len(items) sabendo o que ela devolve, não como o Python conta. Os pedais de um carro são a versão do dia a dia, já que você controla a velocidade sem saber como o motor queima o combustível. Em código orientado a objetos, uma interface como Notifier, com um único método send, é uma abstração sobre e-mail, SMS e notificações push.
O que é abstração em Python?
Toda função, classe e módulo em Python é uma abstração sobre o código dentro dele. Para uma versão formal, o módulo padrão abc permite declarar uma classe base abstrata com @abstractmethod; o Python então se recusa a criar objetos dessa classe, ou de qualquer subclasse que não tenha implementado todos os métodos abstratos.
O que é abstração em Java?
O Java expressa a abstração com classes abstratas e interfaces. Uma classe abstrata pode conter métodos abstratos, que não têm corpo e precisam ser implementados pelas subclasses, e ela não pode ser instanciada com new. Uma interface lista métodos que toda classe que a implementa precisa fornecer, e uma classe pode implementar várias interfaces.
Quais são os quatro pilares da orientação a objetos?
Encapsulamento, abstração, herança e polimorfismo. O encapsulamento protege os dados de um objeto, a abstração expõe só o que o objeto faz, a herança permite que uma classe reutilize o código de outra, e o polimorfismo permite que um trecho de código funcione com muitos tipos por meio de uma interface comum.
A abstração pode piorar o código?
Sim, quando chega cedo demais ou esconde a coisa errada. Código construído para casos que nunca chegam tem camadas extras para ler e mudar sem benefício nenhum. Uma orientação comum é esperar até ter escrito um código parecido duas ou três vezes, para que a forma comum fique clara antes de você dar um nome a ela.
Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR