Exemplo 1 Objetivo: Demonstrar como fazer um interpretador simples

Tamanho: px
Começar a partir da página:

Download "Exemplo 1 Objetivo: Demonstrar como fazer um interpretador simples"

Transcrição

1 Exemplo 1 Objetivo: Demonstrar como fazer um interpretador simples 1. Criar novo projeto Java 2. Criar arquivo conta.math 3. Criar classe InterpretaMath.java 5. Criar um LineNumberReader/FileReader para o arquivo de entrada 6. Fazer o interpretador (cuidado com loop infinito) 7. Fazer agora um gerador de código para este arquivo 7.1. Criar um PrintWriter/FileWriter para jogar o programa gerado Exemplo 2 Objetivo: Demonstrar o uso de uma AST. Criar uma árvore para onde serão jogados os valores antes de interpretar ou gerar código 1. Criar novo projeto Java 2. Criar arquivo conta.math 3. Criar uma AST para o domínio 3.1. Criar uma classe Termo (enum Operacao, e dois campos, operacao e valor) 3.2. Criar uma classe Conta (lista de termos) 4. Criar arquivo MathParser.java, com um método parse(arquivo) (nao esquecer de colocar linha.readline no final) 5. Criar uma classe principal para usar o parser e interpretar a conta 6. Mudar o formato de entrada para ilustrar que o programa principal não precisa mudar 7. Adicionar uma checagem qualquer (divisão por zero não pode, mostrando a linha) Exemplo 3 Objetivo: Demonstrar o problema causado pelo uso de referências 1. Estender arquivo conta.math para incluir o armazenamento de uma variável, constante 2. Adicionar uma operacão e um campo para armazenar a variável, e modificar o tipo do valor public String valorouvariavel public String nomevariavel 3. Estender o parser 3.1. Método para interpretar a nova operacao 4. Estender o principal 4.2. Método pegavalor, pra buscar nas variaveis já definidas Exemplo 4 Objetivo: Demonstrar como um modelo orientado a objetos pode facilitar na hora de realizar ações. O parser continua precisando varrer em busca das referências, mas uma vez lido, fica mais fácil 1. Criar um metamodelo Conta (List<Termo> termos, List<Variavel> variaveis) Termo (enum Operacao, Operacao operacao, Conteudo conteudo) Variavel (String nome, Conteudo conteudo) Conteudo (int valor, Variavel variavel, boolean evariavel) 2. Modificar o parser para ler nesse metamodelo 3. Modificar o principal para usar o metamodelo pra resolver a conta

