Sobre patrón de diseño abstract

Iniciado por zonahurbana, 19 Octubre 2013, 21:27 PM

0 Miembros y 1 Visitante están viendo este tema.

zonahurbana

Bueno, debo presentar un informe sobre el patrón de diseño abstract.
Y quisiera incluir en él un ejemplo donde sea necesario su uso.

Es decir, he leído la teoría y sé que sirve para crear objetos de manera indirecta. Menciona además que suele usarse cuando no se conoce qué tipo concreto de objeto se va a instanciar, y que ello recién se decide durante la ejecución del programa.

Otra característica indica que se usa cuando es necesario acceder a algún recurso para la creación del objeto. Y esto es lo que no entiendo mucho.

¿Qué ejemplo podría hacer? En el que, si no uso el patrón de diseño abstract, no pueda hacerse el programa correctamente.

----------------------------------------------------------------
Esta es otra duda que tengo:
Si varias clases implementan una interface, ¿todas esas clases son consideradas como de una misma familia? Me parece que la teoría dijese algo así  :silbar:

Gracias de antemano.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

~ Yoya ~

Supongo que te refieres al patrón de diseño Abstract Factory.

Bueno te explico primero el patrón de diseño Factory Method, antes del Abstract Factory.



No es una buena practicar hacer una instancia de un objeto en una misma clase, ya que si en un futuro se modifica la clase a la que se le crea una instancia, esto puede hacer que todo el código deje de funcionar y se tendría que modificar todas las clases que utilizan dicha clase, para hacerla compatible con la nueva versión creada.

Para solucionar esto, lo que se hace es crear una clase encargada de crear las instancias y devolverlas, de forma que si se modifica alguna clase, simplemente se tenga que modificar directamente la clase encargada de crear instancia y por lo tanto no afectara a las demás clases.

En resumen, nunca se debe instanciar una clase directamente, sino utilizar una clase intermediaria encargada de hacer ese trabajo.



Abstract Factory, es como el patrón de diseño Factory Method, pero este se encarga de manejar diferentes patrones de diseño Factory Method dentro de si y esos patrones dentro son familiares/tienen algo en comun/tienen alguna similitud.



Si varias clases implementan una interfaz, las clases entre ellas misma no tienen ninguna relación, la relación esta entre la clase  y la interfaz que se implementa.

Estas muy confundido, te recomiendo que leas de nuevo el libro desde el principio pero tranquilo y sin desesperación, porque el objetivo es entender y no terminar lo mas pronto.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

zonahurbana

Gracias por responder, ¿puede recomendarme algún enlace?
O tal vez algún libro que pueda encontrar por internet ...

La verdad es que he leído del tema pero de páginas al azar que encontraba en búsquedas.

Hasta antes sólo había estudiado C++ básico y en cuanto a Java nos dejaron varios temas para investigar, por lo que los veo por primera vez.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

~ Yoya ~

Te recomiendo el libro Head First Design Patterns, un excelente libro, hay aprenderas y disolveras todas tus dudas. Por hay anda la version en PDF pero algunos puntos estan escaneados directamente del libro.

Si puedes comprartelo, compratelo, a mi no me gustan los libros en físicos pero con este haré una excepción y me lo comprare (ya lo he leído en digital).

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

zonahurbana

Gracias. Aunque la verdad, no se me da muy bien el inglés, y tal vez este libro sea genérico. Por el momento quisiera ver este tema con relación a Java.

Usted menciona que el Abstract Factory sirve para crear clases intermedias que gestionen la creación de objetos de otras clases, para que cuando se modifiquen tales clases no hayan muchos cambios que hacer. Pero, la verdad es que de igual manera tendrían que hacerse cambios, no consigo imaginar que pueda reducirse el número de cambios que tengan que realizarse.

¿Podría sugerirme algún ejemplo que verdaderamente amerite el uso de este patrón de diseño? ¿O usted considera que siempre debe usarse?

Gracias nuevamente.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

Mitsu

#5
El mejor material está en Inglés, las documentaciones oficiales están en inglés, etc. Así que toca aprender inglés  ;)

Como te comentó Yoya, es muy importante que nuestras clases no dependan de ninguna otra, ya que en un proyecto mediano - grande, esto sería un dolor de cabeza si tenemos que hacer una modificación, tendríamos que hacerla en todas las clases que depende de ella.

Para esto apareció Spring, que es un contenedor en el cual se gestiona el ciclo de vida de los objetos, eliminando así cualquier tipo de dependencias entre objetos - clases.

Además ofrece otras funcionalidades innovadoras, como la programación orientada a aspectos, que la estoy estudiando ahora  :D

zonahurbana

Spring es una solución, pero el uso del patrón de diseño Abstract Factory es otra muy aparte, ¿verdad?

Cuando usted menciona hacer una modificación, ¿a qué se refiere en específico?
Si se añaden más funcionalidades, para hacer uso de ellas tendría que hacerse modificaciones, aún cuando se usen clases intermedias para la creación de objetos de otras clases.

He visto algunos ejemplos por internet sobre el uso de este patrón de diseño, pero nunca se menciona como ejemplo un cambio en específico y cómo se reacciona ante él, y cómo tendría que hacerse si no se usan clases intermedias para la creación de objetos.

Gracias por sus respuestas.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...