Eae pessoal, hoje iremos falar um pouco sobre GRASP, mas para inicio de conversa, o que é o GRASP? É um conjunto de princípios fundamentais para modelagem de objetos e atribuição de responsabilidade escrito na forma de padrões.
Um padrão do GRASP é um par de um problema e uma solução
Primeiro Padrão - Information Expert: Consiste em atribuir a responsabilidade ao objeto que tem a informação necessárias para realiza-la. Com isso o encapsulamento é mantido e o comportamento é mais bem distribuído entre as classes, mas há situações onde a solução sugerida leva a problema de acoplamento e coesão.
Segundo Padrão - Creator: Com o Creator é decidido quem deve ser o responsavel por criar uma nova instancia de uma classe da seguinte maneira, A Classe X deve criar uma Classe Y se:
X agrega objetos da classe Y
X contém objetos de Y,
X armazena instancias de Y
X, de forma privada, usa instancia de Y
X tem dados necessários para inicializar Y
Com o Creator é possível manter estável o grau de acoplamento entre as classes, mas quando a criação de uma instancia for muito complexa, envolvendo dependências tecnológicas ou subsistemas externos, é preferível delegar essa responsabilidade a um Factory
Terceiro Padrão - Baixo Acoplamento: Reduz o impacto das mudanças atribuindo a responsabilidade de forma a manter o acoplamento baixo, isso potencializa o reuso, facilita o entendimento e minimiza os efeitos de mudanças, mas o principio utilizado ao extremo leva a um design pobre.
Quarto Padrão - Alta Coesão: Visa manter os objetos focados, fáceis de entender, gerenciar e ainda pouco acoplados e isso é feito atribuindo a responsabilidade de forma a manter a coesão funcional alta, com isso, aumenta a clareza do projeto, aumenta potencial de reuso e geralmente promove menor acoplamento.
Quinto Padrão - Controlador: Os eventos de sistemas devem ser atribuídos a uma classe que represente todo o sistema ou um subsistema, é a classe raiz do sistema/modulo. Trás benefícios como aumento de potencial de reuso, permite a criação de interfaces plugáveis e define claramente pontos de entrada no sistema, mas na hora de utilizar esse padrão a falta de analise de coesão, pode levar a criação de controladores inchados, cheios de métodos pouco relacionados entre si.
É necessário as vezes usar mais de um padrão em um mesmo "pedaço" de projeto pois é necessário escolher entre os usados o que apresentar um resultado melhor. É bom lembrar também que o padrão GRASP não é algo fixo que sempre deve ser utilizado em qualquer caso, ele é só mais um conjunto de padrões no mercado dentre tantos outros que podem ser utilizados em um projeto, como o SOLID e GoF. Caso tenham interesse em mais informações sobre o GRASP, só clicar AQUI para ter acesso a um conjunto de video-aulas sobre o tema abordado