miércoles, 30 de marzo de 2011

Patrones de Diseño

Hola que tal otra vez compañeros, ahora lo que vamos a hablar es acerca de los patrones de diseño.

Antes que nada hay que definir o dar la idea acerca de los patrones de diseño

Un patrón de diseño es una solución, que fue analizada, de un problema de programación y que éstas se pueden volver a utilizar en otros problemas de programación, para su mejor funcionamiento (Es una plantilla que se aplica a una situación).
Hay que tomar en cuenta que si un patrón se aplica erróneamente, nos puede traer problemas y dificultames para su trabajo ó manejo.

Tipos:
En los patrones de diseño contamos con 3 tipos los cuales son: estructural, creacional y de compartamiento.
  • En el estructural, tenemos las relaciones entre las clases y objetos, que nos ayudan y facilitan el trabajo en conjunto.
  • En el creacional, tenemos los mecanismos de instalación, facilitandonos la creación de objetos a adaptarse a dicha situación.
  • En el de compartamiento, ayuda a facilitar la comunicación entre las clases y objetos.

Ahora pontré algunos de los patrones mas usados en PHP
Hay que tomar en cuenta que cuando vamos a usar patrones de diseños, éstos pueden ser aplicables a casi cualquier lenguaje de programación si acaso algunos varían por su forma de procesarlos, pero en sí son casi idénticos. Para ésto yo les hablaré de los más usuales que hay en el lenguaje de PHP.
  • Patrón Singleton: Éste es uno de los patrones más faciles y que con mayor frecuencia veremos en programas a poder aplicar, consiste en una clase que unicamente tiene una instancia y ésta provee un lugar global que se tiene acceso en ella (osea, devolver la clase en futuras llamadas que se hagan a ésta).
  • Ventaja: Es fácil de usar y de entender, éste patrón lo podemos usar en la gestión de conexión y query con la base de datos.


  • Patrón Observer: En éste patrón se crean objetos que mantienen una lista de observadores y éste notifica algún cambio que haya en su éstado.
  • Ventaja: Éste patrón nos puede ser muy útil al momento de tener un sistema acceso a información o loggin (un ejemplo podría ser el de facebook, que nos indica cuando alguien publico algo de nosotros o relacionado a nosotros).


  • Patrón Factory: En éste patrón se basa se basa en un método de una clase que crea objetos cuando no se sabe exactamente la clase del objeto que se va a crear (osea, una clase general que heredará subclases).
  • Ventaja: Éste patrón nos puede ser muy útil al momento de identificar objetos a crear y éste los valla identificando y asociandolos respectivamente.


  • Patrón Chain-of-command-pattern: Éste patrón también es conocido como cadena de mando, éste se basa en la creación de objetos receptores y un objeto emisor, que manda una petición y éste recorre todos los posibles receptores hasta que se responda con una acción o ejecución en el comando.
  • Ventaja: El objeto emisor, no conoce de las clases que se va a manejar y sirve para tener una arquitectura de acoplamiento (un ejemplo a éste patrón por si no entendieron del todo bien, sería en un formulario, en la cual dependiendo de los valores dados por el usuario, nosotros, podemos hacer cierta acción como si es hombre o mujer, clasificarlos ó mandar una notificación ya sea por correo o por mensaje a celular si proporcionó el correo o el número de celular).

  • Patrón Strategy: En éste patrón los algoritmos de extraen de clases complejas, para que éstas puedan ser más fácil.
  • Ventaja: Ayuda en un mejor manejo de los recursos o más bien para el mejor desarrollo de ésta o de su algoritmo (un ejemplo podría ser al tener un listado de usuarios y éste nos da un método para encontrar un conjunto de usuarios).


Por el momento serán todas a mencionar, pero cabe recordar que aún hay otras, que nos puede ser también útiles o importantes, como el patrón adapter, patrón decorator, patrón proxy, etc.

Patrones de diseños aplicados en mi proyecto
Como ya vimos 5 patrones de diseños, que son los mas importantes (factory, singleton, observer, chain-of-command and strategy), lo que resta es saber cuál aplicar a mi proyecto, hay que recordar lo comentado con anterioridad, que si un patrón lo aplicamos erróneamente a nuestro proyecto o programa, éste nos puede producir fallas o dificultades para seguir con éste.

En mi proyecto los patrónes a usar podrían ser:
  • Patrón Strategy: Éste patrón lo puedo emplear al momento de crear registros, o si ya hay uno existente, como por ejemplo que un empleado tenga de id como NULL, tener en el registro de quien es padre de ese empleado (jefe).


  • Patrón Factory: Éste patrón lo puedo usar en lo botones a crear, para indicar si hay que agregar, eliminar o editar algun empleado, ya que depende de la situación que se vaya a crear y también en la creación de las canvas


  • Patrón Singleton: Éste patrón lo puedo emplear, para declarar las instancias de la clase árbol y en la clase listar, ya que habra la conexion de la base de datos y el guardado o edición de los empleados.


A continuación les pongo mi diagrama completo:



En sí así sería como quedaría mi diagrama, por el momento es todo y en la otra entrada publicaré el código de éstos patrones de diseño aplicados a mi proyecto.
Si tienen alguna duda o comentario, no olviden en hacerlo o si creen que sería otro patrón necesario haganmelo saber.
Saludos.

Aquí dejo algunas ligas de interés y que me fueron útiles:
http://craftyman.net/patrones-de-diseno-en-php/
http://www.ibm.com/developerworks/library/os-php-designptrns/?ca=dgr-lnxw98PHP-Patterns
http://www.baluart.net/articulo/introduccion-a-los-patrones-de-diseno-con-php
http://www.davidrojas.net/

También recomiendo éste libro
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&qid=1301566231&sr=1-1-spell
En la cuál, leí un poco de éstos y me ayudaron en algunas cosas para comprender, aparte que varios autores de donde estuve investigando recomendaban el primero.

2 comentarios:

  1. ¿Porqué hay letra negra en fondo negro? El contenido está bien, 5.

    ResponderEliminar
  2. Lo que pasa, esque me estuve metiendo a la edición de la plantilla y no se a que le moví, que se puso así de feo, pero trataré de arreglarlo

    ResponderEliminar