2 Exemplo 5 Objetivo: Demonstrar que hoje em dia é mais fácil fazer esse tipo de parser, com por exemplo xtext 1. Criar novo projeto xtext 2. Explicar mais ou menos o que tem no projeto 3. Mostrar que sintaxe abstrata e concreta é junto 4. Mostrar que gera o metamodelo OO (Ecore) Problema : (expressoes += Expressao)* Expressao : Armazena Operacao Armazena : "Armazene" termo=int Operacao : sinal=sinalmatematico termo=int String SinalMatematico : "+" "-" "*" "/" 5. Fazer deploy e testar 6. Criar um novo projeto oaw vazio 7. Criar o arquivo, e testar as features do editor 8. Fazer um interpretador 8.1. Criar um arquivo de workflow <?xml version="1.0"?> <workflow> <component file="math/parser/parser.oaw"> <modelfile value="conta.math"/> <outputslot value="conta"/> <component class="math.executa" slotconta="conta" /> </workflow> 8.2. Criar novo objeto que extends AbstractWorkflowComponent Implementar métodos abstratos 8.4. No checkconfiguration, testar se slot está vazio 8.5. Conteúdo do método invoke protected void invokeinternal(workflowcontext ctx, ProgressMonitor monitor, Issues issues) { EObject conta = (EObject) ctx.get(slotconta) EList<EObject> conteudoraiz = conta.econtents() float resultado = 0 for (EObject expressao : conteudoraiz) { Integer valor = (Integer) expressao.eget(expressao.eclass().getestructuralfeature("termo")) if (expressao.eclass().getname().equals("armazena")) { System.out.println(" Armazena " + valor) resultado = valor.floatvalue() else { String sinal = (String) expressao.eget(expressao.eclass().getestructuralfeature("sinal")) if (sinal.equals("+")) { System.out.println(" Soma " + valor) resultado = resultado + valor.floatvalue() else... System.out.println("=" + resultado)

3 Exemplo 6 Objetivo: Demonstrar como XML pode ser usado para interpretar modelos 1. Fazer um exemplo de XML <conta> <inicial>10</inicial> <soma>20</soma> <subtracao>10</subtracao> </conta> 2. Fazer um interpretador XML baseado em DOM Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("bla") NodeList list = doc.getfirstchild().getchildnodes() for(int i=0 i<list.getlength() i++) { Node n = list.item(i) if(n.getnodename().equals("inicial")) System.out.println("inicial "+n.gettextcontent()) else if(n.getnodename().equals("soma")) System.out.println("soma "+n.gettextcontent()) else if(n.getnodename().equals("subtracao")) System.out.println("subtracao "+n.gettextcontent())

4 Exemplo 7 Objetivo: Demonstrar os conceitos de metamodelagem na ferramenta GME 1. Fazer o seguinte metamodelo 2. Explicar os conceitos da ferramenta, de metamodelagem, atributos, aspectos, ícones, constraints, etc, etc Fazer devagar, um elemento de cada vez 4. Deixar por último a parte da referência

5 Exemplo 8 Objetivo: Demonstrar o uso da API BON de metamodelagem para interpretar modelos no GME 1. Criar novo projeto Java 2. Adicionar referência para gme.jar 3. Criar uma nova classe que implementa BonComponent 3.1. Implementar os métodos faltantes 4. Registrar o componente e testar 4.1. Não esqueça de rodar o programa de registro como administrador O componente vai escrever um arquivo de saída (no desktop). - Listar organograma completo (com superiores, e papéis) - Listar atividades, tarefas e papéis associados - Listar tarefas de cada pessoa -... Começo do interpretador: Vector<JBuilderModel> v = builder.getrootfolder().getrootmodels() for (JBuilderModel model : v) { if (model.getmeta().getname().equals("modelodeatividades")) interpretarmodeloatividades(model) else if (model.getmeta().getname().equals("organograma")) interpretarorganograma(model) pw.flush() pw.close() JOptionPane.showMessageDialog(null, "Pronto!") Exemplo 9 Objetivo: Demonstrar como realizar transformações procedurais utilizando EMF e xtext 1. Criar novo projeto openarchitectureware 2. Criar uma classe que estende AbstractWorkflowComponent2 EObject conta = (EObject) ctx.get(slotconta) EList<EObject> conteudoraiz = conta.econtents() // Soma dois quando armazena // Transforma adição em subtração // Duplica o valor da multiplicação for (EObject expressao : conteudoraiz) { Integer valor = (Integer) expressao.eget(expressao.eclass().getestructuralfeature("termo")) if (expressao.eclass().getname().equals("armazena")) { expressao.eset(expressao.eclass().getestructuralfeature( "termo"), valor + 2) else { String sinal = (String) expressao.eget(expressao.eclass().getestructuralfeature("sinal")) if (sinal.equals("+")) { expressao.eset(expressao.eclass().getestructuralfeature( "sinal"), "-") else if (sinal.equals("*")) { expressao.eset(expressao.eclass().getestructuralfeature( "termo"), valor * 2)

6 3. Criar o workflow <?xml version="1.0"?> <workflow> <component file="math/parser/parser.oaw"> <modelfile value="model.math"/> <outputslot value="conta"/> <component class="math.executa" slotconta="conta" /> </workflow> 4. Para testar, copia o executa do exemplo E atualiza o workflow Exemplo 10 Objetivo: Demonstrar como é feita a transformação declarativa utilizando xtend 1. Cria novo projeto openarchitectureware 2. Cria uma nova transformação.ext 2.1. Crie o seguinte arquivo (UMA REGRA DE CADA VEZ!) import math transforma (Problema problema) : problema.expressoes.incrementaarmazena() -> problema.expressoes.select(e e.metatype == Operacao).trocaSomaPorSubtracao() -> problema.expressoes.select(e e.metatype == Operacao).dobraValorDeMultiplicacao() -> problema.adicionaexpressao() incrementaarmazena(expressao expressao) : if (expressao.metatype == Armazena) then expressao.settermo(expressao.termo + 2) trocasomaporsubtracao(expressao expressao) : if (((Operacao)expressao).sinal == "+") then ((Operacao)expressao).setSinal("-") dobravalordemultiplicacao(expressao expressao) : if (((Operacao)expressao).sinal == "*") then expressao.settermo(expressao.termo * 2) adicionaexpressao(problema problema): let e = new Operacao: e.setsinal("+") -> e.settermo(1234) -> problema.expressoes.add(e) 3. Copia o Executa e Workflow do Exemplo Acrescenta a chamada para a transformação <component id="transforma2" class="oaw.xtend.xtendcomponent"> <metamodel id="mm" class="org.eclipse.m2t.type.emf.emfregistrymetamodel"/> <invoke value="transforma2::transforma(conta)"/>

7 Exemplo 11 Objetivo: Demonstrar transformações mais complexas utilizando xtext / xtend 1. Criar um novo projeto xtext 2. Criar uma dsl para modelos OO e modelos ER // specify your DSL grammar rules here... // IMPORTANT: You should change the property 'overwrite.pluginresources=true' in the properties file to 'overwrite.pluginresources=false' AFTER first generation Modelo : ModeloOO ModeloER ModeloOO: "ModeloOO" name=id "[" (classes+=classe)* "]" Classe: "classe" name=id "{" (membros+=membro "")* "" Membro: Atributo Referencia Atributo: tipo=tipooo name=id Referencia: "->" ref=[classe] name=id // Deixar sem a String, pra mostrar String TipoOO: "texto" "inteiro" "real" ModeloER: "ModeloER" name=id "[" (tabelas+=tabela)* "]" Tabela: "tabela" name=id ":" (colunas+=coluna "")* (restricoes+=restricao "")* "" Coluna: name=id tipo=tipoer // Deixar sem a String, pra mostrar String TipoER: "VARCHAR" "INT" "REAL" Restricao: RestricaoChavePrimaria RestricaoChaveEstrangeira RestricaoChavePrimaria: "PRIM" coluna=[coluna] RestricaoChaveEstrangeira: "ESTR" coluna=[coluna] "->" tabelaestrangeira=[tabela] "." colunaestrangeira=[coluna] 3. Fazer um interpretador (AbstractWorkflowComponent2) que imprime os modelos 4. Fazer uma transformação OO->ER (UMA PARTE DE CADA VEZ)

8 import linguagemooer create ModeloER transformaooer (ModeloOO modelooo) : this.setname(modelooo.name+"gerado") -> this.tabelas.addall(modelooo.classes.tabela()) create Tabela tabela(classe classe) : this.setname("tabela_"+classe.name) -> this.colunas.add(chaveprimaria(classe)) -> this.restricoes.add(restricaochaveprimaria(chaveprimaria(classe))) -> this.colunas.addall(classe.membros.select(e e.metatype.name=="linguagemooer::atributo").c oluna()) -> this.colunas.addall(classe.membros.select(e e.metatype.name=="linguagemooer::referencia").colunachaveestrangeira()) -> this.restricoes.addall(classe.membros.select(e e.metatype.name=="linguagemooer::referenci a").restricaochaveestrangeira()) create Coluna chaveprimaria(classe classe) : this.setname(classe.name + "Id") -> this.settipo("int") create RestricaoChavePrimaria restricaochaveprimaria(coluna coluna) : this.setcoluna(coluna) create Coluna coluna(membro membro) : this.setname("coluna_"+membro.name) -> this.settipo(tipoer((atributo)membro)) String tipoer(atributo atributo) : if(atributo.tipo == "texto") then "VARCHAR" else if(atributo.tipo == "inteiro") then "INT" else "REAL" create Coluna colunachaveestrangeira(membro referencia) : this.setname(referencia.name) -> this.settipo("int") create RestricaoChaveEstrangeira restricaochaveestrangeira(membro referencia) : this.setcoluna(colunachaveestrangeira(referencia)) -> this.settabelaestrangeira(tabela(((referencia)referencia).ref)) -> this.setcolunaestrangeira(chaveprimaria(((referencia)referencia).ref)) 5. Fazer o workflow <?xml version="1.0"?> <workflow> <component file="ooer/parser/parser.oaw"> <modelfile value="modelooo.ooer"/> <outputslot value="modelooo"/> <component id="transforma" class="oaw.xtend.xtendcomponent"> <metamodel id="mm" class="org.eclipse.m2t.type.emf.emfregistrymetamodel"/> <invoke value="transforma::transformaooer(modelooo)"/> <outputslot value="modeloergerado"/> <component class="principal.imprimemodelo" slotmodelo="modeloergerado" /> </workflow>

9 Exemplo 12 Objetivo: Demonstrar a geração de código com GME public class GeraQuestionario implements BONComponent { PrintWriter pw public GeraQuestionario() { try { pw = new PrintWriter(new FileWriter("Questionario.java")) catch (IOException e) { e.printstacktrace() JOptionPane.showMessageDialog(null, public void invokeex(jbuilder builder, JBuilderObject focus, Collection selected, int param) { Vector<JBuilderModel> v = builder.getrootfolder().getrootmodels() for (JBuilderModel model : v) { if (model.getmeta().getname().equals("modelodedecisoes")) { geraquestionario(model) pw.flush() pw.close() JOptionPane.showMessageDialog(null, "Pronto!") private void geraquestionario(jbuildermodel modelodecisoes) { pw.println("import java.io.*") pw.println("public class Questionario {") pw.println("static BufferedReader br = new BufferedReader(new InputStreamReader(System.in))") Vector<JBuilderObject> elementos = modelodecisoes.getchildren() for (JBuilderObject elemento : elementos) { if (elemento.getmeta().getname().equals("questao")) gerametodoquestao((jbuilderatom) elemento) else if (elemento.getmeta().getname().equals("mensagem")) gerametodomensagem((jbuilderatom) elemento) pw.println("public static void main(string[] args) throws IOException {") Vector<JBuilderAtom> inicio = modelodecisoes.getatoms("inicio") Vector<JBuilderConnection> inicioconexao = inicio.firstelement().getoutconnections("inicioconexao") JBuilderAtom elemento = (JBuilderAtom) inicioconexao.firstelement().getdestination() pw.println(arrumanome(elemento.getname()) + "()") pw.println("") pw.println("") private void gerametodoquestao(jbuilderatom questao) { pw.println("private static void " + arrumanome(questao.getname()) + "() throws IOException {") pw.print("system.out.println(\"") pw.print(questao.getname()) pw.println("\")") Vector<JBuilderConnection> respostasconnections = questao.getoutconnections("resposta") int i = 1 for (JBuilderConnection resposta : respostasconnections) { pw.println("system.out.println(\"" + (i++) + ": " + resposta.getname() + "\")")

10 pw.println("int op = Integer.parseInt(br.readLine())") i = 1 for (JBuilderConnection resposta : respostasconnections) { pw.println("if(op == " + (i++) + ") {") pw.println(arrumanome(resposta.getdestination().getname()) + "()") pw.println("return") pw.println("") pw.println("") private void gerametodomensagem(jbuilderatom mensagem) { pw.println("private static void " + arrumanome(mensagem.getname()) + "() throws IOException {") pw.println("system.out.println(\"" + mensagem.getname() + "\")") pw.println("br.readline()") Vector<JBuilderConnection> links = mensagem.getoutconnections("link") if (!links.isempty()) pw.println(arrumanome(links.firstelement().getdestination().getname()) + "()") pw.println("") private String arrumanome(string nome) { return nome.replaceall(" ", "").replaceall("\\?", "").replaceall("!", "").replaceall("ç", "c").replaceall("ê", "e").replaceall(",", "").replaceall("ã", "a").replaceall("-", public void registercustomclasses() { // TODO Auto-generated method stub Exemplo 13 Objetivo: Demonstrar a geração de código com GME, usando patterns (templates) $!EVAL_FORALL("R:Mensagem","$!TO_FILE("html/$Name.html")\ <html>\n\ <body>\n\ $Name<br/>\n\ $!EVAL_FORALL("Dst:Link","<a href=\"\ $Name.html\ \">Continua</a><br/>\n")\ </body>\n\ </html>\n") $!EVAL_FORALL("R:Questao","$!TO_FILE("html/$Name.html")\ <html>\n\ <body>\n\ $Name?<br/>\n\ $!DEFINE("CONT","1")\ $!EVAL_FORALL("Dst:Resposta","<a href=\"\ $Name.html\ \">Opção $!POSTINCR(CONT)</a><br/>\n")\ </body>\n\ </html>\n")

11 Exemplo 14 Objetivo: Demonstrar o uso do GMF para criação de linguagens e ferramentas de modelagem visual 1. Criar novo projeto GMF 2. Criar uma máquina de estados simples, pra começar 3. Mudar para ficar redondo os retângulos, e as transições terem setas 4. Adicionar características do estado 4.1. Modificar para ter um compartimento nos estados com as características gmftool: novo creation tool gmfgraph: novo diagram label, novo compartment gmfmap: novo compart mapping, novo child ref, novo node mapping, novo label mapping 5.Modificar os ícones 5.1. Substituir os gifs no edit 5.2. Apagar o projeto do diagram, apagar os plugins.jar 5.3. Gerar de novo, sem nenhum plugin instalado 6. Adicionar estados inicial e final

12 6.1. Não esquecer de transformar Estado em abstract 6.2. Modificar os nós Estado para EstadoIntermediario 6.3. Criar as ferramentas, graphs e mappings para os novos estados 7. Adicionar link constraints para não criar transições erradas nos estados inicial e final if (source instanceof maquinaestados.estadofinal) return false if (target instanceof maquinaestados.estadoinicial) return false if (source instanceof maquinaestados.estadoinicial) { java.util.list<maquinaestados.transicao> todastransicoes = container.gettransicoes() for(maquinaestados.transicao t:todastransicoes) { if(t.getorigem() == source) return false 8. Adicionar um audit constraint para não deixar criar mais de um estado inicial java.util.list<maquinaestados.estado> estados = context.getestados() int cont = 0 for(maquinaestados.estado e : estados) { if(e instanceof maquinaestados.estadoinicial) cont++ if(cont > 1) return org.eclipse.core.runtime.status.cancel_status return org.eclipse.core.runtime.status.ok_status 9. Para comparar com GME, fazer um exemplo de modelo de decisões Exemplo 15 Objetivo: Demonstrar as funcionalidades da linguagem xtext 1. Criar novo projeto xtext 2. Criar linguagem para máquina de estados MaquinaDeEstados : (eventos+=evento)*

13 (estados+=estado)* Evento : "evento" name=id "" Estado : "estado" tipo=tipoestado name=id "{" "caracteristicas" ":" (caracteristicas+=caracteristica "")* "transicoes" ":" (transicoes+=transicao "")* "" String TipoEstado : "inicial" "intermediario" "final" Caracteristica : name=string ":" expressao=string Transicao : evento=[evento] "->" estado=[estado] 3. Criar checagens UMA DE CADA VEZ context Transicao ERROR "Não pode existir transição para o estado inicial!" : this.estado.tipo!= "inicial" //context Transicao if(this.estado.tipo == "inicial") ERROR "Não pode existir transição para o estado inicial 2!" : // false context Transicao ERROR "Não pode existir transição partindo de estado final!" : ((Estado)this.eContainer).tipo!= "final" //context Estado ERROR "Não podem existir transições partindo do estado final 2!" : // this.tipo == "final"?this.transicoes.isempty:true context MaquinaDeEstados ERROR "Deve haver um (e somente um) estado inicial!" : this.estados.select(e e.tipo == "inicial").size == 1 //context Estado if(this.tipo=="inicial") ERROR "Deve haver um (e somente um) estado inicial 2!" : // ((MaquinaDeEstados)this.eContainer).estados.select(e e.tipo == "inicial").size == 1 context Estado ERROR "Deve existir uma (e somente uma) transição saindo do estado inicial!" : this.tipo == "inicial"?this.transicoes.size==1:true context Evento ERROR "Não podem existir dois eventos com o mesmo nome: " + this.name : ((MaquinaDeEstados)this.eContainer).eventos.select(e e.name == this.name).size == 1 context Estado ERROR "Não podem existir dois estados com o mesmo nome: " + this.name : ((MaquinaDeEstados)this.eContainer).estados.select(e e.name == this.name).size == 1 context Estado if(this.tipo!="inicial") WARNING "Não há nenhuma transição para este estado: "+this.name : ((MaquinaDeEstados)this.eContainer).estados.transicoes.exists(t t.estado == this) context Transicao ERROR "Já existe outra transição para o mesmo evento!" : ((Estado)this.eContainer).transicoes.select(t t.evento == this.evento).size == 1 4. Fazer ícones especiais, e corrigir os labels padrão 4.1. EditorExtensions.ext label(estado this): "estado" + this.name label(evento this): "evento" + this.name label(transicao this): this.evento.name + "->" + this.estado.name image(estado this): this.tipo == "inicial"? "keyword.gif" : "default.gif" 5. Estender o auto-complete:

14 List[Proposal] completetransicao_estado(transicao t, String prefix) : t.allvisibleelements().typeselect(estado).select(e e.tipo!= "inicial").collect(x newproposal(x.label(),x.id(),x.image())) List[Proposal] completetransicao_evento(estado estado, String prefix) : estado.allvisibleelements().typeselect(evento).select(e estado.transicoes.forall(t2 t2.ev ento!= e)).collect(x newproposal(x.label(),x.id(),x.image())) //estado.allvisibleelements().typeselect(evento).removeall(estado.transicoes.collect(t2 t 2.evento)).collect(x newproposal(x.label(),x.id(),x.image())) 6. Para comparar com GMF/GME, fazer modelo de decisões Exemplo 16 Objetivo: Demonstrar as funcionalidades da linguagem ATL 1. Criar novo projeto ATL 2. Criar dois metamodelos: familias e pessoas 3. Criar um novo ATL file module familiasparapessoas -- Module Template create SAIDA : pessoas from ENTRADA : familias helper context familias!membro def: emulher() : Boolean = self.emae() or self.efilha() helper context familias!membro def: emae() : Boolean = if (not self.refimmediatecomposite().mae.oclisundefined()) then if (self.refimmediatecomposite().mae = self) then true else false endif else false endif helper context familias!membro def: efilha() : Boolean = if (self.refimmediatecomposite().filhas.includes(self)) then true else false endif helper context familias!membro def: sobrenome() : String = self.refimmediatecomposite().sobrenome rule MembroParaHomem {

15 from m : familias!membro (not m.emulher()) to h : pessoas!homem ( nomecompleto <- m.nome + ' ' +m.sobrenome() ) rule MembroParaMulher { from m : familias!membro (m.emulher()) to h : pessoas!mulher ( nomecompleto <- m.nome + ' ' +m.sobrenome() ) 4. Criar um novo Run configuration Exemplo 17 Objetivo: Demonstrar as funcionalidades da linguagem xtend 1. Criar novo projeto oaw 2. Criar extensões import maquinaestados adicionaestadoemergencia( MaquinaDeEstados this ): this.eventos.add(eventoemergencia()) -> this.estados.add(estadoemergencia()) -> this.estados.adicionatransicaoparaemergencia() create Evento eventoemergencia(): this.setname("emergencia") create Estado estadoemergencia(): this.setname("emergencia") create Transicao adicionatransicaoparaemergencia(estado estado): estado.transicoes.add(this) -> this.setevento(eventoemergencia()) -> this.setestado(estadoemergencia()) import maquinaestados adicionaestadoemergencia( MaquinaDeEstados this ): this.estados.add(estadoemergencia()) -> this.estados.adicionatransicaoparaemergencia() create EstadoIntermediario estadoemergencia(): this.setnome("emergencia") create Transicao adicionatransicaoparaemergencia(estado estado): ((MaquinaDeEstados)estado.eContainer).transicoes.add(this) -> this.setnome("emergencia") -> this.setorigem(estado) -> this.setdestino(estadoemergencia()) 3. Criar workflow <workflow> <component file="me/parser/parser.oaw"> <modelfile value="maquinaestados.me"/> <outputslot value="maquinaestados"/> <component id="xmiparser" class="org.openarchitectureware.emf.xmireader"> <modelfile value="maquinaestados.maquinaestados"/> <metamodelpackage value="maquinaestados.maquinaestadospackage"/> <outputslot value="maquinaestados2"/> <firstelementonly value="true"/>

16 </workflow> <component id="transforma" class="oaw.xtend.xtendcomponent"> <metamodel id="mm" class="org.eclipse.m2t.type.emf.emfregistrymetamodel"/> <invoke value="transforma::adicionaestadoemergencia(maquinaestados)"/> <component id="transforma" class="oaw.xtend.xtendcomponent"> <metamodel id="mm" class="org.eclipse.m2t.type.emf.emfregistrymetamodel"/> <invoke value="transforma2::adicionaestadoemergencia(maquinaestados2)"/> <component id="write" class="org.eclipse.mwe.emf.writer"> <usesingleglobalresourceset value="true"/> <modelslot value="maquinaestados"/> <uri value="/users/daniel/desktop/workspace/exemplo17/dump.xmi"/> <component id="write" class="org.eclipse.mwe.emf.writer"> <usesingleglobalresourceset value="true"/> <modelslot value="maquinaestados2"/> <uri value="/users/daniel/desktop/workspace/exemplo17/dump2.xmi"/> 4. Exercícios 4.1. Não criar transicao a partir do estado inicial 4.2. Não criar transicao a partir do estado de emergencia Exemplo 18 Objetivo: Demonstrar as funcionalidades do JET 1. Criar novo projeto Java 2. Adicionar natureza JET ao projeto 3. Ajustar as propriedades JET do projeto 4. Criar novo arquivo helloworld.txtjet jet package="hello" class="helloworldtemplate" %> Hello, world! 5. Criar uma classe principal e executar o exemplo HelloWorldTemplate helloworld = new HelloWorldTemplate() String result = helloworld.generate(null) System.out.println(result) 6. Mostrar <%=argument%> String (novo arquivo) 7. Mostrar <%=argument%> List, criando um XML com conteúdo (novo arquivo) 8. E se for gerar um JSP? starttag= <$ endtag= $> (novo arquivo) 8.1. Mostrar rodando, e explicar com calma 9. Mostrar mais detalhes sobre o gerador gerado, objetos que dá pra usar (stringbuffer) (novo arquivo) 10. Mostrar como mudar o gerador gerado (skeleton) public class CLASS implements IGerador { /* Minha classe geradora */ public String gerar(object argumento) { return "" 11. Mostrar include include file= bla %> Mostrar inclusão de.txt Mostrar inclusão de.jetf 12. O include anterior é chamado durante tradução. E se eu quiser executar o template e copiar o resultado? Inserir scriplets pra chamar a classe gerada explicitamente

17 Exemplo 19 Objetivo: Demonstrar o uso do JET e as tags 1. Criar novo projeto JET 2. Adicionar model loader org.eclipse.jet.emfxml no plugin.xml 3. Criar um conteúdo no sample.xml 4. Criar um gerador de exemplo <c:iterate select="/root/familia" var="familia"> Familia: <c:get /> Pai: <c:get /> Mãe: <c:get /> <c:if test="$familia/filho"> Filhos: <c:iterate select="$familia/filho" var="filho" delimiter="," ><c:get /> </c:if> 5. Mostrar como incluir outros templates <c:include template="templates/anotacoes.jet" /> 6. Mostrar como é possível anotar o modelo de entrada 6.1. Mostrar o dump.xml para ver a saída <c:iterate select="/root/familia" var="familia"> <c:set select="$familia/pai" name="nomecompleto"><c:get /> <c:get /></c:set> <c:set select="$familia/mae" name="nomecompleto"><c:get /> <c:get /></c:set> <c:iterate select="$familia/filho" var="filho"> <c:set select="$filho" name="nomecompleto"><c:get /> <c:get /></c:set> <c:addelement select="/root" name="pessoa" var="pessoapai" /> <c:set select="$pessoapai" name="genero">homem</c:set> <c:set select="$pessoapai" name="nome"><c:get /></c:set> <c:set select="$pessoapai" name="sobrenome"><c:get /></c:set> <c:addelement select="/root" name="pessoa" var="pessoamae" /> <c:set select="$pessoamae" name="genero">mulher</c:set> <c:set select="$pessoamae" name="nome"><c:get /></c:set> <c:set select="$pessoamae" name="sobrenome"><c:get /></c:set> <c:iterate select="$familia/filho" var="filho"> <c:addelement select="/root" name="pessoa" var="pessoafilho" /> <c:set select="$pessoafilho" name="genero">homem</c:set> <c:set select="$pessoafilho" name="nome"><c:get /></c:set> <c:set select="$pessoafilho" name="sobrenome"><c:get /></c:set> 7. Mostrar as tags ws:project e ws:folder Exemplo 20 Objetivo: Mostrar como gerar código Java 1. Criar novo projeto JET 2. Fazer um diagrama de classes no sample.xml 3. Gerar JavaBeans 3.1. Gerar setters e getters (usar anotações nos atributos) 4. Criar métodos abstratos no sample.xml 4.1. Adicionar parametros, exceções, visibilidade, modificador static 5. Demonstrar o uso do userregion 5.1. Tag

18 Exemplo 21 Objetivo: Mostrar como gerar código a partir de modelo EMF 1. Criar novo projeto JET 2. Estender a ferramenta de estados para incluir ações 3. Criar um modelo de exemplo (refrigerador) 4. Adicionar model loader org.eclipse.jet.emf no plugin.xml 5. Criar templates para anotações e uma classe da máquina de estados Anotações: <c:iterate select="/maquinadeestados/estadoinicial" var="estado"> <c:set select="$estado" name="nome">inicial</c:set> <c:set select="$estado" name="constante">0</c:set> <% int constanteestado = 1 %> <c:iterate select="/maquinadeestados/estadointermediario" var="estado"> <c:set select="$estado" name="constante"><%=constanteestado++%></c:set> <c:iterate select="/maquinadeestados/estadofinal" var="estado"> <c:set select="$estado" name="constante"><%=constanteestado++%></c:set> <% constanteestado = 1 %> <c:iterate select="/maquinadeestados/estadofinal" var="estado"> <c:if <c:set select="$estado" name="nome">final_<%=constanteestado++%></c:set> </c:if> <c:iterate select="/maquinadeestados/estados" var="estado"> <c:iterate select="$estado/acoes" var="acao"> <c:set select="$acao" name="metodoacao"><f:replaceall value=" " replacement="_"><c:get /></f:replaceall></c:set> Template da máquina de estados: package gerado import java.util.hashmap import java.util.map.entry public class MaquinaEstados { // estado inicial private final static int INICIAL = 0 // estados intermediarios e finais <c:iterate select="/maquinadeestados/estadointermediario" var="estado"> private final static int <f:uc><c:get /></f:uc> = <c:get /> <c:iterate select="/maquinadeestados/estadofinal" var="estado"> private final static int <f:uc><c:get /></f:uc> = <c:get /> private int estadoatual = 0 private HashMap<String,String> caracteristicas = new HashMap<String,String>() public void disparaevento(string evento) { System.out.println("Evento:" + evento) <c:iterate select="/maquinadeestados/transicoes" var="transicao" delimiter=" else"> if(evento.equals("<c:get && estadoatual == <f:uc><c:get /></f:uc>)

19 estadoatual = <f:uc><c:get /></f:uc> mudacaracteristicas() executaacoes() private void mudacaracteristicas() { <c:iterate select="/maquinadeestados/estados" var="estado" delimiter=" else"> if(estadoatual == <f:uc><c:get /></f:uc>) { <c:iterate select="$estado/caracteristicas" var="caracteristica"> caracteristicas.put("<c:get private void executaacoes() { <c:iterate select="/maquinadeestados/estados" var="estado"> <c:if test="$estado/acoes"> if(estadoatual == <f:uc><c:get /></f:uc>) { <c:iterate select="$estado/acoes" var="acao"> <c:get </c:if> <c:iterate select="/maquinadeestados/estados" var="estado"> <c:iterate select="$estado/acoes" var="acao"> private void <c:get { <c:userregion> // inicio <c:get <c:initialcode> //... insira o código aqui... </c:initialcode> // fim <c:get </c:userregion> public void imprimeestadoatual() { <c:iterate select="/maquinadeestados/estados" var="estado" delimiter=" else"> if(estadoatual == <f:uc><c:get /></f:uc>) System.out.println("Estado atual: <c:get />") public void imprimecaracteristicas() { for(entry<string,string> e : caracteristicas.entryset()) { System.out.println(e.getKey()+": "+e.getvalue()) 6. Fazer a versão abstrata 7. Demonstrar que dá pra incluir um template no outro <f:indent text=" " depth="1"> /* * Máquina de estados gerada * Data: <f:formatnow pattern="dd/mm/yyyy : EEE" /> * Número de estados: <c:get select="count(/maquinadeestados/estados)" /> * Número de estados finais: <c:get select="count(/maquinadeestados/estadofinal)" />

20 * Número de estados intermediários: <c:get select="count(/maquinadeestados/estadointermediario)" /> * Número de transições: <c:get select="count(/maquinadeestados/transicoes)" /> */ </f:indent> 8. Fazer o gerador de htmls para o exercício do modelo de decisões Exemplo 22 Objetivo: Demonstrar a linguagem xpand, usando um modelo xtext 1. Criar novo projeto xtext (deixar pra gerar o generator) 2. Criar uma linguagem simples para famílias Familias : (familias += Familia)* Familia : "Familia" sobrenome=string "(" pai=pai mae=mae (filhos += Filho)* ")" Pai: "pai" "=" nome=string Mae: "mae" "=" nome=string Filho: "filho" "=" nome=string 3. Criar um gerador simples «IMPORT familia» «DEFINE main FOR Familias» «FILE "familias.txt"» «FOREACH this.familias AS f-» «EXPAND familia FOR f-» «ENDFOREACH-» «ENDFILE-» «ENDDEFINE» «DEFINE familia FOR Familia-» ====== Família «sobrenome» ========== Pai: «pai.nome» Mãe: «mae.nome» «IF!filhos.isEmpty-» =========== Filhos ============= «FOREACH filhos AS filho-» «filho.nome» «ENDFOREACH-» «ENDIF-» «ENDDEFINE» 4. Mostrar que dá pra transformar pra ajudar na geração transforma(familias f) : f.familias.criafilho() -> f.familias.trocaesposa() create Filho criafilho(familia f) : f.filhos.add(this) -> this.setnome("filho da familia "+f.sobrenome) trocaesposa(familia f) : f.mae.setnome("nova esposa") 5. Mostrar que dá pra fazer extensões e ajudar na geração numerofilhos(familia f) :

Roteiros para os exemplos utilizados durante o curso

Roteiros para os exemplos utilizados durante o curso WebMedia 2009 Minicurso 3: Desenvolvimento Web Orientado a Modelos: Conceitos, Ferramentas e Técnicas Daniel Lucrédio Thiago Jabur Bittar Renata Pontin de Mattos Fortes {lucredio,jabur,renata@icmc.usp.br

Leia mais

1. Fazer aplicação exemplo

1. Fazer aplicação exemplo 1. Fazer aplicação exemplo 1.1. Criar novo projeto Web (EstudoDeCaso.Exemplo) 1.2. index.jsp (com os links individuais para cadastros) 1.3. cadastrarpessoa.jsp (formulário simples) 1.4. servlet CadastrarPessoa

Leia mais

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc. Sintaxe Geral Tipos de Dados Comentários Comentários: De linha: // comentário 1 // comentário 2 De bloco: /* linha 1 linha 2 linha n */ De documentação: /** linha1 * linha2 */ Programa Exemplo: ExemploComentario.java

Leia mais

Tutorial GMF (Graphical Modeling Framework)

Tutorial GMF (Graphical Modeling Framework) Tutorial GMF (Graphical Modeling Framework) Sobre o GMF: O GMF (Graphical Modeling Framework) é um framework para desenvolvimento de editores gráficos para modelos de domínio. Ele surgiu de uma união de

Leia mais

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos) Prova de Java 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos) O programa consiste em uma aplicação que simula o comportamento de dois

Leia mais

insfcanceof new public switch transient while byte continue extends for int null

insfcanceof new public switch transient while byte continue extends for int null Palavras -chave de JAV A abstract catch do final implements long private static throw void boolean char double finally import native protected super throws volatile break class float insfcanceof new public

Leia mais

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br. Novembro/2005

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br. Novembro/2005 Java Básico Matrícula de Alunos Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br Novembro/2005 Objetivos OO: trocar mensagens entre os objetos Exception: tratar exceções Análise: implementar

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Tutorial RMI (Remote Method Invocation) por Alabê Duarte Tutorial RMI (Remote Method Invocation) por Alabê Duarte Este tutorial explica basicamente como se implementa a API chamada RMI (Remote Method Invocation). O RMI nada mais é que a Invocação de Métodos

Leia mais

Implementação de Classe e Auto-Relacionamento em Java

Implementação de Classe e Auto-Relacionamento em Java UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Implementação de Classe e Auto-Relacionamento em Java 1)Introdução Um modelo de Diagrama de Classes representa a estrutura definida

Leia mais

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em

Leia mais

A Linguagem Java. Alberto Costa Neto DComp - UFS

A Linguagem Java. Alberto Costa Neto DComp - UFS A Linguagem Java Alberto Costa Neto DComp - UFS 1 Roteiro Comentários Variáveis Tipos Primitivos de Dados Casting Comandos de Entrada e Saída Operadores Constantes 2 Comentários /** Classe para impressão

Leia mais

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio.

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio. Objetivos do mini curso Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio. Conteúdo Uma visão da linguagem: O modo python de programar O interpretador dinâmico Salvando e

Leia mais

Documentação Usando o Javadoc

Documentação Usando o Javadoc Documentação Usando o Javadoc Prof. MSc. João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão 2.1 Última Atualização: 04/2005 1 Comentários e Documentação Comentários em Java Existem três tipos de comentários

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 3: Métodos LEEC@IST Java 1/45 Métodos (1) Sintaxe Qualif Tipo Ident ( [ TipoP IdentP [, TipoP IdentP]* ] ) { [ Variável_local Instrução ]* Qualif: qualificador (visibilidade,

Leia mais

Programação Orientada a Objetos. Encapsulamento

Programação Orientada a Objetos. Encapsulamento Programação Orientada a Objetos Encapsulamento de Dados Ocultação de dados Garante a transparência de utilização dos componentes do software, facilitando: Entendimento Reuso Manutenção Minimiza as interdependências

Leia mais

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

Leia mais

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ

UNIVERSIDADE FEDERAL DO PARANÁ CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 03 APRESENTAÇÃO: Hoje vamos conhecer o comando switch, o bloco try catch;

Leia mais

Threads e Sockets em Java. Threads em Java. Programas e Processos

Threads e Sockets em Java. Threads em Java. Programas e Processos Threads em Java Programas e Processos Um programa é um conceito estático, isto é, um programa é um arquivo em disco que contém um código executável por uma CPU. Quando este programa é executado dizemos

Leia mais

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar Projeto Integrador Sistemas Operacionais Prof.ª Lucilia Ribeiro GTI 3 Noturno Grupo: Anderson Alves da Mota. André Luiz Silva. Misael bezerra dos santos. Sandro de almeida silva. Analisar os sistemas operacionais

Leia mais

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código } Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ

UNIVERSIDADE FEDERAL DO PARANÁ CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 02 APRESENTAÇÃO: Apresentação; conceitos básicos da linguagem java; estrutura

Leia mais

Módulo 06 Desenho de Classes

Módulo 06 Desenho de Classes Módulo 06 Desenho de Classes Última Atualização: 13/06/2010 1 Objetivos Definir os conceitos de herança, polimorfismo, sobrecarga (overloading), sobreescrita(overriding) e invocação virtual de métodos.

Leia mais

!" # # # $ %!" " & ' ( 2

! # # # $ %!  & ' ( 2 !"# # #$ %!" "& ' ( 2 ) *+, - 3 . / 4 !" 0( # "!#. %! $""! # " #.- $ 111.&( ( 5 # # 0. " % * $(, 2 % $.& " 6 # #$ %% Modelo (Encapsula o estado da aplicação) Implementado como JavaBeans Responde a consulta

Leia mais

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this. Aula 2 Objetivos Encapsulamento na linguagem Java; Utilizando a referência this. Encapsulamento, data hiding é um conceito bastante importante em orientação a objetos. É utilizado para restringir o acesso

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 1: Introdução MEEC@IST Java 1/27 História versões (1) [1995] Versão 1.0, denominada Java Development Kit (JDK) 212 classes em 8 pacotes Lento, muitos bugs, mas com Applets

Leia mais

Noções sobre Objetos e Classes

Noções sobre Objetos e Classes Noções sobre Objetos e Classes Prof. Marcelo Cohen 1. Elementos de programação Revisão de programação variáveis, tipos de dados expressões e operadores cadeias de caracteres escopo de variáveis Revisão

Leia mais

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com HelloWorld.java: public class HelloWorld { public static void main (String[] args) { System.out.println( Hello, World ); } } Identificadores são usados

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Marcelo Lobosco DCC/UFJF Comunicação em Sistemas Distribuídos Aula 06 Agenda Modelo Cliente-Servidor (cont.) Invocação Remota de Método (Remote Method Invocation RMI) Visão Geral

Leia mais

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Orientação a Objetos em Java Leonardo Gresta Paulino Murta leomurta@ic.uff.br Agenda Introdução; Orientação a Objetos; Orientação a Objetos em Java; Leonardo Murta Orientação a Objetos em Java 2 Agosto/2007

Leia mais

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB) Uma Introdução à Arquitetura Francisco C. R. Reverbel 1 Copyright 1998-2006 Francisco Reverbel O Object Request Broker (ORB) Via de comunicação entre objetos (object bus), na arquitetura do OMG Definido

Leia mais

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Ao projetar uma aplicação Web, é importante considerála como sendo formada por três componentes lógicos: camada

Leia mais

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior Desenvolvimento WEB em JAVA Palestrante: Lourival F. de Almeida Júnior Agenda Introdução Servlet Arquitetura de Software Velocity Struts Conclusão Referências Introdução (antes) Programador Produto Introdução

Leia mais

Aula 30 - Sockets em Java

Aula 30 - Sockets em Java Aula 30 - Sockets em Java Sockets Sockets são estruturas que permitem que funções de software se interconectem. O conceito é o mesmo de um soquete (elétrico, telefônico, etc...), que serve para interconectar

Leia mais

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas UNIP - Ciência da Computação e Sistemas de Informação Estrutura de Dados AULA 6 Filas Estrutura de Dados A Estrutura de Dados Fila Fila é uma estrutura de dados usada em programação, que tem regras para

Leia mais

1/26/2009. Baseadas em http://www.voelter.de/services/mdsdtutorial.html. Experiência pessoal/profissional/acadêmica

1/26/2009. Baseadas em http://www.voelter.de/services/mdsdtutorial.html. Experiência pessoal/profissional/acadêmica Baseadas em http://www.voelter.de/services/mdsdtutorial.html Experiência pessoal/profissional/acadêmica 1 Metamodelo UML Meu Metamodelo Meu processo de negócios Meu processo de negócios Stereotypes Perfis

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5 JavaScript Diego R. Frank, Leonardo Seibt FIT Faculdades de Informática de Taquara Fundação Educacional Encosta Inferior do Nordeste Av. Oscar Martins Rangel, 4500 Taquara RS Brasil difrank@terra.com.br,

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

Leia mais

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp Java Básico Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp Classes Abstratas construção de uma classe abstrata construção de classes derivadas Classes e Herança Uma classe define

Leia mais

5 Derivando Aplicações Baseadas em Spring e OSGi

5 Derivando Aplicações Baseadas em Spring e OSGi 69 5 Derivando Aplicações Baseadas em Spring e OSGi O capítulo 3 apresentou como um conjunto de artefatos (classes, interfaces, aspectos e arquivos extras) de uma arquitetura de LPS pode ser modelado na

Leia mais

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente Java RMI - Remote Method Invocation Callbacks Folha 9-1 Vimos, na folha prática anterior, um exemplo muito simples de uma aplicação cliente/ servidor em que o cliente acede à referência remota de um objecto

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

LINGUAGEM ORIENTADA A OBJETOS

LINGUAGEM ORIENTADA A OBJETOS LINGUAGEM ORIENTADA A OBJETOS TI MÓDULO II O ECLIPSE O eclipse é uma IDE Open Source (código fonte aberto) que serve para o desenvolvimento em muitas linguagens: PHP Java Python HTML C/C++ A IDE Eclipse

Leia mais

Desenvolvimento de aplicações Web. Java Server Pages

Desenvolvimento de aplicações Web. Java Server Pages Desenvolvimento de aplicações Web Java Server Pages Hamilton Lima - athanazio@pobox.com 2003 Como funciona? Servidor web 2 Internet 1 Browser 3 Arquivo jsp 4 JSP Compilado 2 Passo a passo 1 browser envia

Leia mais

Enviando email com a API JavaMail

Enviando email com a API JavaMail Programando com Java Artigo http://mballem.wordpress.com/ Enviando email com a API JavaMail Autor Marcio Ballem: é formado em Sistemas de Informação e possui certificação Oracle Certified Professional,

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução Chamadas Remotas de Chamada Remota de Procedimento (RPC) ou Chamada de Função ou Chamada de Subrotina Método de transferência de controle de parte de um processo para outra parte Procedimentos => permite

Leia mais

Sintaxe Básica de Java Parte 1

Sintaxe Básica de Java Parte 1 Sintaxe Básica de Java Parte 1 Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marcioubeno.com Fonte: Material da Profª Karina Oliveira Estrutura de Programa Um programa

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 5 Análise Léxica com JavaCC Prof. Márcio Delamaro delamaro@icmc.usp.br Como

Leia mais

Sistemas de Informação: XML- Java

Sistemas de Informação: XML- Java XL 1 : XL- Java Todos os exemplos bem como o conteúdo teórico tem por base o livro: Steven Holzner, SAS Teach Yourself XL, SAS Publishing, 2004 XL Java e XL 2 Documentos XL podem ser abordados de dois

Leia mais

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ...

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ... Programação Na Web Linguagem Java Parte II Sintaxe António Gonçalves break com o nome do bloco Nome do bloco Termina o bloco class class Matrix Matrix { private private int[][] int[][] mat; mat; public

Leia mais

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado ARQUITETURA SISGRAD Manual de Utilização Versão: 2.0 Criação: 05 de julho de 2007 Autor: André Penteado Última Revisão: 09 de outubro de 2009 Autor: Alessandro Moraes Controle Acadêmico - Arquitetura SISGRAD

Leia mais

Java Spaces Exemplos

Java Spaces Exemplos Java Spaces Exemplos Programação com Objetos Distribuídos (C. Geyer) Java Spaces - Exemplos V0 1 Autoria! Autores! Local " Cláudio Geyer " Instituto de Informática " UFRGS " disciplina: Programação com

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Java e Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas necessários...

Leia mais

Mini-Tutorial. Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti.

Mini-Tutorial. Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti. Mini-Tutorial Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005 www.furutani.eti.br 1. Introdução O objetivo deste trabalho é mostrar de forma prática como

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java A linguagem Java surgiu em 1991 quando cientistas da Sun, liderados por Patrick Naughton e James Gosling, projetaram uma linguagem pequena para ser utilizada em eletrodomésticos

Leia mais

Encapsulamento de Dados

Encapsulamento de Dados Encapsulamento de Dados Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Modificadores de Visibilidade Especificam

Leia mais

Técnicas de Programação II

Técnicas de Programação II Técnicas de Programação II Aula 06 Orientação a Objetos e Classes Edirlei Soares de Lima Orientação a Objetos O ser humano se relaciona com o mundo através do conceito de objetos.

Leia mais

SISTEMAS DISTRIBUÍDOS

SISTEMAS DISTRIBUÍDOS SISTEMAS DISTRIBUÍDOS CUP Disk Memoey CUP Memoey Disk Network CUP Memoey Disk Remote Method Invocation (RMI) Introdução Solução JAVA para Objetos Distribuídos Um objeto existe em uma máquina É possível

Leia mais

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes. Desenvolvimento OO com Java 7 RTTI e Interfaces Vítor E. Silva Souza (vitorsouza@inf.ufes.br) http://www.inf.ufes.br/ ~ vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do

Leia mais

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

PADI 2015/16. Aula 1 Introdução à Plataforma.NET PADI 2015/16 Aula 1 Introdução à Plataforma.NET 1 Sumário 1. Framework.NET Arquitectura 2. Linguagem C# 2.0 Sintaxe C# vs. Java vs. C++ 3. IDE: MS Visual Studio 2005 ou superior Ferramentas Console/Win

Leia mais

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br Java - Introdução Professor: Vilson Heck Junior vilson.junior@ifsc.edu.br Agenda O que é Java? Sun / Oracle. IDE - NetBeans. Linguagem Java; Maquina Virtual; Atividade Prática. Identificando Elementos

Leia mais

Manipulação de XML JAXP - DOM

Manipulação de XML JAXP - DOM UNIPÊ Centro Universitário de João Pessoa Desenvolvimento para Web - XML Manipulação de XML JAXP - DOM Prof. Eduardo Ribas ducaribas@gmail.com 1 4 JAXP DOM O que é DOM? Document Object Model API padrão

Leia mais

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS João Gabriel Ganem Barbosa Sumário Motivação História Linha do Tempo Divisão Conceitos Paradigmas Geração Tipos de Dados Operadores Estruturada vs

Leia mais

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos. import java.util.scanner; class Data... class Compromisso... public class Agenda private Compromisso[] compromissos; private Compromisso[] realoquecompromissos (Compromisso[] vetor, int tamanhodesejado)

Leia mais

Revisão OO Básico. Orientação a Objetos em Java

Revisão OO Básico. Orientação a Objetos em Java Revisão OO Básico Orientação a Objetos em Java Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Nomenclatura A unidade básica de programação em linguagens orientadas a objetos é a

Leia mais

MÓDULO Programação para Web 2

MÓDULO Programação para Web 2 MÓDULO Programação para Web 2 USANDO O JSF Continuação Interdependência e Injeção Instâncias de Managed Beans podem conversar entre si para dividir o processamento das requisições dos usuários de acordo

Leia mais

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha www.argonavis.com.br

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha www.argonavis.com.br Java 2 Standard Edition Fundamentos de Objetos Remotos Helder da Rocha www.argonavis.com.br 1 Sobre este módulo Este módulo tem como objetivo dar uma visão geral, porém prática, da criação e uso de objetos

Leia mais

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Num sistema de objectos distribuídos, dois conceitos são fundamentais. Folha 10-1 Java RMI - Remote Method Invocation No modelo de programação orientada a objectos, vimos que um programa consiste numa colecção de objectos que comunicam entre si através da invocação dos seus

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

INSTITUTO DE COMPUTAÇÃO UNICAMP 1o. SEMESTRE DE 2009. Profa. Cecília M. F. Rubira

INSTITUTO DE COMPUTAÇÃO UNICAMP 1o. SEMESTRE DE 2009. Profa. Cecília M. F. Rubira INSTITUTO DE COMPUTAÇÃO UNICAMP 1o. SEMESTRE DE 2009 Profa. Cecília M. F. Rubira Sala 13, cmrubira@ic.unicamp.br Versão: 1.1 Data: 22 de abril de 2009. Estudo de Caso: Sistema de Folha de Pagamento Este

Leia mais

JAVA. Introdução. Marcio de Carvalho Victorino. Page 1 1/40 2/40

JAVA. Introdução. Marcio de Carvalho Victorino. Page 1 1/40 2/40 JAVA Marcio de Carvalho Victorino 1/40 Introdução 2/40 Page 1 Programação OO Elementos do modelo OO: Abstração: é o processo de abstrair as características essenciais de um objeto real. O conjunto de características

Leia mais

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010 Módulo 02 Programação Orientada a Objetos Última atualização: 07/06/2010 1 Objetivos Definir conceitos de orientação a objetos: o abstração, encapsulamento, pacotes. Discutir reutilização de código em

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Classes Abstratas e Interfaces

Classes Abstratas e Interfaces Java Básico Classes Abstratas e Interfaces Marco Antonio, Arquiteto de Software TJDF ma@marcoreis.eti.br Novembro/2005 Classe abstrata Recurso avançado da OO Não pode ser instanciada Deve ser instanciada

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Capítulo 3. Programação por objectos em Java

Capítulo 3. Programação por objectos em Java Capítulo 3. Programação por objectos em Java 1/46 Índice Indice 3.1 - Qualificadores de visualização 3.2 - Classe 3.3 - Objecto 3.4 - Métodos 3.5 - Herança 3.6 - Reescrita de métodos 3.7 - Classes abstractas

Leia mais

Programa de Computador que funciona em Rede

Programa de Computador que funciona em Rede Programa de Computador que funciona em Rede professor Robinson Vida Noronha 1 Paradigma Um programa rodando em rede é como uma loja. 2 Uma loja é composta por Vendedores Vendedores 3 Um loja deve servir

Leia mais

Técnicas de Programação II

Técnicas de Programação II Técnicas de Programação II Apresentação da Disciplina Edirlei Soares de Lima Objetivos da Disciplina Apresentar os principais conceitos da orientação a objetos; Capacitar o

Leia mais

2 Orientação a objetos na prática

2 Orientação a objetos na prática 2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos

Leia mais

Capítulo 6. Java IO - Ficheiros

Capítulo 6. Java IO - Ficheiros Capítulo 6. Java IO - Ficheiros 1/26 Índice Indice 6.1 - Entrada e saída de dados 6.2 - Ficheiros de texto 6.3 - Ficheiros com formato proprietário 6.4 - A classe File 2/26 Índice 6.1 Entrada e saída de

Leia mais

Desenvolvimento OO com Java Orientação a objetos básica

Desenvolvimento OO com Java Orientação a objetos básica Desenvolvimento OO com Java Orientação a objetos básica Vítor E. Silva Souza (vitor.souza@ufes.br) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal

Leia mais

Guião de Introdução ao Eclipse IDE Índice

Guião de Introdução ao Eclipse IDE Índice Índice 1. Introdução... 2 1.1. O que é um ambiente de desenvolvimento (IDE)?... 2 1.2. Visão geral sobre o Eclipse IDE... 2 2. Iniciar o Eclipse... 3 2.1. Instalação... 3 2.2. Utilizar o Eclipse... 3 3.

Leia mais

Java 2 Standard Edition Como criar classes e objetos

Java 2 Standard Edition Como criar classes e objetos Java 2 Standard Edition Como criar classes e objetos Helder da Rocha www.argonavis.com.br 1 Assuntos abordados Este módulo explora detalhes da construção de classes e objetos Construtores Implicações da

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Sobre o Professor Dr. Sylvio Barbon Junior

Sobre o Professor Dr. Sylvio Barbon Junior 5COP088 Laboratório de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr barbon@uel.br 1 Sobre o Professor Dr. Sylvio Barbon Junior Formação: Ciência e Engenharia da Computação (2005

Leia mais

Plataforma para Agentes

Plataforma para Agentes Plataforma para es JATLite - Java Template, Lite O que é o JATLite? http://java.stanford.edu/ http://www.fe.up.pt/~eol/aiad/jatlite/doc/index.html Pacote de programas em Java permitindo: rápida criação

Leia mais

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

Prática em Laboratório N.02 Criando um serviço Web via NetBeans Prática em Laboratório N.02 Criando um serviço Web via NetBeans O objetivo deste exercício é criar um projeto apropriado para desenvolver um contêiner que você resolva utilizar. Uma vez criado o projeto,

Leia mais

Sistemas Paralelos e Distribuídos - 2003/2004 Curso: Matemática /Informática Sistemas Distribuídos - 2003/2004 Curso: Ensino da Informática

Sistemas Paralelos e Distribuídos - 2003/2004 Curso: Matemática /Informática Sistemas Distribuídos - 2003/2004 Curso: Ensino da Informática Java RMI - Remote Method Invocation Folha 5-1 No modelo de programação orientada a objectos, vimos que um programa consiste numa colecção de objectos que comunicam entre si através da invocação dos seus

Leia mais

Tutorial Eclipse (IDE)

Tutorial Eclipse (IDE) www.dejavuxteam.wordpress.com Tutorial Eclipse (IDE) (Start) Sumário Introdução O que é o Eclipse? Característica e Ferramentas Download Preparando Ambiente de Trabalho Iniciando o Eclipse Criando um Projeto

Leia mais