Em computação, uma camada de abstração ou nível de abstração é uma forma de esconder os detalhes de trabalho de um subsistema, permitindo a separação de preocupações para facilitar a interoperabilidade e a independência da plataforma. Exemplos de modelos de software que utilizam camadas de abstração incluem o modelo OSI para protocolos de rede, OpenGL e outras bibliotecas gráficas.
Em computação, uma camada de abstração é uma generalização de um modelo conceitual ou algoritmo, longe de qualquer implementação específica. Estas generalizações surgem de amplas semelhanças que são melhor encapsuladas por modelos que expressam semelhanças presentes em várias implementações específicas. A simplificação proporcionada por uma boa camada de abstração permite a fácil reutilização através da destilação de um conceito ou padrão de design útil para que situações, onde ele pode ser aplicado com precisão, possam ser rapidamente reconhecidas.
Uma camada é considerada em cima de outra se depender dela. Cada camada pode existir sem as camadas acima dela, e requer as camadas abaixo dela para funcionar. Frequentemente as camadas de abstração podem ser compostas em uma hierarquia de níveis de abstração. O modelo OSI é composto por sete camadas de abstração. Cada camada do modelo encapsula e aborda uma parte diferente das necessidades das comunicações digitais, reduzindo assim a complexidade das soluções de engenharia associadas.
Um famoso aforismo de David Wheeler é “Todos os problemas na ciência da computação podem ser resolvidos por outro nível de indireção”. Isto é muitas vezes deliberadamente mal citado com “abstração” em substituição à “indireção”. Também é às vezes mal atribuído a Butler Lampson. O corolário de Kevlin Henney para isto é, “…exceto pelo problema de demasiadas camadas de indireção”
.