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:
- Criador (Creator);
- Especialista na Informação (Information Expert);
- Baixo Acoplamento (Low Coupling);
- Alta Coesão (High Cohesion);
- Controlador (Controller);
- Polimorfismo (Polymorphism);
- Fabricação/Invenção Pura (Pure Fabrication);
- Indireção (Indirection);
- 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