Expert (padrão de projeto de software)

Especialista na Informação (ou Especialista da Informação, ou apenas Especialista, ou ainda seus equivalentes em inglês Information Expert e Expert) é um padrão de projeto de software, parte do conjunto de princípios conhecido como GRASP (General Responsibility Assignment Software Patterns). É uma abordagem genérica que visa atribuir a responsabilidade de fazer ou conhecer algo ao "especialista na informação" — a classe que possui a informação necessária para cumprir tal responsabilidade.[1]

Funcionamento editar

Obrigações de fazer algo
  • Fazer algo a si mesmo
  • Iniciar ações em outros objetos
  • Controlar ou coordenar atividades em outros objetos
Obrigações de conhecer algo
  • Conhecer dados encapsulados
  • Conhecer objetos relacionados
  • Conhecer coisas que se pode calcular

Exemplos editar

Uma classe Venda possui a informação de uma venda composta por um ou mais itens. Cada item é representado pela classe ItemVendido, que pode ser composta por um objeto da classe Produto (que, por sua vez, possui a informação do seu preço unitário) e a quantidade vendida.

Para calcular o total da venda dos itens, a classe Venda poderia primeiro calcular os subtotais dos itens obtendo os preços unitários da classe Produto por meio da classe ItemVendido e as respectivas quantidades, e por fim somar os subtotais.

Entretanto, segundo o padrão Especialista, a modelagem adequada é passar para a classe ItemVendido a responsabilidade de calcular seus próprios subtotais, uma vez que ela possui (ou pode obter) as informações necessárias. A classe Venda é, por sua vez, a responsável por obter os subtotais dos objetos da classe ItemVendido e somá-los, calculando assim o total da venda.

Portanto, o especialista em informar os preços unitários é a classe Produto, o especialista em calcular os subtotais é a classe ItemVendido e o especialista em calcular o total da venda é a classe Venda.[2]

Referências

  1. Craig Larman. Utilizando UML e Padrões. [S.l.]: Bookman Editora. ISBN 9788577800476 
  2. Jacques Philippe Sauvé. «Padrões Para Atribuir Responsabilidades». Departamento de Sistemas e Computação da Universidade Federal de Campina Grande