alunos: angelo ribeiro (arnpr) eduardo tavares (eagt)

31
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)

Upload: kovit

Post on 25-Jan-2016

18 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

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

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)

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

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

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

3

Ferramenta de Auxílio para a Disciplina Configuração de um repositório de

dadosCVS

Definição de um ambiente de desenvolvimento:EclipsePlugin JavaCC

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

4

Reestruturação da Linguagem

Generics“Foreach”Autoboxing/UnboxingEnumerationsVarargsStatic ImportMetadata (Annotations)

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

5

Generics

Generics permite a parametrização de classes.

Diferentemente de C++, Generics não é template.

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

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();

}

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

7

Autoboxing/Unboxing

Conversão automática de tipos primitivos para wrapper classes.

Integer io = new Integer(1);

int i = io.intValue();

i = io;

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

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)

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

9

Expressao 1 ValorConcreto (Antes)

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

10

Expressao 1 ValorBooleano (Antes)

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

11

Expressao 1 ValorBooleano (Depois)

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

12

Expressao 1 ValorConcreto (Depois)

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

13

Expressao 2

Generics:Parametrização da interface AmbienteParametrização de todas as collections

(Lists, Maps, HashMaps) para utlização dos ForEach

Objetivo: Reutilização de código (AmbienteExecucao, AmbienteCompilacao)

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

14

Expressao 2

Ambiente Antespublic 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 ...

}

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

15

Expressao 2

Ambiente Depoispublic 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> {

}

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

16

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

Expressao 2

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

17

Código Contexto

Expressao 2

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();}

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

18

Foreach:Utilização de ForEach nas iterações com

as coleções (ExpDeclaracao).

Expressao 2

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

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); }}

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

20

Exemplo for depois:

Expressao 2

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); }}

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

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

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

22

Funcional1.jj antes

Funcional 1

List PListaId() :....

if (retorno == null) { retorno = new ArrayList(); retorno.add(id); } else { retorno.add(id); }

....}

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

23

Funcional1.jj depois

Funcional 1

List PListaId() :{List<Id> retorno = null;Id id;

......

retorno = new ArrayList<Id>(); retorno.add(id); } else { retorno.add(id); }

…….}

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

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;}

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

25

ValorFuncao depois

Funcional 1

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;}

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

26

Parametrização das coleções/arrays das novas classes ValorFuncao, ExpDeclaracao.

Arrumar a classe Exemplos para que ele possa rodar.

Funcional 2

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

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; }

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

28

Funcional 2

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; }

ValorFuncao depois:

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

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<Id> 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);

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

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;

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

31

Questions, Please !Questions, Please !