2. Abstracción en Programación Orientada a Objetos
Abstracción es un término del mundo real que podemos aplicar tal cual lo
entendemos en el mundo de la Programación Orientada a Objetos. Algo abstracto
es algo que está en el universo de las ideas, los pensamientos, pero que no se
puede concretar en algo material, que se pueda tocar.
Abstracción en el mundo real
La programación orientada a objetos sabemos que, de alguna manera, trata de
"modelizar" los elementos del mundo real. En el mundo en el que vivimos existe
un universo de objetos que colaboran entre sí para realizar tareas de los sistemas.
Llevado al entorno de la programación, también debemos programar una serie de
clases a partir de las cuales se puedan instanciar objetos que colaboran entre sí
para la resolución de problemas. Si asumimos esto, a la vista de las situaciones
que ocurren en el mundo real, podremos entender la abstracción.
En los animales existen propiedades y métodos que pueden ser comunes a todos
los animales en general. Los animales podrán tener un nombre o una edad,
determinadas dimensiones o podrán desempeñar acciones como morir. Lo que
nos debe quedar claro es que no deberíamos poder instanciar un animal como tal.
¿Cómo nace un animal en concreto?, ¿cómo se alimenta? Para responder a esas
preguntas necesitamos tener especímenes más concretos. Sí que sé cómo nace o
cómo se alimenta una hormiga, o un gorrión, pero no lo puedo saber de un animal
genérico, porque puede hacerlo de muchas maneras distintas.
3. Herencia y abstracción
Si entendemos el concepto de herencia podremos entender mejor la abstracción y
cómo se implementa.
Recuerda nuestro ejemplo: Tengo animales. Hemos acordado que no puedo tener
un animal concreto instanciado en un sistema. Si acaso tendré instancias de
perros, saltamontes o lagartijas. Pues bien, en los esquemas de herencia este
caso nos puede surgir muy habitualmente.
Aunque mi sistema no pueda crear animales como tal, tener definidas esas
cuestiones comunes a todos los animales me resulta útil para no tener que
programarlas de nuevo en todos los tipos de animales que puedan existir.
Simplemente las heredaré en las clases hijas, de modo que estarán presentes sin
tener que volver a programar todas esas cosas comunes.
Sin embargo hay cosas de los animales que no podré implementar todavía.
Atributos como el número de patas, el alcance de la visión, se implementarán a
futuro en los tipos de animales que las necesiten, pero fijémonos en las acciones o
métodos. Por ejemplo nacer, alimentarse, etc. No sé cómo va a nacer un animal,
pero sé que todos los animales del mundo nacen de algún modo (unos nacen de
huevos, otros estaban en la barriga de las hembras y nacen a consecuencia de un
parto, etc.)
En estos casos nos puede ser útil definir como métodos abstractos en la clase
"animal" esos métodos que van a estar presentes en todos los animales, aunque
no seamos capaces de implementarlos todavía.
public abstract function nacer();
Esto quiere decir que todos los animales del mundo heredarán un método
abstracto llamado nacer. En las clases concretas que hereden de animal y donde
ya sepamos cómo nace tal animal, por ejemplo, la gallina, podemos implementar
ese método, para que deje de ser abstracto.
public function nacer(){
4. //se rompe el huevo y nace el pollito que más adelante será una hermosa
gallina
}
Hasta ahora sabemos que hay clases que tienen métodos abstractos, que no
somos capaces de implementar todavía y clases en las que se heredan métodos
abstractos y en las que seremos capaces de implementarlos.
Polimorfismo y abstracción
Creo que si no se examina de cerca la abstracción bajo el prisma del polimorfismo
no se puede entender bien la verdadera utilidad de hacer clases abstractas.
Es cierto que el concepto se puede quedar un poco en "la abstracción" pero
cuando practiques un poco te darás cuenta de la esencia de las clases abstractas
y entenderás lo útil y necesario que es declarar métodos abstractos para poder
implementar el polimorfismo.
5. Conclusión.
La abstracción expresa las características esenciales de un objeto, las cuales
distinguen al objeto de los demás, así podemos diferenciar las características de
un objeto. Es necesario para reconocer las propiedades que identifican a los
objetos de otros y las funciones que realiza cada una de sus características.
Definición propia: La abstracción es un complemento de la programación orientado
a objetos la cual permite diferenciar las principales características de un objeto.