Friday, September 28, 2018


Patrones GoF

Los patrones de diseño, extensamente utilizados en la industria del desarrollo de software, representan soluciones standard a problemas recurrentes.

La idea de patrón en el contexto del desarrollo se inspira en el arte arquitectónico, proporcionando un recurso conceptualmente próximo. Pese a no ser los inventores del término, los cuatro miembros del denominado Gang of Four (GoF) fueron unos de sus primeros impulsores y probablemente sus mayores divulgadores. Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides propusieron en Design Patterns: Elements of Reusable Object-Oriented Software (1994) una novedosa aproximación al desarrollo orientado a objetos que ha sobrevivido hasta a día de hoy en las aulas de ingeniería.

Los autores del GoF proponen dos principios básicos:

·         Programar orientado a una interfaz y no a una implementación.

Este principio busca que el código se utilice como una herramienta que no revele su funcionamiento. La clásica metáfora de la “caja negra” implementada a través del principio de la encapsulación. De este modo, los usuarios del código se centran en la firma abstracta, lo que puede hacer y no puede hacer el código, en vez de en el cómo lo hace. Se establece una separación fundamental entre el programador del código -la persona que lo crea y lo mantiene- y el usuario del código -entendido como el desarrollador que utiliza la librería sin modificar su funcionamiento-. Dicho de otro modo, los patrones GoF buscan proporcionarnos piezas con instrucciones claras sobre con qué se pueden conectar y qué hacen, pero que no nos dicen nada sobre su funcionamiento interno.

·         Favorecer la composición antes que la herencia.

En las arquitecturas orientadas a objetos, la composición y la herencia pueden ser muy próximas funcionalmente, pero conceptualmente son distintas. Ambas permiten la agregación de funcionalidades cuando diseñamos una clase y evitan la redundancia de código, pero tienen una diferencia fundamental: la herencia expone el funcionamiento de una clase, mientras que la agregación no lo hace (si trata con clases bien encapsuladas). Siguiendo el principio anterior, es lógico que los patrones GoF favorezcan la composición, ya que la herencia no garantiza la encapsulación. Los autores del GoF llegan a afirmar que la herencia no es compatible con la encapsulación.


Los patrones GoF se dividen en tres tipos fundamentales, agrupados según el tipo de soluciones que aplican.

·         Los patrones creacionales son aquellos que aplican soluciones que crean objetos de manera determinada. De este modo buscan encapsular la instanciación de objetos dentro de los métodos de otros objetos opacos, ocultándola al usuario del código.
·         Los patrones estructurales abstraen la composición de interfaces a través de otros recursos, como la herencia o la agregación. Se encargan de proporcionar al usuario del código un objeto de firma simple que agrupa múltiples objetos de manera opaca.
·         Los patrones de comportamiento buscan proporcionar al usuario del código objetos que aporten una funcionalidad determinada. De este modo los objetos presentan una firma cuyos métodos resuelven un problema específico sin exponer su funcionamiento.




Uno de los hitos más importantes en el diseño orientado a objetos fue la publicación del libro “Design Patterns” por Gamma, Helm, Johnson y Vlissides en 1995; conocidos como “Gang of Four”, GoF. Se revelan 23 patrones ampliamente utilizados. En este apartado se tratarán algunos de ellos.

Adaptador

Problema: ¿Cómo resolver interfaces incompatibles, o proporcionar una interfaz
estable para componentes parecidos con diferentes interfaces?
Solución: Convierta la interfaz original de una componente en otra, mediante un
objeto adaptador intermedio. El propósito de este patrón es convertir la interfaz de una clase en otra interfaz que es la que esperan los clientes. Este patrón permite que cooperen clases que de otra forma no podrían colaborar por no tener compatibilidad entre ellas.



Debería usarse el patrón Adaptador cuando:
*Se quiere utilizar una clase existente y su interfaz no concuerda con lo
que se espera.
·      *Se quiere crear una clase reutilizable que coopere con clases no
relacionadas o que no han sido previstas, i.e. clases que no tienen por qué
tener interfaces compatibles.

Los participantes en este patrón realizan los siguientes roles:
·     *Objetivo: define los servicios del dominio que usa el cliente. Representa un interfaz estable con los servicios tal cual espera el cliente.
·       *Cliente: utiliza los servicios del paquete a través del interfaz Objetivo.
·       * Adaptable: Implementa los servicios del paquete.
·        *Adaptador: adapta la interfaz de Adaptable a la interfaz Objetivo.

