# GRASPS

# Histórico de Versão

Data Autor(es) Descrição Versão
26/10/2020 Caio César Beleza(Caiocbeleza) Adicionando introdução GRASPS 0.1
26/10/2020 Cauê(caue96) Adicionando pontos do código de aplicação dos padrões GRASP(s) 0.2
15/11/2020 Lucas Midlhey(lucasmidlhey) justificativas e reflexoes do grupo 0.3

# Introdução

  Os padrões GRASPS foram criados com o intuito de tornar o código mais flexível, facilitando a manutenção e a extensibilidade.

  A sigla GRASPS vem de "General Responsibility Assignment Software Patterns", eles consistem em uma série de princípios baseados em conceitos para atribuição de responsabilidades a classes e objetos na construção de bons softwares usando programação orientada a objetos.

# GRASPS aplicados no projeto (QRodízio)

  • Information Expert(Especialista de informação): Determina quando devemos delegar a responsabilidade para um outro objeto que seja especialista naquele domínio.
    • A classe Menu é especialista da classe Item;
    • A classe TableSession é especialista da classe "Conta", classe essa que ainda não foi implementada;
    • A classe "Conta", que ainda não foi implementada, é especialista da classe Demand.

De forma muito simples nos implementamos o modelo de especialista sem um conhecimento profunda e quando estudado sobre foi percebemos as vantagens em utilizar, tais como, conhecer as responsabilidades por objetos, metodos e campos cumputados.

  • Creator(Criador): Determina qual classe deve ser responsável pela criação certos objetos.

A criação de objetos por outra classe é a forma mais clara de orientação a objetos, devido a isso pudemos evidenciar neste Criador que as instancias em Payment contem, agregam e as instancias de User, provando o uso do GRASP criador.

  • Polimorfism(Polimorfismo): As responsabilidades devem ser atribuídas a abstrações e não a objetos concretos, permitindo que eles possam variar conforme a necessidade.
    • A função de notificação, ainda não implementada, utilizará do polimorfismos para envio de mensagens tanto para usuários quanto para funcionários que irá variar de acordo com o que se deseja. Exemplo: a mesma função retornará mensagens diferentes para quando o usuário fizer um pedido, para quando um usuário fechar a conta, para quando o usuário pagar a conta, etc, sempre mostrando diferentes mensagens a depender de onde a requisição venha.

Analisando a função do polimorfismo é possível perceber o quanto é necessário para um software que possui inúmeras rotas e classes, podendo criar apenas um objeto mudando seu paramento analisando sua necessidade, fizemos disso um padrão mais utilizado em nosso sistema.

# Referências

  • MEDIUM. Padrões GRASP — Padrões de Atribuir Responsabilidades. Disponível em: https://medium.com/@leandrovboas/padr%C3%B5es-grasp-padr%C3%B5es-de-atribuir-responsabilidades-1ae4351eb204 . Acesso em: 26 de outubro. 2020.
  • DEVMEDIA. Desenvolvimento com qualidade com GRASP. https://www.devmedia.com.br/desenvolvimento-com-qualidade-com-grasp/28704 . Acesso em: 26 de outubro. 2020.