Upload
kovit
View
18
Download
0
Embed Size (px)
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
Citation preview
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
dadosCVS
Definição de um ambiente de desenvolvimento:EclipsePlugin JavaCC
4
Reestruturação da Linguagem
Generics“Foreach”Autoboxing/UnboxingEnumerationsVarargsStatic ImportMetadata (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 AmbienteParametrizaçã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 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 ...
}
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> {
}
16
Criação Contexto AbstratoExistiam Contextos Compilação e Contexto Execução. Foi criado o Contexto como classe abstrata parametrizada.
Expressao 2
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();}
18
Foreach:Utilização de ForEach nas iterações com
as coleções (ExpDeclaracao).
Expressao 2
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
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); }}
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
Funcional1.jj antes
Funcional 1
List PListaId() :....
if (retorno == null) { retorno = new ArrayList(); retorno.add(id); } else { retorno.add(id); }
....}
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); }
…….}
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
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;}
26
Parametrização das coleções/arrays das novas classes ValorFuncao, ExpDeclaracao.
Arrumar a classe Exemplos para que ele possa rodar.
Funcional 2
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
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:
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);
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
Questions, Please !Questions, Please !