Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena.

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Programação Orientada a Objetos*
Interação entre objetos
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Padrão de Projeto Interpreter
Kleinner Farias e Raphael do Vale
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA APLICADA DISCIPLINA DE SISTEMA ORIENTADOS A OBJETOS PROGRAMAÇÃO ORIENTADA.
Walfredo Cirne Threads Walfredo Cirne
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Polimorfismo e Classes Abstratas Profa
Wagner Santos C. de Jesus
Documentando con Javadoc
A linguagem C#.


Concorrência em Java Threads em Java.
Departamento de Estatística e Informática
Padrão de Projeto Visitor
Métodos de Construção de Software: Orientação a Objetos
Chamada Remota de Procedimentos
Introdução à Programação Orientada a Objetos com Java
Estudo dos Conceitos e Paradigmas de Programação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz
Os métodos equals() e hashCode()
Projeto PLP Persistência em OO1 Equipe: Ana Paula Cavalcanti Clelio Feitosa Zildomar Felix Professor: Augusto Sampaio.
Orientação a Objetos e Java Graduação em Ciência da Computação
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Programação Orientada a Objetos: Reuso
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Pilhas Profa. Nádia Félix.
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Orientação a Objetos: herança Professor: Sandro Rigo.
Linguagem II Exceções.
INTERFACE A DAPTER F AÇADE C OMPOSITE B RIDGE M ARKER.
Wagner Santos C. de Jesus
Orientação a Objetos Parte II
Tratamento de Exceções
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Java Kickstart, day 2 Semelhanças com linguagem C.
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Classes Abstratas e Interface
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Programação para Dispositivos Móveis Prof. Wallace Borges Cristo.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Factory.
Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005.
1 Baseado em whitepapers/eclipse-overview.pdf Nelson Lago IME/USP 04/2003 A Plataforma Eclipse.
JAVA – Fila ATAI.
Inserção dos conceitos de Interface e Classe Abstrata em LOO2 (2006.1) Projeto PLP Alunos: Carlos Eduardo Pontual (ceplc)‏ Fernanda d'Amorim (frsa)‏
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
JavaCC.
Projeto II - PLP Prof. Augusto Sampaio
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Padrão Visitor Paulo Mauricio Gonçalves Jr Rodrigo Teixeira Ramos Paradigmas de Linguagens de Programação Prof. Augusto Sampaio Julho de 2003.
Leo Silva Leonardo Murta Luiz Viana Persistência em Java.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
PROGRAMAÇÃO FUNCIONAL COM SCALA Leonardo Lucena IFRN
Projeto PLP Equipe: Emerson Espínola Marcela Marmo Concorrência em OO1.
Atividades Realizadas
Transcrição da apresentação:

Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena

Proposta Desenvolver um Animador Web que execute passo-a-passo programas da Linguagem Funcional 2, mostrando o que ocorre com o ambiente durante a execução. Desenvolver um Editor Web para as Linguagens de PLP

Animação / Visualização de Programas Exemplos de Softwares que animam / visualizam programas: Eliot - Anima algoritmos Jeliot – Anima Programas Java

O que visualizar A avaliação do programa A avaliação das expressões que compõem o programa O ambiente de Execução Os bindings

Estratégia Dividir a execução em passos Cada passo corresponde a uma modificação causada por: A avaliação de uma expressão O incremento do ambiente A restauração do ambiente A introdução de um binding

Metas(Requisitos) de Implementação Quanto menos alterar a implementação da linguagem melhor Facilidade de adaptar o animador a novas extensões da Linguagem Funcional 2 Terminar o projeto em 2 semanas

Como Implementar? Opções Usando o padrão de projeto Visitor Usando Reflection Usando Java Debug Interface (JDI) Inserindo o código do animador dentro da linguagem A linguagem informa ao animador o que está fazendo.

Estrutura do Animador Animador void terminarAvaliacao(Expressao, Valor) void inserirBinding(Id, Valor) void incrementarContexto() void restaurarContexto() List getPassos() Binding AnimadorPassoAmbienteContexto * * *

Estrutura do Animador Passo Ambiente ambiente; String avaliacao; String codigo; String valor; Binding AnimadorPassoAmbienteContexto * * *

Adaptando o ContextoExecucao public class ContextoExecucao extends Contexto implements AmbienteExecucao { private Animador animador; public Animador getAnimador() { return animador; } public ContextoExecucao() { this.animador = animador; public void incrementa() { super.incrementa(); animador.incrementarContexto(); public void map(Id idArg, Valor valorId) throws VariavelJaDeclaradaException { super.map(idArg, valorId); animador.inserirBinding(idArg,valorId); public void restaura() { super.restaura(); animador.restaurarContexto(); }

Adaptando os métodos avaliar() public class ExpSoma extends ExpBinaria { … public Valor avaliar(AmbienteExecucao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { // iniciar a avaliação Animador animador = amb.getAnimador(); // avaliação da expressão da esquerda Valor a = (ValorInteiro)getEsq().avaliar(amb); setExpEsq(a); // avaliação da expressão da direita Valor b = (ValorInteiro) getDir().avaliar(amb); setExpDir(b); // terminar a avaliação Valor c = new ValorInteiro( ((ValorInteiro)a).valor() + ((ValorInteiro)b).valor() ); animador.terminarAvaliacao(this, c); setExpEsq(null); setExpDir(null); return c; }

Adaptando os métodos toString() public abstract class ExpBinaria implements Expressao { private Expressao expEsq; private Expressao expDir; public String getExpEsq(){ if (expEsq==null) expEsq = getEsq(); return expEsq.toString(); } public void setExpEsq(Expressao exp) { expEsq = exp; } public String getExpDir(){... } public void setExpDir(Expressao exp) {... } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(getExpEsq().toString()); sb.append(' '); sb.append(operador); sb.append(' '); sb.append(getExpDir().toString()); return sb.toString(); }

Executando o programa programa animador expr _ + 3expr avaliar() terminarAvaliacao(expr 1+ 2, 3) toString() [Novo Passo] toString() 3+3 terminarAvaliacao(expr _ +3, 6) [Novo Passo] toString() 6 usuário executar() getAnimador() getPassos() 3 3+3

Trabalhos Futuros Melhorar a visualização Incluir as extensões das outras equipes Transformar o animador em um plugin do eclipse (Sugestão de Eduardo Tavares) Implementar o animador usando Aspectos (A animação seria um aspecto). Implementar o animador usando o padrão Visitor Estender o animador para as linguagens Imperativa e Orientada a Objetos

Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena