AbstractNormalmente, quando a Orientação a Objetos (OO) é explicada aos que estão iniciando os estudos sobre o assunto, os termos que são depreendidos mais tempo para explicação são: (i) Herança, (ii) Encapsulamento, (iii) Polimorfismo e (iv) Abstração. Além desses conceitos faz parte das maiorias das explicações os benefícios advindo dela, como: reúso e a modularização de software.
No entanto, apesar da abstração ser um dos termos que faz parte das explicações, no meu entendimento, ela errôneamente não é o foco das discussões que recaem sobre sobre os conceitos: polimorfismo, encapsulamento e herança, já que esses conceitos são mais fáceis de serem demonstrados através da escrita do código fonte, talvez seja por isso, que o ensino da O.O esteja na sua grande maioria atrelada a uma linguagem de programação.
Além disso, o que observo é que muitas pessoas pensam que a abstração é algo inerente apenas a Orientação a Objetos, o que está longe de ser verdade. A abstração também está presente nos demais paradigmas de programação. Aliás, nós, serem humanos, possuímos uma incrível capacidade em abstrair as coisas, o que caracteriza-a como um conceito multidisciplinar.
Conceitualmente, podemos definir a abstração como a simplificação de uma realidade qualquer, de modo que as partes não relevantes sejam suprimidas, sem que haja perda de entendimento.

Na Wikipédia, a abstração está definida como:

processo mental em que as idéias estão distanciadas dos objetos, operação intelectual onde existe o método que isola os generalismos teóricos dos problemas concretos por forma a resolver os últimos, trata-se de um mecanismo essencial em disciplinas filosóficas e científicas“.

Um bom desenvolvedor, ao fornecer aos seus clientes/usuários um feedback sobre os requisitos, ele utiliza de uma linguagem de mais alto nível, independente de computador, ou seja, a linguagem de negócio do usuário, para explanar o seu entendimento acerca do requisito ou para solicitar maiores esclarecimentos. Com isso, ele evita de inserir ruído na comunicação ou de utilizar um código (linguagem) que não é de entendimento do usuário.
Desse modo, as explicações a cerca de: polimorfismo, herança e encapsulamento devem ser fundamentadas no conceito de abstração. Não há encapsulamento sem abstração, assim como ocorre com a herança e o polimorfismo. O encapsulamento possibilita que um programa chame uma operação de outro programa sem preocupar com o modo como ela foi implementada, assim como, a operação chamada não necessita conhecer nada sobre quem invocou-a.