miércoles, 2 de diciembre de 2020

Que es la abstracción? Que es un objeto? Que es una Clase? La abstracción, el objeto y la clase en la programación orientada a objetos POO

Que es un objeto

Un objeto en programación orientada a objetos es una cosa, no es un ente o ser viviente, sino que es un recipiente al cual se le pone un nombre y donde se le colocan datos o características de la cosa y las formas de actuar o comportamientos que esa cosa ejecuta.

Así mismo esa cosa es individual, es única en cuanto a su percepción como tal, pero al tener datos o atributos comunes con otras cosas, forma parte de un conjunto mayor de esas cosas iguales, o sea, una clase.

La siguiente imagen ilustra lo que podemos definir como un objeto, tenemos los atributos que son todos aquellos productos que están a la venta, aparte el tamaño de la maquina, el tipo de mercancía que vende, etc... estas serían las características, los datos que un un momento dado forman el objeto (maquina expendedora) . Luego tenemos los comportamientos o funcionamiento del obejto (maquina expendedora) como son vender el producto, cobrar los productos según el precio, verificar las monedas o billetes que se introduzcan, devolver el cambio, expender el producto solicitado, etc. Estos serían las formas de actuar, comportamientos o métodos del  objeto, de la cosa llamada MaquinaExpendedora.



Otro ejemplo un poco mas abstracto, una taza de café. Es un objeto (cosa) cuya diferencia con otra taza de café es que en el momento de utilizarla, puede contener mas o menos café con respecto a  la otra. O en vez de café solo contenga también leche o té, o la combinación en cuanto cantidad de un producto u otro la hace distinta. Además la persona que usa la taza, y es distinta a la taza que es usada por la otra persona, es decir, que la diferencia entre las dos tazas en el momento de ser analizadas es la persona que las usa, lo que toma, o si se le echa azúcar, edulcorante o nada, etc... En resumen podemos decir que las dos tazas de café estrictamente analizadas, son distintas, aunque siguen siendo tazas de café, son obejtos distintos desde la perpectivas de la informacion que podemos extraer de cada una de ellas.

Que puedes inferir de la imagen anterior de la MaquinaExpendedora de Café?

Fácil, que expende tazas de plástico pero que todas son iguales en color,  tamaño y capacidad de contenido.

Pero cada taza es igual a la otra después que sale de la maquina? No, aunque se sirva con el mismo contenido y cantidad milimétrica exactamente igual, las dos constituyen dos tazas o vasos distintos aunque idénticos. Son dos objetos distintos en la práctica.

Fíjate que las dos maquinas de las imágenes anteriores son expendedoras pero al mismo tiempo son bastante distintas, pero podemos agruparlas en un conjunto que llamamos MaquinasExpendedoras, que sería la Clase Origen (Padre), pero podemos a su vez crear otros dos subconjuntos o subclases para que engloben lo que cada una hace, una seria la maquina del tipo expendedoras de mercaderías que sería la de la izquierda y la otra  sería maquinas del  tipo expendedoras de café.

Todo esto es muy confuso en principio, y es debido a nuestra incapacidad de abstraernos y ver los objetos formando clases o conjuntos y subconjuntos muy variados unos de otros.

La abstracción es la base de la programación basada en objetos que, o se entiende perfectamente, o no se podrá programar eficientemente basados en esta tecnología.

Y que es eso de la abstracción? La abstracción es la capacidad que tenemos de considerar los objetos desde su origen más básico, desde su maqueta o boceto mínimo o básico.

Veamos las dos siguientes ilustraciones




Podemos deducir que la abstracción es la capacidad de poder hacer un boceto o maqueta mental del objeto, e identificar las partes básicas o únicas comunes que todos ellos tienen. Pero lo anterior solo muestra la abstracción ya evolucionada, es decir ya hay un conjunto de definido en cada caso, lamparas en el primer caso y caballos en el segundo.

La pregunta es, se puede abstraer aún más? En el caso de las lamparas no esta muy claro pero en el caso del caballo, ya deberías intuirlo.

A que otro conjunto o clase  puede pertenecer un caballo?

