12
Equipe: Fernando Calheiros ([email protected] ) Flavia Leite ([email protected] ) Eduardo Wagner ([email protected] ) Renata Bezerra ([email protected] ) Avaliação Parcial de Funções

Equipe: Fernando Calheiros ([email protected])[email protected] Flavia Leite ([email protected])[email protected] Eduardo Wagner ([email protected])[email protected]

Embed Size (px)

Citation preview

Page 1: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Equipe:Fernando Calheiros ([email protected])

Flavia Leite ([email protected])Eduardo Wagner ([email protected])

Renata Bezerra ([email protected])

Avaliação Parcial de Funções

Page 2: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Relembrando PartialInstatiatorVisitorFaz a avaliação parcial de funçõesNã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

Page 3: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Novo VisitorNão copiar códigoUtilizar o padrão visitorReutilizar as classes existentes

Page 4: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Problema

Page 5: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Problema

Page 6: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Funções parciaislet fun add x = fn y . x + y in

let var id = add(0) in id(1)

Avaliação parcial de add(0):fn y . 0 + y

fn y. y

Page 7: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Avaliação parcialPraticamente todas as classes foram

copiadas para LF2

avaliar() não deve retornar ValorNova assinatura:

Expressao avaliar(AmbienteExecucao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException;

Todas as classes que estendem Expressao foram modificadas

Page 8: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Avaliação parcial de expressõesSoma

Avalia-se o lado esquerdo e o lado direito da soma

Caso feliz:Ambos são inteiros, retornar um ValorInteiro com a

soma dos doisO que acontece quando não consigo avaliar x

+ 0 no exemplo mostrado anteriormente?Retorna-se uma nova ExpSoma com os lados

esquerdo e direito avaliados parcialmente (sendo possível que um esteja avaliado completamente)

Pelo menos um dos lados foi avaliadoparcialmente

Page 9: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Mudança no AmbienteContextoExecucao agora é parametrizado

com Expressao, ao invés de ValorIds podem ser associados a expressões

parcialmente avaliadasNão apenas ValorFuncao parcialmente avaliado!

Tudo pode ser parcialmente avaliado agora

Page 10: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Avaliação de IdProcura no contexto

Id não encontradoAvaliação falha

Id encontradoCom Expressao

Retorna a expressaoSem expressao

Retorna o próprio Id

Page 11: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Avaliação de ValorFuncaoColoca no ambiente os ids dos parâmetrosCaso o resultado da avaliação seja um

valor concretoRetorna o valor obtido

Se não...Retorna um novo ValorFuncao com a

expressão parcialmente avaliada

Page 12: Equipe: Fernando Calheiros (fhcl@cin.ufpe.br)fhcl@cin.ufpe.br Flavia Leite (fls@cin.ufpe.br)fls@cin.ufpe.br Eduardo Wagner (ewma@cin.ufpe.br)ewma@cin.ufpe.br

Melhores resultadosRetorna funções mais bem avaliadas

Especialmente com composição de funções

Nem sempre!Não reduz as operações binárias ao menor

valor possível