A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)

Apresentações semelhantes


Apresentação em tema: "1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)"— Transcrição da apresentação:

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 !


Carregar ppt "1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)"

Apresentações semelhantes


Anúncios Google