Visitor
Carlos R. M. Junior
Eduardo Motta
Propósito do Padrão

Representar operações a ser executadas
nos elementos de uma estrutura de objetos;

Permitir definir uma nova operação sem
mudar as classes dos elementos sobre as
quais opera.
Motivação

Um compilador que representa programas
como árvores sintáticas abstratas.
–
Necessidade de execução de operações nas
árvores sintáticas abstratas para análises
“semânticas estáticas”;
Motivação






Verificar se todas as variáveis estão
definidas;
Geração de código executável.
Operação de tipos;
Otimização de código;
Análise de fluxo;
Verificação se as variáveis receberam
valores antes de serem usadas.
Motivação

Solução Inicial
Motivação

Visitor
Aplicabilidade

Estrutura de objetos contém muitas classes
de objetos e deseja-se executar operações
sobre esses objetos que dependem das
classes concretas;
Aplicabilidade


Muitas operações distintas e nãorelacionadas de uma estrutura de objetos;
Estrutura das classes raramente muda,
porém, operações novas podem ser
freqüentemente adicionadas.
Estrutura
Participantes

Visitor
–

ConcreteVisitor
–

Declara uma operação visit para cada classe
ConcreteElement na estrutura do objeto.
Implementa uma operação.
Element
–
Define uma operação accept que aceita um
visitante como um argumento.
Participantes

ConcreteElement
–

Implementa operação accept que aceita um
visitante como um argumento.
ObjectStructure
–
–
–
Pode enumerar seus elementos;
Pode fornecer uma interface de alto nível para
permitir ao visitante visitar seus elementos;
Poder ser uma coleção ou uma composição.
Colaboração
Consequências



Visitor torna fácil a adição de novas
operações;
Um visitor reúne operações relacionadas e
separa as operações não-relacionadas.
É difícil acrescentar novas classes
ConcreteElement;
Consequências



Visita hierarquia de classes;
Acumula estados;
Rompe o encapsulamento.
Exemplos
Exemplos
Exemplos
Exemplos
Exemplos
Dúvidas
[email protected]
[email protected]
Download

Slides