Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouÍsis Velo Alterado mais de 9 anos atrás
1
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
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
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
4 Reestruturação da Linguagem Generics “Foreach” Autoboxing/Unboxing Enumerations Varargs Static Import Metadata (Annotations)
5
5 Generics Generics permite a parametrização de classes. Diferentemente de C++, Generics não é template.
6
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 c) { for (TimerTask task : c) task.cancel(); }
7
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
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
9 Expressao 1 ValorConcreto (Antes)
10
10 Expressao 1 ValorBooleano (Antes)
11
11 Expressao 1 ValorBooleano (Depois)
12
12 Expressao 1 ValorConcreto (Depois)
13
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
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
15 Expressao 2 Ambiente Depois public interface Ambiente {... public void map( Id idArg, T tipoId) throws VariavelJaDeclaradaException; public T get( Id idArg ) throws VariavelNaoDeclaradaException; } public interface AmbienteCompilacao extends Ambiente { } public interface AmbienteExecucao extends Ambiente { }
16
16 Criação Contexto Abstrato Existiam Contextos Compilação e Contexto Execução. Foi criado o Contexto como classe abstrata parametrizada. Expressao 2
17
17 Código Contexto Expressao 2 public abstract class Contexto { /** * A pilhaValor de blocos de contexto. */ private Stack > pilha; /** * Construtor da classe. */ public Contexto() { pilha = new Stack >(); } public void incrementa(){ pilha.push(new HashMap ()); } public void restaura(){ pilha.pop(); }
18
18 Foreach: Utilização de ForEach nas iterações com as coleções (ExpDeclaracao). Expressao 2
19
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
20 Exemplo for depois: Expressao 2 private void includeValueBindings(AmbienteExecucao ambiente, Map resolvedValues) throws VariavelJaDeclaradaException { for (Id id : resolvedValues.keySet() ){ Valor valor = resolvedValues.get(id); ambiente.map(id, valor); }
21
21 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); Funcional 1
22
22 Funcional1.jj antes Funcional 1 List PListaId() :.... if (retorno == null) { retorno = new ArrayList(); retorno.add(id); } else { retorno.add(id); }.... }
23
23 Funcional1.jj depois Funcional 1 List PListaId() : { List retorno = null; Id id;...... retorno = new ArrayList (); retorno.add(id); } else { retorno.add(id); } ……. }
24
24 ValorFuncao antes Funcional 1 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
25 ValorFuncao depois Funcional 1 private List 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
26 Parametrização das coleções/arrays das novas classes ValorFuncao, ExpDeclaracao. Arrumar a classe Exemplos para que ele possa rodar. Funcional 2
27
27 ValorFuncao antes: Funcional 2 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
28 Funcional 2 public class ValorFuncao implements ValorAbstrato { private List 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; } ValorFuncao depois:
29
29 Funcional 2 Impressão Valor Função: Alteração do.jj e Classe Valor Função Antes: Depois: 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 listaId = getListaId(); if (listaId != null) { for (Id id : listaId) { sb.append(id.toString() + " "); } sb.append(". "); sb.append(exp.toString()); return sb.toString(); } ValorFuncao valFunc = (ValorFuncao) val; System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado = " + val);
30
30 Próximos Passos 1.Alteração das outras Linguagens; 2.Atualização do site ou Construção de documentação via Doxygen; 3.Verificar utilização de Enumeration na classe Tipo;
31
31 Questions, Please !
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.