# Llenguatge de patró

En disseny, un llenguatge de patró és un mètode estructurat per a descriure una sèrie de bones pràctiques de disseny en una àrea particular. Es caracteritza per:
* Descobrir i nomenar els problemes més comuns en el camp d'interès.
* Descriure les característiques principals de les solucions efectives per a arribar a l'objectiu marcat.
* Ajudar el dissenyador a moure's d'un problema a un altre d'una forma lògica.
* Permetre diferents camins en un mateix procés de disseny.
Els llenguatges de patrons serveixen per formalitzar decisions basades en valors, la validesa de les quals es confirma amb l'experiència, però que són difícils de documentar i transmetre als aprenents. També són eines útils per estructurar el coneixement i comprendre sistemes complexos sense caure en una simplificació excessiva. Aquests processos inclouen l'organització de persones o grups que han de prendre decisions complexes i permeten entendre com interactuen les diferents funcions dins del conjunt.

## Origen

Christopher Alexander va encunyar el terme llenguatge de patró. Ho va usar per a referir-se als problemes normals del disseny arquitectònic i civil. El seu ús anava des de la manera d'estructurar una ciutat a com havien de disposar-se les finestres en una habitació. La idea es va popularitzar gràcies al seu llibre A Pattern Language.
El llibre d'Alexander El llenguatge de patrons descriu què significa per a ell llenguatge de patró i com s'aplica al disseny d'edificis i ciutats. No obstant això, aquest sistema és aplicable a qualsevol altre camp del disseny.
Alexander defineix un patró de la següent manera: "Cada patró descriu un problema que es repeteix contínuament en el nostre entorn i, a continuació, en presenta el nucli de la solució, de manera que aquesta es pugui aplicar més d'un milió de vegades sense que mai es repeteixi exactament de la mateixa forma."
Segons Richard Gabriel, "Cada patró és una regla de tres parts que estableix una relació entre un context determinat, un conjunt de forces que es repeteixen en aquest context i una configuració de programari que permet que aquestes forces es resolguin per si mateixes."

## Molts patrons formen un llenguatge

Així com les paraules han de tenir una relació gramàtica i semàntica entre elles per crear un llenguatge oral útil, els patrons de disseny han d'estar relacionats els uns amb els altres per poder formar un llenguatge de patrons. A la feina d'Alexander està implícita la idea que els patrons han d'estar organitzats en estructures lògiques o estructures intuïtives . L'estructura ( jeràrquica, iterativa, etc) pot variar, depenent del tema. Cada patró ha d'indicar la relació amb altres patrons i amb el llenguatge en si.

## Ús

Alexander va animar a la gent que usava el seu sistema a expandir-lo amb patrons que els usuaris creessin. Per a fer això possible, els seus llibres no se centren de manera estricta en arquitectura o en enginyeria civil. En els llibres també parla del mètode general dels llenguatges de patró. D'aquesta forma, els seus mètodes s'han usat per a documentar el coneixement experimental en diversos camps, com els patrons informàtics que s'usen en enginyeria de programari, patrons de disseny d'interacció en Interacció de l'home amb la computadora i patrons pedagògics en educació. No obstant això, les especificacions d'Alexander sobre com usar un llenguatge de patró així com com crear un nou continuen exercint la seva autoritat, i els seus llibres són la referència per a experts en camps molt diversos.
És important assenyalar que notacions com UML o la col·lecció de símbols dels diagrames de flux no són llenguatges de patró (encara que podrien utilitzar-se per a expressar un llenguatge de patró). Una recepta o qualsevol altre conjunt de seqüències a seguir, amb només un possible camí des de l'inici fins al final, tampoc és un llenguatge de patró. No obstant això, el procés de disseny d'una nova recepta pot beneficiar-se de l'ús dels llenguatges de patró.

## Com documentar un patró

Seguint els ensenyaments d'Alexander, un patró individual ha de descriure's en 3 parts:
* "Context" - Sota quines condicions resoldrà aquesta solució el problema?
* "Sistema de forces" - Es pot considerar com el problema o l'objectiu
* "Solució" - Una configuració que posa les forces en equilibri o resol el problema presentat
Així, una entrada en un llenguatge de patró hauria de tenir un nom senzill, una descripció concisa del problema, una solució clara, i suficient informació per a ajudar el lector a entendre quan aplicar aquesta solució. També hauria de mostrar que patrons han de tenir-se en consideració de davant mà, i que patrons s'haurien de considerar més endavant.

## Exemple senzill d'un patró

Nom: Galleta Chocolate Relación
Context: Cuinant galetes de xocolata per a la teva família i amics
Considera aquests patrons anteriorment: Azucar Relación, Harina Relación, Huevo Relación
Problema: Determinar la relació òptima entre trossos de xocolata i massa de galeta
Solució: Observi que la majoria de la gent considera els trossos de xocolata com el millor de la galeta. També observi que massa xocolata faria que la galeta no es mantingués junta, disminuint el seu atractiu. Com s'estan cuinant poques galetes, el cost no és un gran problema. Així, utilitzi tant xocolata com pugui mantenint la galeta compacta.
A considerar ara: Nueces Relación o Tiempo Cocción o Metodo Congelación.

## Llenguatges de patró i wikis

Ward Cunningham va crear la Wiki original, el Portland Pattern Repository, com una manera d'expressar els llenguatges de patró de manera efectiva. En l'actualitat té centenars de patrons de diferents camps, incloent molts sobre programació extrema.

## Trucs per a crear un llenguatge de patró

Els següents passos assumeixen l'ús d'una aplicació informàtica d'hipertext, com una wiki.
* Pensi sobre la situació com una jerarquia d'idees, com un fractal, des del general al detall.
* Posi cada idea en una pàgina diferent, nomenant-la amb el títol que descriu la idea en poques paraules.
* En un índex, ordena les idees des de les més grans als detalls. Això permetrà al llenguatge de patró ser lineal i fàcilment imprimible, si és necessari. Aquest pas incrementa de forma àmplia la usabilitat del sistema si (gairebé) totes les pàgines s'esmenten en la gran llista.
* Per a cada patró, escrigui una descripció del problema, la solució i un exemple. Mentre ho escriu, connecti-ho amb els patrons amb els quals es relacioni
* Els gràfics són de gran ajuda.
* Si hi ha diverses persones editant el llenguatge de patró, ferm el seu treball. A més de la raó més òbvia, permet aconseguir un llista de les pàgines usant enllaç recíprocs en cada pàgina.
* Mostra referències on sigui apropiat
* Posi un enllaç a l'índex al final de cada patró
* Probablement necessita una finestra per a escriure la seva pàgina, i almenys una més per a saltar enrere i avanci amb les referències.

## Enllaços externs

* The Portland Pattern Repository
* Tips For Writing Pattern Languages de Ward Cunningham
* Liberating Voices Projecte de llenguatges de patró
* Liberating Voices Projecte de llenguatges de patró (castellà)