Removendo PartialInstantiatorVisitor
Equipe:
Fernando Calheiros ([email protected])
Flavia Leite ([email protected])
Eduardo Wagner ([email protected])
Renata Bezerra ([email protected])
Interpreter
 O padrão Interpreter é usado quando se quer construir um
interpretador para uma linguagem
 É recomendado para implementar linguagens simples
 Vantagens
 Representar cada regra da gramática em uma classe torna a
linguagem mais fácil de implementar
 Como a gramática é representada por classes, é possível mudar
ou estender facilmente a linguagem
 Ao adicionar novos métodos na estrutura de classes, pode-se ter
novos comportamentos além da interpretação, como uma
validação mais sofisticada do programa
Interpreter
 Uso e Desvantagens
 É apropriado quando você tem uma gramática simples e
simplicidade é mais importante do que eficiência
 Usado para linguagens de script e de programação
 Esse padrão pode se tornar difícil quando o número de regras da
gramática é grande
 Nesses casos um gerador de parser/compilador pode ser mais apropriado
Visitor
 O padrão Visitor é usado quando se quer adicionar
funcionalidades a uma composição de objetos e
encapsulamento não é importante
 Vantagens
 Permite adicionar operações a uma estrutura composta sem
mudar a estrutura em si
 Adicionar novas operações é relativamente fácil
 O código das operações realizadas pelo Visitor é centralizado
Visitor
 Desvantagens
 O encapsulamento das classes compostas é quebrado quando o
Visitor é usado
 Como uma função de travessia está envolvida, mudanças à
estrutura se tornam mais difíceis
Por que usar Visitor?
 Visitor permite a separação do algoritmo da estrutura sobre a
qual ele opera
 Código fica centralizado
PartialInstatiatorVisitor
 Não é propriamente um Visitor
 No padrão visitor cada classe sabe se visitar, recebendo o visitor
em um método visit
 PartialInstatiatorVisitor utiliza reflexão para determinar qual
método visit dele mesmo deve ser chamado, deixando a
estrutura original intocada
ValorFuncao
 avaliar() usa o visitor
Funções parciais (o problema)
 let fun add x = fn y . x + y in
 let var id = add(0), var x = 4 in id(1)
 Por que esse código não é avaliado corretamente sem mudar
a forma como as expressões são avaliadas?
Avaliação parcial
 Atualmente métodos avaliar() não foram feitos pensando em
avaliação parcial
 É um concern crosscuting!
 Retornam Valor, não Expressao
 PartialInstatiatorVisitor
 Implementa avaliação parcial através de reescritas das
expressões
 Evita mudanças em praticamente todas as classes que herdam de
Expressao
Download

Apresentação inicial