Exemplo 1 Objetivo: Demonstrar como fazer um interpretador simples
|
|
- Mônica Lobo Marroquim
- 8 Há anos
- Visualizações:
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
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 mais1. 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 maisSintaxe 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 maisProva 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 maisDocumentaçã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 maisinsfcanceof 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 maisLinguagem 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 maisSistemas 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 maisTutorial 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 mais2 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 maisProgramaçã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 maisComandos 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 maisUNIVERSIDADE 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 maisAlgoritmos 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 maisTutorial 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 maisJSP - 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 maisDesenvolvimento 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 maisExercí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 maisAnalisar 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 maisImplementaçã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 maisChamadas 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 maisEncapsulamento 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 maisJDBC. 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 maisComo 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 maisCurso 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 maisDesenvolvimento 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 maisProgramaçã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 maisSISTEMAS 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 maisJava 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 maisProgramaçã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 maisTemplates 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 maisJava. 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 maisAula 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 maisEnviando 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 maisCONVENÇÃ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 maisProgramaçã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 maisProgramaçã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 maisA 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 maisNoçõ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 maisJava 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 maisProgramaçã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 maisTé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 maisProgramaçã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 maisNOVIDADES 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 maisUm 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 maisSobre 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 maisJava 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 maisLista 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 maisJava 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 maisLINGUAGEM 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 maisComputaçã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 maisIntroduçã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 mais7 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 maisJavaScript 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 maisAula 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 maisProgramaçã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 maisAlgoritmos 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 maisOrientaçã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 maisBacharelado 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 maisCONCEITOS 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 maisUniversidade 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 maisProgramaçã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 maisUniversidade 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 maisOrientaçã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 maisObjetivos 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 maisNum 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 maisUma 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 ) *+, - 3 . / 4 !" 0( # "!#. %! $""! # " #.- $ 111.&( ( 5 # # 0. " % * $(, 2 % $.& " 6 # #$ %% Modelo (Encapsula o estado da aplicação) Implementado como JavaBeans Responde a consulta
Leia maisPrá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 maisSintaxe 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 maisSistemas 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 maisProgramaçã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 maisA 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 maisArquitetura 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 maisSimulado 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 maisUnidade 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 maisPrograma 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 maisAula 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 maisProgramaçã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 maisBSI 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 maisReuso 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 mais1/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 maisMó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 maispublic 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 maisJava 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 maisOrientaçã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 maisINTRODUÇÃ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 maisImplementando 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 maisPadrã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 maisMó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 maisGuiã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 maisHoje 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 mais3 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 maisExemplo 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 maisESQUEMA 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 maisJava 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 maisCURSO 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 maisAlgoritmos 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