Padrão GRASP
Anna Júlia Lira

GRASP é uma sigla para General Responsibility Assignment Software Patterns

consiste em diretrizes para atribuir responsabilidade a classes e objetos em projeto orientado a objetos

São 9 padrões:

  1. Criador (Creator);
  2. Especialista na Informação (Information Expert);
  3. Baixo Acoplamento (Low Coupling);
  4. Alta Coesão (High Cohesion);
  5. Controlador (Controller);
  6. Polimorfismo (Polymorphism);
  7. Fabricação/Invenção Pura (Pure Fabrication);
  8. Indireção (Indirection);
  9. Variações Protegidas (Protected Variations)

responde a problemas comuns em projetos de desenvolvimento de software

1. Criador
indica que a responsabilidade de criar uma instância de uma classe deve ser atribuída a outra classe

2. Especialista na Informação
recomenda atribuir a responsabilidade a uma classe que possua as informações necessárias para cumprir essa responsabilidade. Significa escolher a classe que tem o conhecimento relevante para tomar decisões relacionadas a uma tarefa específica

3. Baixo Acoplamento
visa minimizar a dependência entre classes e módulos, mantendo o acoplamento entre eles o mais baixo possível. Determina que as classes não devem depender de objetos concretos e sim de abstrações, para permitir que haja mudanças sem impacto

4. Alta coesão
visa agrupar responsabilidades relacionadas em uma única classe, garantindo que cada classe tenha um foco claro e bem definido. é um padrão avaliativo que tenta manter os objetos adequadamente focados, gerenciáveis e compreensíveis

5. Controlador
sugere atribuir a responsabilidade de controlar o fluxo de operações e coordenar atividades entre objetos. Um objeto controlador é um objeto de interface não-usuário, responsável por receber ou manipular um evento do sistema

6. Polimorfismo
envolve a atribuição da responsabilidade de tratar diferentes tipos de objetos a uma classe comum, permitindo que várias classes compartilhem a mesma interface e substituam o comportamento de acordo com suas necessidades. As responsabilidades devem ser atribuídas a abstrações e não a objetos concretos, permitindo que elas possam variar conforme a necessidade

7. Fabricação Pura
sugere a introdução de uma classe fictícia ou de apoio quando nenhuma classe existente seja naturalmente adequada para assumir uma responsabilidade específica. É uma classe que não representa nenhum conceito no domínio do problema, ela apenas funciona como uma classe prestadora de serviços

8. Indireção
recomenda atribuir a responsabilidade de mediar entre outros componentes ou serviços para evitar o acoplamento direto. Ajuda a manter o baixo isolamento, por meio de delegação de responsabilidades por meio de uma classe mediadora

9. Variações Protegidas
propõe proteger as partes sensíveis do sistema das variações em componentes externos. Isso é alcançado por meio do uso de interfaces e abstrações para isolar o sistema interno das mudanças externas

Reduz o acoplamento, facilita a reutilização e melhora a manutenção, concentrando a criação de objetos em classes especializadas

Promove o encapsulamento, facilita a manutenção e melhora a coesão, mantendo informações em classes apropriadas

Facilita a manutenção, promove a reutilização e torna o sistema mais flexível, minimizando dependências entre classes

Facilita a compreensão, melhora a manutenção e promove a reutilização, agrupando responsabilidades relacionadas em uma classe

Organiza o sistema, permite a reutilização e facilita a manutenção, ao centralizar responsabilidades de coordenação

Permite compartilhar interfaces comuns, aumenta a flexibilidade e facilita a implementação de padrões

Ajuda a manter o baixo acoplamento, facilita a manutenção e melhora a legibilidade, ao introduzir classes de apoio

Reduz o acoplamento, facilita a manutenção e melhora a extensibilidade, ao mediar chamadas entre componentes

Isola o sistema interno de mudanças externas, facilita a adaptação e mantém o sistema flexível

Assim como os padrões SOLID , o GRASP foi criado com a intenção de tornar o código mais flexível, facilitando a manutenção e a extensibilidade

se baseia em princípios de design orientado a objetos, como encapsulamento, baixo acoplamento, alta coesão, abstração e polimorfismo

O GRASP também ajuda a tornar o sistema mais compreensível, pois as responsabilidades são atribuídas de maneira lógica e intuitiva, beneficiando não apenas os designers, mas também outros desenvolvedores que precisam trabalhar no código