Factoría

Problema: ¿Quién debe ser responsable de la creación de los objetos cuando
existen consideraciones especiales, como una lógica de creación compleja, el deseo deseparar las responsabilidades de la creación para manejar la cohesión, etc.?
Solución: Crear un objeto de Fabricación Pura denominado Factoría que maneje
la creación.

Los objetos Factoría tienen varias ventajas:

·         *Separación de responsabilidades en la creación compleja en objetos de apoyo cohesivo.
·        *Ocultan la lógica de creación potencialmente compleja.
·    *Permite introducir estrategias para mejorar el rendimiento de la gestión de la memoria, como objetos caché o de reciclaje.

El cliente sólo utilizará las interfases de sus paquetes servidores, dejando que sea
la lógica externa quien decida sobre la implementación y la factoría quien crea los
objetos que implementan los servicios. A este patrón GoF se le llama Factoría Abstacta. Se empleará cuando:

·         *Un sistema debe ser independiente de cómo se crean, componen y
representan sus productos.
·        * Un sistema debe ser configurado como una familia de productos entre
varias.
·         *Quiere proporcionar una biblioteca de clases de productos y sólo quiere
revelar sus interfaces, no sus implementaciones.

Singleton

Problema: ¿Cómo garantizar que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella? Solución: Definir un método estático de la clase que devuelva el singleton.
La clave del Singleton es evitar que el cliente no tenga el control sobre la vida del objeto. Para tal fin se declaran todos los constructores como privados y se previene para que el compilador no produzca constructores por defecto ni sobrecarga de operadores de asignación. Se construye el servicio de tipo estático para obtener la referencia Singleton, getInstancia(), y también se colocará como estática la propia referencia. En la notación se puede emplear el estereotipo <> para indicar que sólo existe una única instancia de esta clase.

Estrategia


Problema: ¿Cómo diseñar algoritmos que están relacionados? ¿Cómo diseñar que estos algoritmos se puedan variar dinámicamente? Solución: Defina cada algoritmo o estrategia en una clase independiente, con una interfaz común.

Este patrón define una familia de algoritmos relacionados, los encapsula y los hace intercambiables. La consecuencia de esta estructura es la variación dinámica de los algoritmos sin que los clientes se vean afectados. Los roles de este patrón son:

·         *Estrategia: declara una interfaz común a todos los algoritmos permitidos.

·        *Estrategia concreta: implementa el algoritmo concreto usando la interfaz Estrategia.

*Contexto: este objeto usa la interfaz Estrategia para llamar al algoritmo concreto definido por una Estrategia Concreta. Tiene como atributo a un objeto de Estrategia Concreta, a través de su interfaz. 

Observador

Problema: Diferentes tipos de objetos receptores están interesados en el cambio
de estado o eventos de un objeto emisor y quieren reaccionar cada uno a su manera cuando el emisor genere un evento. Además, el emisor quiere mantener bajo acoplamiento con los receptores ¿qué hacer?
Solución: Defina una interfaz “suscriptor” u “oyente”. Los suscriptores
implementan esta interfaz. El emisor dinámicamente puede registrar los suscriptores que están interesados en un evento y notificarles cuando ocurre un evento.


Los roles que se desempeñan en este patrón son:

ü  Observable
·         Un Observable puede ser observado por cualquier número de objetos Observador.
·         proporciona una interfaz para asignar y quitar objetos Observador.

ü  Observador
·         define una interfaz para actualizar los objetos que deben ser notificados
          ante cambios en un sujeto observable.
ü  ObservableConcreto
·         almacena el estado de interés para los objetos ObservadorConcreto.
·         envía una notificación a sus observadores cuando cambia su estado.

ü  ObservadorConcreto
·         mantiene una referencia a un objeto ObservableConcreto.
·         guarda un estado que debería ser consistente con el sujeto observable.
·         Implementa la interfaz de actualización del Observador para mantener su
          estado consistente con el sujeto observable.

(Grupo java) Dayani España, Andres Maita

