jueves, 6 de octubre de 2011

Curso de programación: Capítulo 14. Patrones de diseño


Hola a todos,

Antes que nada mis disculpas por tardar tanto en escribir este tutorial pero he tenido unos dias liadillo...

Algunas veces oireis hablar de ellos, pero...que es un patrón de diseño??
Pues bien, un patrón de diseño no es más que una manera de hacer las cosas que ha sido diseñado, probado y utilizado hace mucho tiempo y funciona. Dicho así me direis que os he explicado poco...:D, perfilemos más la explicación: En la mayoria de las ocasiones que nos enfrentamos a un problema, estamos repetiendo trabajo que antes ya han hecho otros, tanto a nivel de que se nos ocurra como implementarlo a la misma implementación en si (y los bugs que conlleve).

Así pues, los patrones de diseño nos permiten reaprovechar de una forma estructurada, conocimientos y planteamientos de programación que hace ya muchos años un grupo de estudiosos investigó,probó e implementó. Acostumbran a ser muy genericos y resuelven gran cantidad de problemas. Si no recuerdo mal hay 23 patrones de diseño "estandarizados" pero a nivel de concepto se podrían añadir cientos de nuevos patrones sin ningún problema.

Ejemplos:
- Singleton: Este no lo explico :D. Ya se ha usado mucho en el game engine. Quien tenga dudas que las comente sin problemas. Para quien no haya visto los capitulos del game engine: un singleton no es más que una manera de conseguir que una clase solamente genere un único objeto. Es decir, que por muchos constructores que llamemos siempre tendremos el mismo objeto (conservando su estado, lógicamente)

- Factory Method: Es una clase que se encarga de devolver objetos de clases diferentes... por ejemplo. Podriamos tener una clase modelfactory con una función LoadModel y que te devolviera diferentes tipos de objeto en función del formato del modelo (MD2,MD3,ASC,etc...). Útil en el game engine para gestionar los recursos internamente.

- Proxy: No es mas que un "encapsulamiento" de un objeto existente. Es decir, le decimos a la clase proxy que queremos cambiar X atributo y esta clase es la que se encarga de ir al objeto real y cambiarle el atributo X. Es muy util para encapsular objetos que se modificarán por red, de esta manera todo funcionará bien, ya trabajes con red o sin ella. Un ejempo de uso lo podeis encontrar en el antiguo Core.h del game engine ya que se encargaba de hacer de wrapper de las funciones de pintado y audio.

- Iterator: No es mas que la implementación de iterador de C++. Es decir un objeto que se usa para recorrer una lista o un vector.

- Observer: Este patrón de diseño permite que varios objetos puedan observar las caracteristicas y estado de un tercero. Se me hace complicado presentaros un ejemplo claro, solo se que lo he usado en ocasiones y va muy bien, pero ahora no caigo en que.

No quiero explicar más por que si no os liaré más que otra cosa. De todas maneras, si teneis dudas o quereis más información decidlo y ahondaré más donde digais.

Aparte de todo esto, me han pedido que el próximo tutorial sea sobre mates 3D. Recordad que si teneis ideas originales o si quereis un tutorial en especial , pedidlo y se mirará si se puede conseguir.

Nos vemos

P.D: Si os interesa este tema os recomiendo que consigáis estos libros sobre patrones de diseño

LordPakusBlog

1 comentario :

  1. Del patron observer-observable hay ejemplos claros, por ejemplo, con la manera de tratar los listeners en mi sistema de Logs. Yo acumulo unos cuantos mensajes en ua cola y cuando quiero lanzarlos, llamo a todos los observers para enviarselos.

    Otro ejemplo seria un timer, que puedas insertarle clases (observers). Cuando el timer llega a cierto tiempo, el timer llama a cada observer para notificarlos.

    La idea esta muy relacionada con las callback functions por que como en estas, tu insertas una clase que implementa una interfaz a traves de la cual se habla con el observable.

    ResponderEliminar

Entradas populares