1 / 31

Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)

Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5. Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt) Euclides Neto (enan) Prof.: Augusto Sampaio (acas). Roteiro.

kovit
Download Presentation

Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt) Euclides Neto (enan) Prof.: Augusto Sampaio (acas)

  2. Roteiro • Ferramentas de Auxílio para a disciplina(Eclipse/CVS); • Reestruturação das Linguagens(Java 1.5): • Expressão1; • Expressão2; • Funcional1; • Funcional2; • Próximos passos

  3. Ferramenta de Auxílio para a Disciplina • Configuração de um repositório de dados • CVS • Definição de um ambiente de desenvolvimento: • Eclipse • Plugin JavaCC

  4. Reestruturação da Linguagem • Generics • “Foreach” • Autoboxing/Unboxing • Enumerations • Varargs • Static Import • Metadata (Annotations)

  5. Generics • Generics permite a parametrização de classes. • Diferentemente de C++, Generics não é template.

  6. Foreach • É uma forma de iteragir sobre Coleções mais clara e segura quando comparado ao for tradicional void cancelAll(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); } } void cancelAll(Collection c) { for (Object o : c) ((TimerTask)o).cancel(); } void cancelAll(Collection<TimerTask> c) { for (TimerTask task : c) task.cancel(); }

  7. Autoboxing/Unboxing • Conversão automática de tipos primitivos para wrapper classes. Integer io = new Integer(1); int i = io.intValue(); i = io;

  8. Expressao 1 • Generics: • Parametrização da classe ValorConcreto • Objetivo: Reutilização do código dos valores terminais se encontravam duplicados (ValorInteiro, ValorBooleano e ValorString)

  9. Expressao 1 • ValorConcreto (Antes)

  10. Expressao 1 • ValorBooleano (Antes)

  11. Expressao 1 • ValorBooleano (Depois)

  12. Expressao 1 • ValorConcreto (Depois)

  13. Expressao 2 • Generics: • Parametrização da interface Ambiente • Parametrização de todas as collections (Lists, Maps, HashMaps) para utlização dos ForEach • Objetivo: Reutilização de código (AmbienteExecucao, AmbienteCompilacao)

  14. Expressao 2 • Ambiente Antes public interface Ambiente { public void incrementa(); public void restaura(); } public interface AmbienteCompilacao extends Ambiente { public void mapTipo( Id idArg, Tipo tipoId) throws ... public Tipo getTipo( Id idArg ) throws ... } public interface AmbienteExecucao extends Ambiente { public void mapValor( Id idArg, Valor tipoId) throws ... public Valor getValor( Id idArg ) throws ... }

  15. Expressao 2 • Ambiente Depois public interface Ambiente<T> { ... public void map( Id idArg, T tipoId) throws VariavelJaDeclaradaException; public T get( Id idArg ) throws VariavelNaoDeclaradaException; } public interface AmbienteCompilacao extends Ambiente<Tipo> { } public interface AmbienteExecucao extends Ambiente<Valor> { }

  16. Expressao 2 • Criação Contexto AbstratoExistiam Contextos Compilação e Contexto Execução. Foi criado o Contexto como classe abstrata parametrizada.

  17. Expressao 2 • Código Contexto public abstract class Contexto<T> { /** * A pilhaValor de blocos de contexto. */ private Stack<HashMap<Id,T>> pilha; /** * Construtor da classe. */ public Contexto() { pilha = new Stack<HashMap<Id,T>>(); } public void incrementa(){ pilha.push(new HashMap<Id,T>()); } public void restaura(){ pilha.pop(); }

  18. Expressao 2 • Foreach: • Utilização de ForEach nas iterações com as coleções (ExpDeclaracao).

  19. Expressao 2 • Exemplo for antes: private void includeValueBindings(AmbienteExecucao ambiente, Map resolvedValues) throws VariavelJaDeclaradaException { for (Iterator e = resolvedValues.keySet().iterator(); e.hasNext(); ) { Id id = (Id) e.next(); Valor valor = (Valor) resolvedValues.get(id); ambiente.mapValor(id, valor); } }

  20. Expressao 2 • Exemplo for depois: private void includeValueBindings(AmbienteExecucao ambiente, Map<Id,Valor> resolvedValues) throws VariavelJaDeclaradaException { for (Id id : resolvedValues.keySet() ){ Valor valor = resolvedValues.get(id); ambiente.map(id, valor); } }

  21. Funcional 1 • Dentre as modificações anteriores feitas, na funcional 1 tivemos como uma das principais modificações a parametrização da Lista de Id’s, modificando direto no parser javacc (.jj);

  22. Funcional 1 • Funcional1.jj antes List PListaId() : .... if (retorno == null) { retorno = new ArrayList(); retorno.add(id); } else { retorno.add(id); } .... }

  23. Funcional 1 • Funcional1.jj depois List PListaId() : { List<Id> retorno = null; Id id; ...... retorno = new ArrayList<Id>(); retorno.add(id); } else { retorno.add(id); } ……. }

  24. Funcional 1 • ValorFuncao antes private List argsId; public boolean checaTipo(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { ambiente.incrementa(); Tipo t = getTipo(ambiente); for (Iterator iterArgsId = this.argsId.iterator(); iterArgsId.hasNext(); ) { Id id = (Id) iterArgsId.next(); ambiente.mapTipo(id, new Tipo(t.getTipo())); t = t.getProx(); } ambiente.restaura(); return true; }

  25. Funcional 1 • ValorFuncao depois private List<Id> argsId; public boolean checaTipo(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { ambiente.incrementa(); Tipo t = getTipo(ambiente); for (Id id : argsId) { ambiente.map(id, new Tipo(t.get())); t = t.getProx(); } ambiente.restaura(); return true; }

  26. Funcional 2 • Parametrização das coleções/arrays das novas classes ValorFuncao, ExpDeclaracao. • Arrumar a classe Exemplos para que ele possa rodar.

  27. Funcional 2 • ValorFuncao antes: public class ValorFuncao implements ValorAbstrato { private List argsId; public boolean checaTipo(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { ambiente.incrementa(); Tipo t = getTipo(ambiente); for (Iterator iterArgsId = this.argsId.iterator(); iterArgsId.hasNext(); ) { Id id = (Id) iterArgsId.next(); ambiente.mapTipo(id, new Tipo(t.getTipo())); t = t.getProx(); } ambiente.restaura(); return true; }

  28. Funcional 2 • ValorFuncao depois: public class ValorFuncao implements ValorAbstrato { private List<Id> argsId; public boolean checaTipo(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { ambiente.incrementa(); Tipo t = getTipo(ambiente); for(Id id:this.argsId){ ambiente.map(id, new Tipo(t.get())); t = t.getProx(); } ambiente.restaura(); return true; }

  29. Funcional 2 • Impressão Valor Função: Alteração do .jj e Classe Valor Função • Antes: ValorFuncao valFunc = (ValorFuncao) val; System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado = funcao"); public String toString() { StringBuffer sb = new StringBuffer(); sb.append("fn "); List<Id> listaId = getListaId(); if (listaId != null) { for (Id id : listaId) { sb.append(id.toString() + " "); } } sb.append(". "); sb.append(exp.toString()); return sb.toString(); } • Depois: ValorFuncao valFunc = (ValorFuncao) val; System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado = " + val);

  30. Próximos Passos • Alteração das outras Linguagens; • Atualização do site ou Construção de documentação via Doxygen; • Verificar utilização de Enumeration na classe Tipo;

  31. Questions, Please !

More Related