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]