Patró de disseny

En enginyeria de programari, un patró de disseny és una solució general a un problema comú i recurrent en el disseny de programari. Un patró de disseny no és un disseny acabat que es pot transformar directament en codi; és una descripció o plantilla per resoldre un problema que es pot utilitzar en moltes situacions diferents.

Els patrons de disseny orientats a objectes normalment mostren relacions i interaccions entre classes o objectes, sense especificar les classes d'aplicació finals o objectes que hi estan implicats. Els algorismes no són considerats patrons de disseny, ja que aquests resolen els problemes computacionals més que els problemes de disseny.

Història

[modifica]

Els patrons sorgiren com a concepte d'arquitectura de la mà de Christopher Alexander. El 1987, Kent Beck i Ward Cunningham començaren a experimentar amb la idea d'aplicar patrons a la programació i van presentar els resultats a la conferència d'OOPSLA aquell mateix any. En els anys següents, Beck, Cunningham i altres investigaren aquell treball.

Els patrons de disseny guanyaren popularitat en la informàtica després de la publicació del llibre Design Patterns: Elements of Reusable Object-Oriented Software l'any 1994.

Objectius dels patrons

[modifica]

Els patrons de disseny pretenen:

  • Proporcionar catàlegs d'elements reusables en el disseny de sistemes de programari.
  • Evitar la reiteració a la recerca de solucions a problemes ja coneguts i solucionats anteriorment.
  • Formalitzar un vocabulari comú entre dissenyadors.
  • Estandarditzar el mode en el que es realitza el disseny.
  • Facilitar l'aprenentatge de les noves generacions de dissenyadors condensant coneixement ja existent.

Tanmateix, no pretenen:

  • Imposar certes alternatives de disseny enfront d'altres.
  • Eliminar la creativitat inherent al procés de disseny.

No és obligatori utilitzar els patrons, només és aconsellable en el cas de tenir el mateix problema o similar que soluciona el patró, sempre tenint en compte que en el cas particular pot no ser aplicable. "Abusar o forçar l'ús dels patrons pot ser un error".

Relació de principals patrons gang of four (GoF)

[modifica]
Patrons creacionals
  • Abstract Factory (fàbrica abstracta): Permet treballar amb objectes de diferents famílies de manera que aquestes famílies no es barregin, però fent que el tipus de familia utilitzat sigui transparent.
  • Factory Method (mètode de fabricació): Centralitza en una classe constructora la creació d'objectes d'un subtipus d'un tipus determinat, ocultant a l'usuari la casuística per escollir el subtipus a crear.
  • Builder (constructor virtual): Abstrau el procés de creació d'un objecte complex, centralitzant-lo en un únic punt.
  • Prototype (prototip): Crea nous objectes clonant-los d'una instància existent.
  • Singleton (instància única): Garanteix l'existència d'una única instància per una classe i la creació d'un mecanisme d'accés global per aquesta instància.
Patrons estructurals
  • Adapter (adaptador): Adapta una interfície perquè pugui ser utilitzada per una classe que, d'altra manera, no podria.
  • Bridge (Pont): Desacobla una abstracció de la seva implementació.
  • Composite (objecte compost): Permet tractar objectes compostos com si es tractés d'un de sol.
  • Decorator (embolcall): Afegeix funcionalitats a una classe dinàmicament.
  • Facade (façana): Proveeix d'una interfície unificada simple per accedir a una interfície o grup d'interfícies d'un subsistema.
  • Flyweight (pes lleuger): Redueix la redundància quan gran quantitat d'objectes posseeixen idèntica informació.
  • Proxy: Manté un representant d'un objecte.
Patrons de comportament
  • Cadena de responsabilitat (cadena de responsabilitat): Permet establir la línia que han de seguir els missatges perquè els objectes executin una tasca indicada.
  • Command (ordre): Encapsula una operació en un objecte, permetent executar aquesta operació sense necessitat de conèixer-ne el contingut.
  • Interpreter (intèrpret): Donat un llenguatge, en defineix la gramàtica així com les eines necessàries per interpretar-lo.
  • Iterator (iterador): Permet realitzar recorreguts sobre objectes compostos independentment de la seva implementació.
  • Mediator (mediador): Defineix un objecte que coordini la comunicació entre objectes de diferents classes, però que funcionen com un conjunt.
  • Memento (record): Permet tornar a estats anteriors del sistema.
  • Patró observador: Defineix una dependència d'un a molts entre objectes, de manera que quan un objecte canvia d'estat es notifiqui i s'actualitzin automàticament tots els objectes que en depenen.
  • State (estat): Permet que un objecte canviï el seu comportament cada vegada que canviï el seu estat intern.
  • Patró estratègia: Permet disposar de diversos mètodes per a resoldre un problema i escollir-ne un en temps d'execució.
  • Template Method (Mètode plantilla): Defineix en una operació l'esquelet d'un algorisme, delegant a les subclasses alguns dels passos, el que permet que les subclasses redefineixin certs passos d'un algorisme sense canviar-ne l'estructura.
  • Visitor (visitant): Aquest patró serveix per indicar que algú (visitador) ha visitat quelcom i així saber que ha estat visitat per un visitador.

Vegeu també

[modifica]

Enllaços externs

[modifica]
  • The PatternShare community - una comunitat per compartir patrons. (anglès)
  • Guia de llocs web que proporcionen catàlegs de patrons Arxivat 2004-04-02 a Wayback Machine. (anglès)