domingo, 8 de diciembre de 2019

Implementación y Adaptación de Patrones de Diseño


Patrón de diseño



Los patrones de diseño son soluciones para problemas típicos y recurrentes que nos podemos encontrar a la hora de desarrollar una aplicación, es decir, un patrón de diseño es una manera de resolver un problema que ocurre normalmente a la hora de programar. En la década de 1990 fue cuando los patrones de diseño tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el grupo Gang of Four (GoF)

 Un patrón de diseño debe cumplir al menos con los siguientes objetivos
  •     Estandarizar el lenguaje entre programadores
  •     Evitar perder tiempo en soluciones a problemas ya resueltos o conocidos
  •      Crear código reusable

Uso del patrón de diseño


Los patrones de diseño tienen dos usos principales en el desarrollo de software

  • Plataforma común para desarrolladores: Los patrones de diseño proporcionan una terminología estándar y son específicos para un escenario particular. Por ejemplo, un patrón de diseño singleton significa el uso de un solo objeto, por lo que todos los desarrolladores que estén familiarizados con el patrón de diseño único utilizarán un solo objeto y se pueden decir entre sí que el programa está siguiendo un patrón singleton.
  • Mejores prácticas: Los patrones de diseño han evolucionado durante un largo período de tiempo y proporcionan las mejores soluciones a ciertos problemas que se enfrentan durante el desarrollo de software. Aprender estos patrones ayuda a los desarrolladores sin experiencia a aprender el diseño de software de una manera fácil y rápida.


Elementos de los patrones de diseño

  1. Nombre del patrón: El nombre debe ser suficientemente descriptivo para saber de qué estamos hablando.
  2.  Problema: Describe el problema general o la situación a resolver.
  3.  Solución: Describe la solución general a implementar (debe ser adaptada de acuerdo a el contexto especifico).
  4. Consecuencias: describe lo bueno y lo malo que pasaría si se implementa.

Tipos de patrones de diseño

Los patrones de diseño se clasifican en tres tipos diferentes dependiendo del tipo de problema que resuelven. Estos pueden ser creacionales, estructurales y de comportamiento.



     1Creacionales


Son los que facilitan la tarea de creación de nuevos objetos, de tal forma que el proceso de creación pueda ser desacoplado de la implementación del resto del sistema. Algunos ejemplos:

·        🔺 Singleton: limita a uno el número de instancias posibles de una clase en nuestro programa, y proporciona un acceso global al mismo, es decir, nos garantiza la existencia de una única instancia para una clase.

     🔺 Prototype: Permite la creación de objetos basados en «plantillas». Un nuevo objeto se crea a partir de la clonación de otro objeto.

2. Estructurales


Su nombre es muy descriptivo, se ocupa de resolver problemas sobre la estructura de las clases. especificado la forma en la que unas clases se relacionan con otras. Podemos nombrar algunos como:


·         🔺Bridge: Separa la abstracción de la implementación.

·         🔺Decorator: Agrega funcionalidades a una clase de forma dinámica.

 🔺Facade: Nos provee una interfaz unificada y simple para acceder a un sistema más complejo

 3. Comportamiento


Nos ayuda a resolver problemas relacionados con el comportamiento de la aplicación. Ofrece soluciones respecto a la interacción y responsabilidad entre objetos y clases. Por ejemplo:

🔺Strategy: Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución.


·      🔺Observer: Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.

·   🔺Iterator: Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.



·  
Resumiendo, podemos definir los tipos de patrones con la siguiente figura:


Campos, Francheska & Salazar, Angely