Que te parece el conjunto Animal de cuatro patas?. Dentro de este grupo cabe un universo de animales, cierto. En realidad, podíamos crear otros subgrupos, pero lo que se quiere demostrar es que la abstracción es la capacidad de poder definir un objeto en determinada Clase que sea conveniente, para poder trabajar con ella de acuerdo a la necesidad que tengamos en ese momento.

Si necesitamos un programa para un zoológico, la Clase caballos no sería útil, que haríamos con los animales de dos patas? Y si el zoológico tienes animales acuáticos?

Pues tendríamos una Clase base que los aglutinaría a todos..... la Clase Animal, y de ahí iríamos subdividiendo en mas clases según fuera necesario.

Que tiene un animal?

Atributos                                                  Métodos (Comportamientos)
                                 
2 extremidades-a  patas traseras              Se alimenta
2 extremidades-b  patas delanteras          Se defiende
1 esqueleto                                               Se mueve
1 cabeza                                                   Se reproduce
1 boca                              
2 ojos

Podemos decir que lo anterior define de manera muy abstracta un animal, o sea, un cosa que no conozcamos pero que tenga las anteriores características y forma de actuar sería un animal y que solo faltaría ponerle un nombre. Y ese ponerle nombre es lo que iría definiendo de forma más precisa el objeto animal que tenemos delante, el cual añadiría otros atributos y otros métodos.

Como podemos ver la Clase utilizada en Java se refiere al conjunto de cosas iguales en sus factores comunes, pero distintas en ciertas cualidades, atributos, pertenencia, etc... y en sus comportamientos o métodos, es decir, en la manera como llevan a cabo los métodos o comportamientos.

Ahora debemos ir mas allá, la abstracción depende del punto de vista de aquella persona que la lleva a cabo en un momento dado. Abajo vemos una imagen en donde se intenta reflejar, que es el objeto gato, desde el punto de vista del propietario y que es desde el punto de vista del médico veterinario.

Para uno, el gato es una bola mullida de pelos, que ronronea y come, mientras que para el veterinario, el gato es un conjunto de huesos y órganos vitales.



Aquí quiero hacer una aclaración, y es que desde el punto de vista de Java, todos los objetos descienden de el objeto Object. No importa que objeto definamos, el mismo tendrá unos atributos y comportamientos,  heredados mínimos que son necesarios para poder ser utilizados en un programa para una aplicación informática. Todas las explicaciones anteriores son solo para entender los conceptos de abstracción, objeto y clase.

Resumiendo un poco, podemos decir que un objeto es una parte individual de una clase. La clase simplemente identifica el conjunto al que pertenecen los objetos que derivan de ella. Estos objetos a su vez pueden agruparse en otras subclases, pero a la hora de ser utilizados en un programa informático nos basta con ubicarlos en un determinado conjunto o clase, que es el adecuado para resolver nuestro problema.

En este momento puede que nos haya entrado una tremenda confusión, porque lo que ya teníamos perfectamente entendido, ahora se nos ha vuelto a poner todo confuso. Pero todo esto solo se entiende totalmente, cuando logremos poder abstraer los objetos con la práctica habitual, ya que veremos que a medida que los utilizamos, los datos (atributos) y comportamientos (métodos) irán saliendo de forma natural.

La programación orientada a objetos POO, esta basado en el paradigma:

Abstracción, Herencia, Encapsulamiento, Polimorfismo y Modularidad.

Lo anterior demuestra que un sólido entendimiento, de la Abstracción facilitará enormemente entender y aplicar los subsiguientes conceptos, que están presentes desde un primero momento.

Espero que con lo explicado tengas por lo menos un poco mas claro que es abstracción, objeto y clase en la programación orientada objeto en Java. Como siempre si ves algún error u omisión, o hacer una observación, por favor deja un comentario, para corregirlo.


No hay comentarios:

Publicar un comentario

Tu comentario puede ser muy útil, asi que no dudes en dejar el tuyo.
Si es relacionado con algún problema, error. etc. trata de ser muy explicito, y detallar el problema y las circunstancias en las que se produjeron. Si lanza algún error trata de copiarlo y pegarlo junto con una descripción del problema, ya que a veces los errores del sistema no son en realidad la causa del problema.

Vistas de página en total