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 select="$familia/@sobrenome" /> Pai: <c:get select="$familia/pai/@nome" /> Mãe: <c:get select="$familia/mae/@nome" /> <c:if test="$familia/filho"> Filhos: <c:iterate select="$familia/filho" var="filho" delimiter="," ><c:get select="$filho/@nome" /> </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 select="$familia/pai/@nome" /> <c:get select="$familia/@sobrenome" /></c:set> <c:set select="$familia/mae" name="nomecompleto"><c:get select="$familia/mae/@nome" /> <c:get select="$familia/@sobrenome" /></c:set> <c:iterate select="$familia/filho" var="filho"> <c:set select="$filho" name="nomecompleto"><c:get select="$filho/@nome" /> <c:get select="$familia/@sobrenome" /></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 select="$familia/pai/@nome" /></c:set> <c:set select="$pessoapai" name="sobrenome"><c:get select="$familia/@sobrenome" /></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 select="$familia/mae/@nome" /></c:set> <c:set select="$pessoamae" name="sobrenome"><c:get select="$familia/@sobrenome" /></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 select="$filho/@nome" /></c:set> <c:set select="$pessoafilho" name="sobrenome"><c:get select="$familia/@sobrenome" /></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 unmodifiedmarker="@generated"

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 test="not($estado/@nome)"> <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 select="$acao/@nome" /></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 select="$estado/@nome" /></f:uc> = <c:get select="$estado/@constante" /> <c:iterate select="/maquinadeestados/estadofinal" var="estado"> private final static int <f:uc><c:get select="$estado/@nome" /></f:uc> = <c:get select="$estado/@constante" /> 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 select="$transicao/@nome"/>") && estadoatual == <f:uc><c:get select="$transicao/origem/@nome" /></f:uc>)

