domingo, 24 de mayo de 2015

De las clases abstractas y esas cosas de la interface



Hace un par de semanas, leyendo post en un foro de php, me encontré con una pregunta en torno al uso de clases abstractas y si en realidad eran necesarias o no. Esto y el uso de frameworks (seudos) "poderosos" autoproclamados así, por que ni sus creador se les hincho la real gana, ayudan a mal entender o de plano, ni conocer el potencial de la programación orientada a objetos. Pero sobre eso, hablare otro día.

El mundo de la arquitectura y la artesiana del desarrollo de software, es como ese cuento de Lovecraft, que para llegar a el, tienes que escapar de la realidad, al punto que todos te ven feo y te vuelves un vagabundo, con sueños raros y utópicos.

Vamos a pensar una cosa medio rara, y hablar de interfaces y clases abstractas y terminar siendo unos clasistas, por que al final, ¿de eso se trata, de crear clases, vale?

Supongamos que tenemos una interface llamada Humano, y un humano hace cosas, tenemos en esta interface métodos como: "hablar, pensar, ver, comer" Y los otros más. Como sabrán, en una interface, los métodos solo se declaran, pero no se declara funcionalidad alguna, nadie sabe que hacen, solo le dirá a la clase que la va a implementar que debe hacer, no como hacerlo, eso depende de la clase. Así que si la case habla y lo hace mal y el resto del mundo no le entiende, bueno, la interface se lava las manos y le dice: Yo te dije que tenias que hablar, si no lo haces bien, es por que tu lo estas haciendo mal. Sigamos

Ahora tendremos dos clases abstractas, una llamada Programador y otra Diseñador, estos dos implementan a la interface Humano. Ahora ya saben que ambos tiene que hacer cosas que hacen los humanos, pero bien sabemos que todos hacemos las cosas de manera diferente, es decir, todos dormimos, pero cada quien duerme como se le da la gana.

Así que programador implementa pensar, y lo hace todo de manera abstracta, y se basa en hechos y todo con un por que de. Pero Diseñador lo implementa de manera diferente, para el todo debe ser concreto, basado en simetría, armonía etc. O sea, su pensamiento es armonioso. Y así casa clase va definiendo como hablar, como ver, como comer, como dormir etc.

Ahora vamos a tener a tres clases felices, la clase Mario, la case Mariana y la case Levi. Ya sé, soy como que bien Random, pero esta padre, no?

Mario implementa directamente a la interface Humano y ya, El solo quiere ser Mario, el humano, y va a ir reescribiendo sus métodos por que es un ecléctico.

Mariana extiende de la clase abstracta Programador, y sobre escribe uno que otro método por que no le gusta, como hablan los programadores, por ser una bola de tíos aburridos y nadie quiere, en su sano juicio, escuchar a uno. Así que Mariana habla mucho mas sexy y es toda una chica geek.

Levi extiende de Diseñador, igual modifica (Sobre escribe) algunos métodos para ser mucho mas cool, ya saben, la neta del mundo mundial y así.

Ahora seamos crueles, racistas y unos clasistas. A nuestros tres objetos (Por que ya los instanciamos y son la onda ahora) los vamos a invitar a una fiesta, pero la fiesta solo pueden acceder todo aquel que extienda de Diseñador, por que es una fiesta así bien padre, donde todo son divertidos, unos alcohólicos (Sociales, y no solitarios como los programadores) y si, tienen una vida. Los tres llegan a la puerta y el cadenero, un gorila de uno 1.90 y cara de no tengo amigos y no me hacen falta. Y si, lo único que sabe decir es: Yo aplastar objeto desagradable, yo comer y esas monadas ilógicas que seguramente Hulk entenderá mejor.

El primero en entrar es Levi, y no le dicen nada, el pasa como Juan por su casa. Que bien, ahora tendremos que esperar a sacar de esta fiesta un Levi ahogado en alcohol...

El segundo es Mario el humano, recordemos que el no extiende de ninguna clase (Hereda), el implementa a su antojo y ya. Pero Nuestro gorila de la puerta no lo deja pasar, por que esta fiesta es solo para diseñadores, todos los que extienden de esta clase y solo de esta clase a cualquier nivel, pueden pasar. Es decir, los clase CM, si, esos que se encargan de las redes sociales, si pueden pasar, pero esta clase extiende en algún punto de Diseñador. Las clases SEO también pasan!!! por que extiende igual, en algún punto de Diseñador. A Mario no le queda otra que ir a casa.

Ahora Mariana trata de entrar, pero el mismo gorila no la deja, por que los programadores ni tienen vida social, y son aburridos. Mariana le demuestra que no es aburrida, que es super divertida y tiene una vida social, y se ha puesto a hablar con otros objetos de tipo diseñador y han reído y se han hasta agregado en sus redes sociales, pero como la fiesta es solo para CLASES Diseñador, pues sera todo lo divertida, guapa y buena onda, pero a esa fiesta NO puede pasar.

Es decir, en este ejemplo tan burdo, hemos visto como nuestros objetos hacen lo mismo, pero cada uno de una forma diferente, por eso no da lo mismo, cuando extiendes (heredas el comportamiento de la otra clase) a implementar y definir nuevos comportamientos, como hacer ejercicio, volar, dormir en la oficina. Yo que sé.

Espero que eso te pueda ayudar en algo.