Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
description
Transcript of Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
![Page 1: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/1.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/2.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/3.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/4.jpg)
4
Reestruturação da Linguagem
Generics“Foreach”Autoboxing/UnboxingEnumerationsVarargsStatic ImportMetadata (Annotations)
![Page 5: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/5.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/6.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/7.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/8.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/9.jpg)
9
Expressao 1 ValorConcreto (Antes)
![Page 10: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/10.jpg)
10
Expressao 1 ValorBooleano (Antes)
![Page 11: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/11.jpg)
11
Expressao 1 ValorBooleano (Depois)
![Page 12: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/12.jpg)
12
Expressao 1 ValorConcreto (Depois)
![Page 13: Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/13.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/14.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/15.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/16.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/17.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/18.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/19.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/20.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/21.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/22.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/23.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/24.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/25.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/26.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/27.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/28.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/29.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/30.jpg)
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)](https://reader036.fdocument.pub/reader036/viewer/2022062519/56815338550346895dc1553a/html5/thumbnails/31.jpg)
31
Questions, Please !Questions, Please !