title: Lenguaje de patrón
text: # Lenguaje de patrón
  
  En diseño, un lenguaje de patrón es un método estructurado para describir una serie de buenas prácticas de diseño en un área particular. Se caracteriza por:
  * Descubrir y nombrar los problemas más comunes en el campo de interés.
  * Describir las características principales de las soluciones efectivas para llegar al objetivo marcado.
  * Ayudar al diseñador a moverse de un problema a otro de una forma lógica.
  * Permitir diferentes caminos en un mismo proceso de diseño.
  Los lenguajes de patrón se utilizan para formalizar los valores de decisiones cuya efectividad resulta obvia a través de la experiencia, pero que es difícil de documentar y pasar a los aprendices. También son herramientas útiles a la hora de estructurar el conocimiento y comprender sistemas complejos sin caer en la simplificación extrema. Estos procesos incluyen la organización de personas o grupos que tienen que tomar decisiones complejas, y revelan cómo interactúan las diferentes funciones como parte del total.
  
  # Lenguaje de patrón
  ## Origen
  
  Christopher Alexander acuñó el término lenguaje de patrón. Lo usó para referirse a los problemas normales del diseño arquitectónico y civil. Su uso iba desde la forma de estructurar una ciudad a como debían disponerse las ventanas en una habitación. La idea se popularizó gracias a su libro A Pattern Language.
  El libro de Alexander The Timeless Way of Building describe qué significa para él lenguaje de patrón y cómo se aplica al diseño de edificios y ciudades. Sin embargo, este sistema es aplicable a cualquier otro campo del diseño.
  Alexander da la siguiente definición de patrón: "Cada patrón describe 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."
  Según Richard Gabriel: "Cada patrón es una regla de tres partes, la cual expresa una relación entre un cierto contexto, un conjunto de fuerzas que ocurren repetidamente en ese contexto y una cierta configuración software que permite a estas fuerzas resolverse por sí mismas."
  
  # Lenguaje de patrón
  ## Muchos patrones forman un lenguaje
  
  Así como las palabras deben tener una relación gramática y semántica entre ellas para crear un lenguaje oral útil, los patrones de diseño deben estar relacionados los unos con los otros para poder formar un lenguaje de patrones. En el trabajo de Alexander está implícita la idea de que los patrones deben estar organizados en estructuras lógicas o estructuras intuitivas. La estructura (jerárquica, iterativa, etc) puede variar, dependiendo del tema. Cada patrón debe indicar su relación con otros patrones y con el lenguaje en sí.
  
  # Lenguaje de patrón
  ## Uso
  
  Alexander animó a la gente que usaba su sistema a expandirlo con patrones que los usuarios creasen. Para hacer esto posible, sus libros no se centran de forma estricta en arquitectura o en ingeniería civil. En los libros también habla del método general de los lenguajes de patrón. De esta forma, sus métodos se han usado para documentar el conocimiento experimental en diversos campos, como los patrones informáticos que se usan en ingeniería de software, patrones de diseño de interacción en Interacción del hombre con la computadora y patrones pedagógicos en educación. Sin embargo, las especificaciones de Alexander sobre como usar un lenguaje de patrón así como cómo crear uno nuevo siguen ejerciendo su autoridad, y sus libros son la referencia para expertos en campos muy diversos.
  Es importante señalar que notaciones como UML o la colección de símbolos de los diagramas de flujo no son lenguajes de patrón (aunque podrían utilizarse para expresar un lenguaje de patrón). Una receta o cualquier otro conjunto de secuencias a seguir, con sólo un posible camino desde el inicio hasta el final, tampoco es un lenguaje de patrón. Sin embargo, el proceso de diseño de una nueva receta puede beneficiarse del uso de los lenguajes de patrón.
  
  # Lenguaje de patrón
  ## Cómo documentar un patrón
  
  Siguiendo las enseñanzas de Alexander, un patrón individual debe describirse en 3 partes:
  * "Contexto" - ¿Bajo qué condiciones resolverá esta solución el problema?
  * "Sistema de fuerzas" - Se puede considerar como el problema o el objetivo
  * "Solución" - Una configuración que pone las fuerzas en equilibrio o resuelve el problema presentado
  Contexto -> Sistema de fuerzas -> Solución
  Así, una entrada en un lenguaje de patrón debería tener un nombre sencillo, una descripción concisa del problema, una solución clara, y suficiente información para ayudar al lector a entender cuando aplicar esta solución. También debería mostrar que patrones deben tenerse en consideración de ante mano, y que patrones se deberían considerar más adelante.
  
  # Lenguaje de patrón
  ## Ejemplo sencillo de un patrón
  
  Nombre: GalletaChocolateRelación
  Contexto: Cocinando galletas de chocolate para tu familia y amigos
  Considera estos patrones anteriormente: AzucarRelación, HarinaRelación, HuevoRelación
  Problema: Determinar la relación óptima entre trozos de chocolate y masa de galleta
  Solución: Observe que la mayoría de la gente considera los trozos de chocolate como lo mejor de la galleta. También observe que demasiado chocolate haría que la galleta no se mantuviese junta, disminuyendo su atractivo. Como se están cocinando pocas galletas, el coste no es un gran problema. Así, utilice tanto chocolate como pueda manteniendo la galleta compacta.
  A considerar ahora: NuecesRelación o TiempoCocción o MetodoCongelación.
  
  # Lenguaje de patrón
  ## Lenguajes de patrón y wikis
  
  Ward Cunningham creó la Wiki original, el Portland Pattern Repository, como una forma de expresar los lenguajes de patrón de forma efectiva. En la actualidad tiene cientos de patrones de diferentes campos, incluyendo muchos sobre programación extrema.
  
  # Lenguaje de patrón
  ## Trucos para crear un lenguaje de patrón
  
  Los siguientes pasos asumen el uso de una aplicación informática de hipertexto, como una wiki.
  * Piense sobre la situación como una jerarquía de ideas, como un fractal, desde lo general al detalle.
  * Ponga cada idea en una página diferente, nombrándola con el título que describe la idea en pocas palabras.
  * En un índice, ordena las ideas desde las más grandes a los detalles. Esto permitirá al lenguaje de patrón ser lineal y fácilmente imprimible, si es necesario. Este paso incrementa de forma amplia la usabilidad del sistema si (casi) todas las páginas se mencionan en la gran lista.
  * Para cada patrón, escriba una descripción del problema, la solución y un ejemplo. Mientras lo escribe, conéctelo con los patrones con los que se relacione
  * Los gráficos son de gran ayuda.
  * Si hay varias personas editando el lenguaje de patrón, firme su trabajo. Además de la razón más obvia, permite conseguir un lista de las páginas usando enlace recíprocos en cada página.
  * Muestra referencias donde sea apropiado
  * Ponga un enlace al índice al final de cada patrón
  * Probablemente necesita una ventana para escribir su página, y al menos una más para saltar atrás y adelante con las referencias.