20 comments:

  1. Los patrones de diseño surgieron a partir de la experiencia de gran numero de programadores que buscaban darle solución a problemas específicos, es por ello que estos fundamentalmente se basan en formas de hacer las cosas ya que permiten mediante estructuras ya definidas organizar una aplicación por ejemplo. De esta manera los patrones de diseño facilitan la forma de trabajar en la creación de software de calidad porque estos son una solución que ya fue probada anteriormente para un problema determinado. Para la implementación de patrones es necesario conocer los elementos que lo conforman como el nombre el cual es necesario para describir el problema y la solución en palabras claves, el problema que debe especificar su contexto y las condiciones para poder aplicar el patrón, además la solución donde se deben describirse los componentes del diseño y las consecuencias que serán el resultado de aplicar dicho patrón donde se evaluaran las alternativas de este. Es importante usar patrones de diseño en el desarrollo de software puesto que estos son de gran ayuda para reducir el tiempo de desarrollo ya que permiten reutilizar el código.

    ReplyDelete
  2. Para los desarrolladores este tema es de mucha importancia, ya sea por la facilidad de reutilizar diseños y arquitecturas. Además de brindar soluciones a problemas comunes, planteando salidas generalizadas en forma de plantillas que se pueden aplicar a inconvenientes del mundo real. Sin embargo, no deben verse como descripciones prescriptivas para alguna salida, se considera más significativo entender los conceptos que describen los patrones en lugar de memorizar sus clases, métodos y propiedades exactas. Claro, aplicando estos patrones de manera apropiada, si se utiliza el patrón incorrecto para una situación o emplear un patrón de diseño a una solución cualquiera puede complicar un código y provocar problemas de mantenimiento. Pero hay que tener claro que estos patrones de diseño tienen dos usos principales en el desarrollo de software; el primero es proporcionar una conocimiento estándar y específico para un escenario particular, por ejemplo, un patrón de diseño SINGLETON significa el uso de un solo objeto como ustedes colocaron, esto para que todos los desarrolladores familiarizados con el patrón de diseño único hagan uso de un solo objeto. Y finalmente el segundo uso es ambientado a mejores prácticas para el aprendizaje de estos patrones ayudando a los desarrolladores sin experiencia a aprender el diseño de software de una manera fácil y más rápida.

    ReplyDelete
  3. Complementando un poco el comentario anterior sobre la reutilizacion de codigo en el desarrollo de software y como este permite la reduccion del tiempo de desarrollo cuando se utilizan patrones de diseño, pues efectivamente esta aplicabilidad de reutilizacion sin duda alguna es importante, puesto que de esta manera se pueden aprovechar los codigos de programas anteriores, o dentro del mismo programa para evitar reescribir y llenar el programa de lo que se conoce como codificar en forma de Snake o serpiente, lo cual reduce los tiempos de desarrollo considerablemente y la redundancia, haciendo que el software sea ligero y ocupe menos consumo de memoria y procesamiento.
    Continuando con los patrones de diseño Gang of four en el que enfatizan la importancia de encapsular el codigo para solo dejar saber a los usuarios lo que hace el sistema mas no exponiendo como funciona, esto le brinda cierta seguridad a los creadores de sistemas informaticos que en cierta forma algunos suelen ser celosos con el trabajo que realizan. Y que este tipo de patones de diseño haya perdurado en el tiempo demuestra que su utilidad es alta además de la confianza en que los resultados seran los esperados al momento de desarrollar.

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. Un tema de gran utilidad y una herramienta sumamente poderosa para los desarrolladores orientados a objetos. Ahora, con el fin de aportar un poco más de información sobre todo en el caso del observador, se podría decir que este es uno de los patrones de diseño más utilizados a día de hoy ya que este define una dependencia de tipo “uno a muchos” entre los objetos del sistema, así cuando haya algún cambio en el estado de uno de los componentes u objetos, este notifica a los otros dependientes. Por esta razón hay que aclarar también que este patrón no es del todo apto para aplicaciones simples, realmente es idóneo para aplicaciones de gran tamaño y con mucha complejidad que posean muchos módulos y componentes. Este se trata de un patrón de comportamiento, por lo que está relacionado con algoritmos de funcionamiento y asignación de responsabilidades a clases y objetos. Actualmente, este patrón es clave en software que poseen una arquitectura MVC (modelo vista controlador), arquitectura que podemos encontrar en diversas herramientas como Ruby on Rails, Django, entre otros. Para ejemplificar este patrón se podría imaginar un juego online en el que hay distintos jugadores conectados a un mismo servidor, de este modo si hay algún cambio en uno de los jugadores, el servidor notificará al resto de participantes de los cambios que han ocurrido.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. Quizás más de uno muchas veces se han topado con un código de algún proyecto en el cual no tiene ni pie ni cabeza, es decir no saben por dónde empezar o tal vez nos atemorizamos por el hecho de mover una parte de código y que todo te marque en rojo o han pedido agregarle una funcionalidad y parece muy complejo reestructurarlo.
      Estos son problemas muy frecuentes cuando el software no fue diseñado con algún patrón y los problemas no son cuando recién se está creando el software o tiene sus primeros usuarios, muchas veces los problemas vienen después cuando el software evoluciona, se necesita nuevas implementaciones, otros requerimientos que realizar, entonces ahí vienen más personas a poder echar mano ese código y si es que no todas están en la misma coordinación no respeta un patrón de trabajo ahí recién vienen los problemas y es probable que todo lo que el código que se haya realizado se eche a la basura, por ello es de gran valor saber sobre este poderoso instrumento, debido a su utilidad para así tener un mejor manejo a la hora de diseñar un software y poderse ahorrar muchos dolores de cabeza.

      Delete
  7. This comment has been removed by the author.

    ReplyDelete
  8. En la ingeniería del software, un patrón constituye el apoyo para la solución a los problemas más comunes que se presentan durante las diferentes etapas del ciclo de vida del software. -El uso de patrones de diseño es una práctica que se adquiere con la experiencia y participación activa en proyectos de desarrollo software y del constante estudio en la aplicación de técnicas de reutilización basada en el uso de patrones de diseño.
    El proceso de identificación de patrones de diseño GOF en procesos de desarrollo software requiere de un conjunto de actividades ; inicialmente se construye un conjunto de criterios que permita establecer un punto de análisis para identificar los procesos de desarrollo más representativos, siendo obligatorio cumplir estos criterios para catalogarlos como válidos en este análisis, y obtener la muestra de procesos de desarrollo. El cumplimiento de las condiciones que deben presentar los procesos de desarrollo es estricto e importante, puesto que el objetivo de este trabajo de investigación consiste en obtener resultados a partir del estudio de procesos de desarrollo formales, de esta manera, se selecciona un grupo de procesos de desarrollo que cumplan con un estricto control de calidad en las fases de requerimientos, diseño, desarrollo e implantación.

    ReplyDelete
  9. Cuando tenemos la oportunidad de leer sobre los patrones nos damos cuenta que nuestra analogía del término con respecto a lo que significa realmente, no está tan lejos de la realidad. Se puede decir que un patrón es considerado como una especie de guía que te permite tomar en cuenta ciertas cualidades o experiencias para luego seguir sus pasos y hacerlo de una mejor manera, en este caso, se ve enfocado a una descripción sobre cómo resolver algún problema recurrente, la cual puede utilizarse en diversas situaciones. Entre los diferentes patrones encontramos una serie de utilidades, ya que estos se dan la tarea de explicar los diferentes problemas de diseño que se pueden presentar pero sobre todo intentan generar una solución óptima a dichos problemas de tal forma que pueda aplicarse simultáneamente, que sin tener necesidad de revelar su funcionamiento en detalle, no te permite hacer lo mismo para volver el proceso más accesible.

    ReplyDelete
  10. Un patrón de diseño es una forma reutilizable de resolver un problema común, además de esto creo que la correcta utilización de patrones agiliza mucho el trabajo y lo hace más legible por los demás. Muchas veces pensamos que nuestra aplicación es única (es cierto esto), pero nuestra aplicación tendrá partes comunes con otras aplicaciones como por ejemplo: el acceso a datos, la creación de objetos, operaciones entre sistemas, entre otras. En lugar de complicar las cosas, es decir, reinventar la rueda de diseño, podemos solucionar estos problemas utilizando algún patrón que han tenido éxito capturando la experiencia, ya que son soluciones probadas y documentadas por multitud de programadores. El tema que ha sido abordado por ustedes es importante en el contexto del desarrollo software, puesto que, aplicar patrones de diseño es considerado una buena práctica que apoya el aumento de la calidad en el proceso de desarrollo y el producto obtenido y estandariza el código fuente de una aplicación para facilitar su mantenimiento. Para finalizar se debe tener claridad sobre la utilidad de los patrones, es posible que un mal uso de un patrón de diseño haga más grande el problema de lo que realmente es en el momento de usar un patrón de diseño, donde realmente no es necesario.

    ReplyDelete
  11. El término de patrón puede ser visto como una descripción de un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo ni siquiera dos veces de la misma forma". En la ingeniería del software, un patrón constituye el apoyo para la solución a los problemas más comunes que se presentan durante las diferentes etapas del ciclo de vida del software.
    En la construcción de aplicaciones Web, los problemas a los que diseñadores y desarrolladores se enfrentan difieren de los que se presentan en otro tipo de procesos de desarrollo ya que el catálogo de referencia definido por GoF no muestra una tipificación que permita identificar qué patrón puede emplearse específicamente para el desarrollo de aplicaciones Web. Aunque son 23 patrones de diseño los que se presentan en el catálogo GoF, no todos pueden ser usados para el desarrollo de aplicaciones orientadas a la Web.
    Por tal razón es necesario definir cuáles de los patrones Gof se ajusta a la aplicación web a desarrollar debido a que una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objeto se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos. Además los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles.

    ReplyDelete
  12. En el caso de los patrones de comportamiento existen un poco de todo. Algunos siguen siendo muy útiles, como Command, o Mediator, y otros podríamos decir que violan los tan queridos por algunos principios SOLID, como State y Memento.
    En general, lo interesante de los patrones de diseño clásicos siguen siendo las ideas que hay detrás. Si en lugar de centrarte en memorizar los diagramas UML que hay en cientos de páginas intentas comprender qué hay detrás de cada patrón, qué problema tratan de resolver y cómo lo hacen, yo diría que todos los patrones de diseño clásico siguen teniendo validez hoy en día.
    Por desgracia muchas veces se intentan meter con calzador sólo por poder decir “yo uso patrones de diseño”, y además se sigue una guía de implementación pensada hace más de 20 años para un lenguaje diferente al que estás usando ahora.
    Afortunadamente, esto es sólo una fase y la mayoría de nosotros conseguimos superarla y sacarle partido a los patrones de diseño como lo que son: un catálogo de ideas para resolver problemas que nos proporcionan un lenguaje común para comunicarnos con otros desarrolladores.

    ReplyDelete
  13. Cuando se inicia en el mundo de la programación es importante indagar dado que existen un sin número de patrones, metodos o guias que facilicitan el desarrollo de software y no solo eso muchas veces ayudan a evitar grandes dolores de cabeza, ya que aplicando los consejos que estos patrones nos ofrecen se pueden bordear diferentes problemas que puedan generarse. En el caso particular de los Patrones GoF este nos proporciona una serie de principios que deben llevarse a cabo, además de explicar la forma correcta de como debe hacerse esto. Es importante destacar que este patrón brinda soluciones genéricas y el tipo de problema que se puede solucionar aplicándolo. Por ejemplo: en el caso de implementar factor Singleton se hace beneficioso cuando se quiere o se necesita instanciar únicamente un objeto, tal sería el caso de una cola de impresión o la conexión a una base de datos, etc.

    ReplyDelete
  14. Como ya vimos en el artículo sobre principios de diseño, si queremos desarrollar aplicaciones robustas y fáciles de mantener, debemos cumplir ciertas "reglas". Lo pongo entre comillas porque aunque estas reglas de diseño son recomendables (muy recomendables), no son obligatorias. Siempre podemos decidir no aplicarlas. Aunque si no lo hacemos, hay que ser conscientes de la razón de no aplicarlas y de sus consecuencias.

    Los patrones de diseño nos ayudan a cumplir muchos de estos principios o reglas de diseño. Programación SOLID, control de cohesión y acoplamiento o reutilización de código son algunos de los beneficios que podemos conseguir al utilizar patrones.

    ReplyDelete
  15. Como menciona el compañero pedro, los patrones lo que hacen es ahorrarnos tiempo, el objetivo principal de los patrones es facilitar la reutilización de diseños y arquitecturas software que han tenido éxito capturando la experiencia y haciéndola accesible a los no expertos...Otro aspecto que se considera importante mencionar, es el caso de los diseñadores y desarrolladores que en su afán de emplear "Buenas Prácticas", creen que los Patrones de Diseño son la panacea para solucionar cualquier problema a la hora de desarrollar software, este es un gran error, puesto que no todas las situaciones son candidatas para el uso de patrones de diseño. Se debe tener claridad sobre la utilidad de los patrones, es posible que el problema se haga más grande de lo que realmente es en el momento de usar un patrón de diseño, donde realmente no es necesario...
    Los patrones de diseño tratan los problemas del diseño de software que se repiten y que se presentan en situaciones particulares, con el fin de proponer soluciones a ellas. Son soluciones exitosas a problemas comunes.....Estas soluciones han ido evolucionando a través del tiempo. Existen muchas formas de implementar patrones de diseño. Los detalles de las implementaciones se llaman estrategias.
    En resumen, son soluciones simples y elegantes a problemas específicos del diseño de software orientado a objetos.

    ReplyDelete
  16. Los patrones son utilizados por los programadores para el ahorro de tiempo a la hora de codificar, los patrones de diseño permite que el programador con un poco mas de facilidad reciclar una arquitectura o un diseño ya existente, reutilizar y así hacer de su trabajo un poco más sencillo. Los patrones gof buscan darle una guía o las reglas necesarias para que el programador se oriente cómo hacer para la reutilización de códigos. Los patrones son como plantillas ya predeterminadas con por cosas que se pueden observar en la realidad. Debemos de estar consientes que debemos saber usar el patrón correcto dependiendo del problema que se nos presente, porque luego nos podrá traer problemas de mantenimiento, queremos solucionar problemas, no traer más con un patrón mal utilizado.

    ReplyDelete
  17. Los patrones de diseño brindan soluciones a problemas comunes en el diseño de software. En el caso de la programación orientada a objetos , los patrones de diseño generalmente están destinados a resolver los problemas de generación e interacción de objetos, en lugar de los problemas a mayor escala de la arquitectura general del software. Brindan soluciones generalizadas en forma de plantillas que se pueden aplicar a problemas del mundo real. Los patrones de diseño son una herramienta poderosa para los desarrolladores de software. Sin embargo, no deben verse como especificaciones prescriptivas para el software. Es más importante comprender los conceptos que describen los patrones de diseño, en lugar de memorizar sus clases , métodos y propiedades exactas . También es importante aplicar patrones de manera apropiada. Usar el patrón incorrecto para una situación o aplicar un patrón de diseño a una solución trivial puede complicar demasiado el código y provocar problemas de mantenimiento. Generar patrones de diseño es bastante ventajoso por que entraría en lo que es la practicas de técnicas buenas de programación, ya que generando diseños reutilizables tendríamos plantillas que podríamos extraer en todo momento y programar de una manera mas rápida, eficiente y suficiente.

    ReplyDelete
  18. La idea de los patrones de diseño se le ocurrió a un ingeniero civil, mientras trabajaba en el diseño de edificios y ciudades, descubriendo que había problemas de diseño comunes y que ciertos constructos podían usarse repetidamente para resolverlos. Luego varios profesionales del software comenzaron a incorporar sus principios de diseño y surgió el libro que mencionaron en su publicación, convirtiéndose en el más vendido en su época. Y no es una sorpresa que haya sido un éxito ese libro porque como uno de los grandes propósitos del ser humano es tratar de conseguir soluciones genéricas. Con GoF y sus 23 patrones ya establecidos, podemos encontrar soluciones y aplicarlas en un contexto en específico, pero siempre teniendo en cuenta que no hay forzar el problema para que encaje con el patrón por facilidad o comodidad. Es una referencia sujeta a interpretación, no la única manera de hacer las cosas.

    ReplyDelete
  19. Hay una cosa que está clara, por muy específico que sea un problema al que te estés enfrentando durante el desarrollo de tu software, hay casi un 100 por ciento de posibilidades de que alguien se haya enfrentado a un problema tan similar en el pasado, que se pueda modelar de la misma manera. Con modelado me estoy refiriendo a que la estructura de las clases que conforma la solución de tu problema puede estar ya inventada, porque debo estar resolviendo un problema común que otra gente ya ha solucionado antes. Si la forma de solucionar ese problema se puede extraer, explicar y reutilizar en múltiples ámbitos, entonces nos encontramos ante un patrón de diseño de software.

    ReplyDelete