L'acrònim GRASP, en l'àmbit de la programació orientada a objectes, correspon a General Responsibility Assignment Software Patterns (Patrons Generals de Software per a l'Assignació de Responsabilitats)
El terme patrons GRASP, més que a patrons pròpiament dits, fa referència a una sèrie de bones pràctiques i principis fonamentals a l'hora d'assignar responsabilitats als diferents objectes i classes.
Els patrons GRASP intenten solucionar problemes recurrents a gairebé tots els projectes de desenvolupament de software. Aquestes tècniques no s'inventen per tal de crear nous mètodes de treball si no per documentar i estandarditzar principis llargament testejats i funcionals.
El patró controlador és un patró que serveix com a intermediari entre una determinada interfície i l'algorisme que l'implementa, de manera que rep les dades de l'usuari i les envia a les diferents classes segons el mètode anomenat. Un controlador delega en altres objectes el treball que es necessita fer, és a dir, controla o coordina l'activitat.
Hi ha dos tipus de controladors:
Per a la creació d'un patró controlador s'ha de seguir uns passos:
La utilització d'aquest patró pot aportar un augment del potencial per reutilitzar les interfícies i dona un raonament sobre l'estat (seqüència de passos) dels casos d'ús.
Aquest patró suggereix que la lògica de negocis ha d'estar separada de la capa de presentació, això per augmentar la reutilització de codi i alhora tenir un major control. Es recomana dividir els esdeveniments del sistema en el major nombre de controladors per poder augmentar la cohesió i disminuir l'acoblament.
El patró creador ens ajuda a identificar qui ha de ser el responsable de la creació de nous objectes o classes. En altres paraules, assigna la responsabilitat de creació d'un objecte.
La intenció bàsica del patró és trobar un creador que necessiti connectar-se amb l'objecte creat en qualsevol moment.
Assignarem a la classe A la responsabilitat de crear una instància de la classe B si:
Per a la creació d'un patró creador s'ha de seguir uns passos:
Utilitzar el patró creador aporta uns certs avantatges. Suporta un baix acoblament, el que suposa una facilitat de manteniment i reutilització de codi. La responsabilitat s'assigna a la classe que compleix amb els criteris i d'aquesta manera se separa la lògica de creació i l'execució actual.
Però també té contraindicacions, ja que l'operació de crear la instància pot arribar a ser molt complexa. Per a solucionar aquest problema es poden recórrer als patrons de disseny com el Factory Method o Abstract Factory.
És el principi bàsic que determina l'assignació de responsabilitats. Aquest principi estipula que la responsabilitat de creació d'un objecte o de la implementació d'un mètode ha recaure sobre la classe que coneix tota la informació necessària per dur a terme la tasca corresponent. D'aquesta manera aconseguim mantenir l'encapsulació de la informació.