28 comentarios:

  1. Buenas, interesante como desde la década de los 90s se desarrollaron patrones que se mantienen vigentes hasta la actualidad, sabemos que existen muchos lenguajes de programación y nuevos paradigmas a la hora de programar cada uno especializado en un area en especifico, pero igual se puede ver que en libros actuales se siguen usando patrones de los mencionados acá o como el mismo libro original es considerado un clásico vigente, manteniendo ventas y siendo aun una gran referencia para muchos ingenieros de software y programadores.

    ResponderBorrar
  2. Buenas, en función de las características que puede llegar a presentar un diseño durante el desarrollo de un software o aplicación, ¿Puedo llevar a cabo un diseño tomando en cuenta los tres tipos de diseños: creacionales, estructurales y de comportamiento?, es decir, que durante el desarrollo de un proyecto se presente la necesidad de utilizar varios tipos, se puedan llegar a fusionar.

    ResponderBorrar
    Respuestas
    1. Hola, la implementación de estos patrones dependen del analisis del contexto. Si a la hora del desarrollo de tú código ves la necesidad de aplicar uno o varios tipos de patrones ya sean de diferentes tipos no hay problema, un ejemplo de esto puede ser el cajero automatico que debido a sus diferentes funciones puede ser aplicados diferentes tipos de patrones.

      Borrar
  3. ¿Es posible que el uso de patrones de diseño genere problemas en mi software?

    ResponderBorrar
    Respuestas
    1. si el patrón de diseño esta mal aplicado si puede generar problemas, ahí entra el concepto de Antipatrón el cual es un patrón de diseño que conduce a una mala solución para un problema.

      Borrar
  4. ¿Son los patrones de diseño necesariamente definitivos? es decir ¿Es un hecho que mi código acarrea problemas de no usar estos patrones o no siempre debo aplicar estos patrones de diseño?

    ResponderBorrar
    Respuestas
    1. No te va a generar problemas NO usar patrones de diseño, lo que si puede es ahorrarte líneas de código y por supuesto tiempo de diseño. Además de que a futuro un software con patrones de diseño tiene tendencia a ser escalable y de fácil mantenimiento.
      Recordemos que un patrón de diseño es una solución ya propuesta a un problema común.

      Borrar
  5. ¿Existen varios patrones que nos ayuden a solventar el mismo tipo de problema, de ser así, se pueden convertir en un anti patrón y estropear todo, es decir, si los utilizamos sin necesidad, ya sea por ser inexpertos o por no conocer en sí nuestro problema, el uso de los patrones de diseño?

    ResponderBorrar
    Respuestas
    1. Como fue explicado en el blog existen patrones clasificados en tres tipos segun el problema (creacionales, estructurales y de comportamiento) y los patrones de cada tipo tienen la misma naturaleza, no obstante, cada uno posee sus propias funcionalidades y el uso de los mismos depende totalmente de lo que el programador requiera o que problema se le presente, pero como cualquier cosa en la vida, un mal uso en vez de generar la solución puede complicar las cosas , es decir, convertirse en un antipatron en este caso.

      Borrar
  6. La utilización de patrones de diseño son la clave para desarrollar una aplicación de forma mas sencilla y duradera ya que nuestro código gozara de los beneficios que nos ofrece aplicar un patrón de diseño. Aunque la utilización de ellos no es algo obligatorio para el programador es una técnica ventajosa, esto es debido a que se pueden obtener soluciones a problemas que han sido probadas y documentadas por una multad de programadores, otra ventaja es que nos permiten como modelo funcionar como una guía para que otros programadores puedan trabajar en un mismo software

    ResponderBorrar
  7. Los patrones de diseños son un esquema de solución que se aplica a un tipo de problema, esta aplicación no es mecánica ya que requiere de una adaptación y una serie de ajustes, por lo que el uso de un patrón no debería repetirse 2 veces de la misma forma. Podemos observar también que su clasificación es basada en su propósito y es recomendable usarlos en cualquier momento para aprovechar el conocimiento y la experiencia existente y no a partir de cero.

    ResponderBorrar
  8. Debido a las ventajas ofrecidas por los patrones de diseño, sería recomendable aplicarlos siempre que este a nuestro alcance, en especial si estamos comenzando en el mundo de desarrollo de software. Y gracias a la gran variedad de patrones existentes no deberíamos tener problema en encontrar uno que se acople a las necesidades de nuestros proyectos.

    ResponderBorrar
  9. La información esta interesante y personalmente pienso que es importante utilizar los patrones de diseños ya que nos pueden servir para uniformar nuestro código de manera que podamos tener un diseño más estético para el entendimiento de otros programadores.

    ResponderBorrar
  10. ¿Los patrones de diseño pueden ser utilizados en todos los lenguajes de programación? Y de ser así... ¿Son difíciles de aplicar o pueden ser usados por programadores principiantes y expertos?

    ResponderBorrar
    Respuestas
    1. Los patrones de diseño son neutrales y pueden ser aplicados a cualquier lenguaje. En la vida nada es difícil, para aplicarlos sólo debes saber lo básico en programación y practicar, no esperes freír un huevo si no sabes prender la estufa.

      Borrar
  11. No obstante, según lo publicado pude entender que es posible elegir el patrón mas adecuado a nuestras necesidades, pero no eludir sus inconvenientes. Ademas de que hay aspectos de un patrón que se deben evaluar, como lo es la resistencia al cambio, ya que se debe elegir el patrón que facilite lo más posible los futuros cambios. Pero en general, se puede decir que la gran ventaja del uso de patrones radica en que minimizan el riesgo de generar un mal diseño, esto en el caso de que se implemente el adecuado, para que no cause problemas y se convierta en un antipatrón.

    ResponderBorrar
  12. ¿Solo existen patrones de diseño creacionales, estructurales y de comportamiento? ¿ No existen otros que de igual manera puedan ayudar en el desarrollo de software?

    ResponderBorrar
    Respuestas
    1. No, hasta ahora siguen apareciendo patrones de diseño y existen varios que no están clasificados, entre ellos podemos encontrar el type object y el double dispach que por su ayuda se consideran un patrón de diseño. Para más información te invito a descubrir sobre el type object y double dispatch entre las entradas de este blog.

      Borrar
  13. si realizo un proyecto que sea muy complejo pero no me encargo de su mantenimiento,si no que lo asigno a otras personas los patrones de diseño representarían una ventaja o desventajas para los encargados del mantenimiento y evolución de mi proyecto?

    ResponderBorrar
    Respuestas
    1. ¡Hola! Por favor, te recomiendo que redactes mejor tus pregunta para evitar tergiversar.
      los patrones de diseño serían una ventaja, ya que permiten que el software sea escalable y admite el mantenimiento por parte de otros desarrolladores del equipo. Cabe resaltar que también depende de que el patrón haya sido bien implementado.

      Borrar
    2. gracias por la recomendación; Si yo realizo un proyecto que sea muy complejo, pero no me encargo de su mantenimiento y futuro desarrollo o evolución,si no que lo asigno a otras personas ¿los patrones de diseño representarían una ventaja o desventajas para los encargados del mantenimiento y evolución de mi proyecto?

      Borrar
    3. Tomando en cuenta tu respuesta, puedo deducir que los patrones de diseño me ayudarán en el proyecto, permitiéndo realizar mantenimiento por parte de otros desarrolladores, me permite que el software sea escalable, también aumentan el tamaño de mi sistema y convierten mi código en un código escalable.

      Borrar
  14. ¿El patron de diseño depende del tamaño del proyecto?

    ResponderBorrar
    Respuestas
    1. ¡Hola! aplicar estos patrones de diseño no depende del tamaño de un proyecto, más bien permiten aumentar el tamaño de un sistema, es decir, convertir el código en un código escalable.

      Borrar
  15. Es excelente como los patrones de diseño brindan una solución que ya ha sido probada y bien documentada a problemas comunes de desarrollo de software que están sujetos a contextos similares, lo cual me parece que es de muchísima ayuda.

    ResponderBorrar
  16. Los patrones de diseño brindan soluciones a problemas comunes en el desarrollo de software. Además, los patrones permiten a los desarrolladores comunicarse utilizando nombres conocidos y bien entendidos para las interacciones de software. Los patrones de diseño comunes se pueden mejorar con el tiempo, haciéndolos más robustos.

    ResponderBorrar
  17. Existen tutoriales para aprender programación donde no mencionan estos patrones, es conveniente usarlos para aprender a programar?

    ResponderBorrar
    Respuestas
    1. Tienes que tener en cuenta el tipo de tutorial que estás viendo, si es de programación básica, difícilmente tratará el tema de patrones de diseño ya que es un tema que requiere de bases en programación orientada a objetos. Por ejemplo, una vez que aprendes los fundamentos básicos en programación puedes partir al mundo de los patrones de diseño para convertirte en un mejor developer.

      Borrar