1.2 Características de la
POO
Existe un acuerdo acerca de
las características que contempla la Programación orientación a objetos. En si no hay un
acuerdo aceptado por todo el mundo respecto a cuáles son las características
que definen la POO, pero al menos todos concuerdan en estas cuatro:
- Abstracción.
- Encapsulación.
- Herencia.
- Polimorfismo.
1.2.1 Abstracción:
Cada vez que pronunciamos una palabra, realmente lo
que hacemos es asociar ese sonido (o ese conjunto de garabatos al escribir) con
una serie de cosas. Decimos que un ave es
tal cosa, que una silla es tal
otra, etc.
Cuando vamos a aplicar la POO, lo primero que debemos
hacer es cumplir con una vieja máxima de guerra: Divide y Vencerás. Es
decir, lo que hacemos es seccionar nuestro código en grupos de código más
pequeño que, al unirlos, hacen el trabajo. Un buen ejemplo de abstracción es el
cuerpo humano, aunque el cuerpo es una unidad, está dividido en lo que
conocemos por sistemas (el sistema respiratorio, el sistema linfático,
cardiovascular, etc., etc.). Estos sistemas, a su vez están compuestos por
otros más pequeños: los órganos, y así sucesivamente. La abstracción nos
permite dividir nuestro programa en distintos objetos que se agrupan para
formar cosas más complejas.
Pero ¿Qué es realmente la abstracción? Básicamente es
la capacidad de separar los elementos (al menos mentalmente) para poder verlos
de forma singular. Como cuando describimos el cuerpo humano y decimos cabeza,
brazo(s), pierna(s), etc.
1.2.2 Encapsulación:
También conocida como ocultamiento. Cuando me acuesto a ver televisión no me preocupo
del modo como éste funciona, o lo que hace para cambiar de canal o aumentar el
volumen. A menos que seas experto en electrónica o técnico en televisores, te
pasará lo mismo: no lo sabes y no te importa; sólo sabes que al presionar un
botón ocurre la magia.
La encapsulación se encarga de mantener ocultos los
procesos o atributos internos que
necesita para realizar su función hacer
lo que sea que haga, dándole al programador acceso sólo a lo que necesita. Esto da dos ventajas iniciales: Lo que
hace el usuario puede ser controlado internamente (incluso sus errores),
evitando que todo colapse por una intervención indeseada (tú no quieres
que tu mamá, que no tiene ni idea de electrónica, abra tu televisor y empiece a
jugar con los circuitos para cambiar los canales manualmente ¿verdad?).
La segunda ventaja es que, al hacer que la mayor parte del código esté oculto,
puedes hacer cambios y/o mejoras sin que eso afecte el modo como los usuarios
van a utilizar tu código. Sólo tienes que mantener igual la forma de acceder a
él (en el caso del control de la tele, que los botones sigan siendo los mismos
y que el botón de “apagado” no cambie el volumen). Por cierto, estas puertas
de acceso que das a los usuarios son lo que se conoce como interfaz.
1.2.3 Herencia
Permite
definir nuevas clases partiendo de otras ya existentes; las clases que se
derivan de otras automáticamente heredan sus métodos.
Uno de los elementos (a mi modo de ver) más
interesantes de la P.O.O. La herencia es la capacidad que tiene una clase de derivar
las propiedades y métodos de otra (suena a chino ¿no? Calma, lo veremos luego
con paciencia). Tratemos de explicarlo con un ejemplo:
Decimos que una gallina es un ave; esto
quiere decir que las gallinas tienen características comunes con otras aves
(pico, plumas, etc.), es decir que la gallina hereda las características
comunes de todas las aves. Pero además, resulta que un ave es un
animal, lo que significa que también comparte características comunes al
caballo, el perro, el hombre (s, somos animales) y cualquier otra cosa que
pueda ser clasificada como animal.
La herencia nos permite, entre otras cosas, evitar
tener que escribir el mismo código una y otra vez, puesto que al definir que
una categoría (que en programación llamaremos clase) pertenece a otra,
automáticamente estamos atribuyéndoles las características generales de la
primera, sin tener que definirlas de nuevo.
El
polimorfismo se refiere a la
capacidad para que varias clases derivadas de una antecesora
utilicen un mismo método de forma diferente.
Por
ejemplo, podemos crear dos clases distintas: Pez y Ave que
heredan de la superclase Animal. La clase Animal tiene el método
abstracto mover que se implementa de forma distinta en cada una de
las subclases (peces y aves se mueven de forma distinta).
No hay comentarios:
Publicar un comentario