19 estadoatual = <f:uc><c:get select="$transicao/destino/@nome" /></f:uc> mudacaracteristicas() executaacoes() private void mudacaracteristicas() { <c:iterate select="/maquinadeestados/estados" var="estado" delimiter=" else"> if(estadoatual == <f:uc><c:get select="$estado/@nome" /></f:uc>) { <c:iterate select="$estado/caracteristicas" var="caracteristica"> caracteristicas.put("<c:get select="$caracteristica/@nome"/>","<c:get select="$caracteristica/@expressao"/>") private void executaacoes() { <c:iterate select="/maquinadeestados/estados" var="estado"> <c:if test="$estado/acoes"> if(estadoatual == <f:uc><c:get select="$estado/@nome" /></f:uc>) { <c:iterate select="$estado/acoes" var="acao"> <c:get select="$acao/@metodoacao"/>() </c:if> <c:iterate select="/maquinadeestados/estados" var="estado"> <c:iterate select="$estado/acoes" var="acao"> private void <c:get select="$acao/@metodoacao"/>() { <c:userregion> // inicio <c:get select="$acao/@metodoacao"/> <c:initialcode> //... insira o código aqui... </c:initialcode> // fim <c:get select="$acao/@metodoacao"/> </c:userregion> public void imprimeestadoatual() { <c:iterate select="/maquinadeestados/estados" var="estado" delimiter=" else"> if(estadoatual == <f:uc><c:get select="$estado/@nome" /></f:uc>) System.out.println("Estado atual: <c:get select="$estado/@nome" />") 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

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

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

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

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

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

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

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

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

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: 03 APRESENTAÇÃO: Hoje vamos conhecer o comando switch, o bloco try catch;

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

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

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

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

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

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

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

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

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

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. JDBC CRIANDO O BANCO DE DADOS: Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. CRIANDO O PROJETO JAVA PARA DESKTOP: Crie um projeto Java chamado Prograd Crie um pacote chamado

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

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

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

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

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

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

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

Templates e Pilhas. 1. Introdução

Templates e Pilhas. 1. Introdução Templates e Pilhas 1. Introdução Templates ou Generics é considerado uma forma de polimorfismo [1]. É uma forma de programar onde o tipo do dado não é considerado. Programa-se para um tipo de dado indefinido.

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

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

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

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Programação Orientada a Objetos (DPADF 0063)

Programação Orientada a Objetos (DPADF 0063) Programação Orientada a Objetos (DPADF 0063) Aula 5 Herança Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno

Leia mais

Programação online em Java

Programação online em Java Universidade Federal do ABC Disciplina: Processamento da Informação Assunto: Programação online em Java Programação online em Java Conteúdo Conteúdo...1 Introdução... 1 1.1.Programas necessários... 1 1.2.Visão

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

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

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

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

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

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes Programação Orientada a Objetos e Java - Introdução Carlos Lopes POO e Java Objetivo: proporcionar uma visão dos conceitos de POO e do seu uso na estruturação dos programas em Java. Classes e objetos em

Leia mais

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

Leia mais

Um pouco do Java. Prof. Eduardo

Um pouco do Java. Prof. Eduardo Um pouco do Java Prof. Eduardo Introdução A tecnologia JAVA é composta pela linguagem de programação JAVA e pela plataforma de desenvolvimento JAVA. Os programas são escritos em arquivos-texto com a extensão.java.

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

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

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

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

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

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores 1 Exercícios Exercício 1: Construtores e Testes Analise a classe Conta.java, mostrada na

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

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

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

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

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 Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Apresentação 3: Orientação Objetos: Conceitos Básicos Objetivos: Compreender os Conceitos Básicos da Orientação a Objetos;

Leia mais

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java Linguagem Java Objetivos Compreender como desenvolver algoritmos básicos em JAVA Aprender como escrever programas na Linguagem JAVA baseando-se na Linguagem Portugol aprender as sintaxes equivalentes entre

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

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

Programação Orientada a Objetos em Java

Programação Orientada a Objetos em Java Programação Orientada a Objetos em Java Rone Ilídio da Silva Universidade Federal de São João del-rei Campus Alto Paraopeba 1:14 1 Objetivo Apresentar os principais conceitos de Programção Orientada a

Leia mais

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação UNIFEI Disciplina Professor Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação Enzo Seraphim 1 Padrões de Operação

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

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

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

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

!" # # # $ %!" " & ' ( 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

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

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

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

Programação Orientada a Objeto

Programação Orientada a Objeto Programação Orientada a Objeto Classes, Atributos, Métodos e Objetos Programação de Computadores II Professor: Edwar Saliba Júnior 1) Java é uma linguagem orientada a objetos. Para que possamos fazer uso

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

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

Simulado de Linguagem de Programação Java

Simulado de Linguagem de Programação Java Simulado de Linguagem de Programação Java 1. Descreva o processo de criação de programas em Java, desde a criação do código-fonte até a obtenção do resultado esperado, por meio de sua execução. Cite as

Leia mais

Unidade IV: Ponteiros, Referências e Arrays

Unidade IV: Ponteiros, Referências e Arrays Programação com OO Acesso em Java a BD Curso: Técnico em Informática Campus: Ipanguaçu José Maria Monteiro Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento Clayton Maciel de Informática

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

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Aula 09 Introdução à Java Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Agenda da Aula Java: Sintaxe; Tipos de Dados; Variáveis; Impressão de Dados.

Leia mais

Programação Orientada a Objetos em Java. Herança

Programação Orientada a Objetos em Java. Herança Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Herança Professor: César Melo Slides baseados em materiais preparados

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

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

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

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

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

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Java II Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Por quê JSP? Com Servlets é fácil Ler dados de um formulário Recuperar dados de uma requisição Gerar informação de resposta Fazer gerenciamento

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

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB INTRODUÇÃO AO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar a grande semelhança entre Java e C Apresentar a organização diferenciada

Leia mais

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

Módulo 07 Características Avançadas de Classes

Módulo 07 Características Avançadas de Classes Módulo 07 Características Avançadas de Classes Última Atualização: 15/06/2010 1 Objetivos Descrever variáveis, métodos e iniciadores static Descrever a semântica do modificador final em classes, métodos

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

Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação.

Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação. Introdução Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação. O Log4j é um é um projeto open source distribuído pela Apache

Leia mais

3 Classes e instanciação de objectos (em Java)

3 Classes e instanciação de objectos (em Java) 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame 6. Como aplicações gráficas funcionam em Java? Todas as aplicações gráficas em Java usam instâncias de classes existentes, que por serem parte da linguagem podem ser executadas em todas as versões de Java

Leia mais

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA P. Fazendeiro & P. Prata POO FP1/1 ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA 0 Iniciar o ambiente de desenvolvimento integrado

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

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

Algoritmos e Programação II. Sobrecarga

Algoritmos e Programação II. Sobrecarga Algoritmos e Programação II Baseado no Material do Prof. Júlio Machado Sobrecarga Em várias linguagens é comum encontrarmos rotinas que fazem basicamente a mesma coisa, porém, têm nomes distintos porque

Leia mais