Podríamos definir la abstracción como la "acción de aislar mentalmente o considerar por separado las cualidades de un objeto, considerar un objeto en su esencia". A través de la abstracción conseguimos extraer las cualidades principales sin detenernos en los detalles. Conseguimos a partir de un tema determinado, generalizar y obtener una visión global del tema. Cuando montamos un ordenador ensamblamos los componentes necesarios para construir el ordenador.
Utilizamos una placa base, un disco duro, memoria, etc. Manejamos estos dispositivos a un nivel funcional. Es decir, abstraemos las funciones de cada dispositivo para trabajar con ellos.
En ningún momento nos paramos a pensar cómo funcionan internamente o de cuántos condensadores y transistores está compuesto.
La abstracción es una herramienta muy potente en programación, pues reduce considerablemente el trabajo de implementación y aumenta la portabilidad del código. La programación orientada a objetos aporta elementos para abstraer el problema en dos sentidos:
Por un lado nos permite referirnos a objetos para representar la realidad, describiendo el problema en términos del problema en lugar de en términos de la solución. En un programa de gestión comercial, tendremos el objeto cliente o el objeto factura, que no son más que representaciones de otros objetos en el espacio del problema.
La clave de la programación orientada a objetos está en abstraer los métodos y los datos comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel de abstracción, añadir o eliminar un objeto nuevo supondrá muy poco esfuerzo.
A grandes rasgos, la abstracción, permite que dispongamos de las características de un objeto que necesitemos. Si necesitamos el objeto Persona, podríamos poner nombre, edad, dirección, estado civil, etc.
Si lo necesitamos en un sistema administrativo, pero, si lo requerimos para el área de biología, dentro de sus atributos quizá tengamos, ADN, RND, Gen x1, Gen x2, etc., y los atributos antes mencionados no sean requeridos. En general, podemos decir que Persona cuenta con todos los atributos mencionados aquí, pero por el proceso de abstracción excluimos todos aquellos que no tienen cabida en nuestro sistema. Se define como un método por el cual se rescatan los datos relevantes y se ignoran los irrelevantes.
Veamos los diferentes tipos de abstracción que podemos encontrar en un programa:
1. Abstracción funcional: crear procedimientos y funciones e invocarlos mediante un nombre donde se destaca qué hace la función y se ignora cómo lo hace. El usuario sólo necesita conocer la especificación de la abstracción (el qué) y puede ignorar el resto de los detalles (el cómo).
2. Abstracción de datos:
Tipo de datos: proporcionado por los leguajes de alto nivel. La representación usada es invisible al programador, al cual solo se le permite ver las operaciones predefinidas para cada tipo.
Tipos definidos: por el programador que posibilitan la definición de valores de datos más cercanos al problema que se pretende resolver.
TDA: para la definición y representación de tipos de datos (valores + operaciones), junto con sus propiedades.
Objetos: Son TDA a los que se añade propiedades de reutilización y de compartición de código.