{"id":1625,"date":"2021-11-07T11:10:06","date_gmt":"2021-11-07T14:10:06","guid":{"rendered":"https:\/\/web.inf.ufpr.br\/didonet\/?page_id=1625"},"modified":"2021-11-07T11:13:09","modified_gmt":"2021-11-07T14:13:09","slug":"info7052-2021-ere4-trabalho2","status":"publish","type":"page","link":"https:\/\/web.inf.ufpr.br\/didonet\/info7052-2021-ere4-trabalho2\/","title":{"rendered":"INFO7052-2021-ere4-trabalho2"},"content":{"rendered":"\n<h2>INFO7052-CI1061-CI092 TRABALHO 2 &#8211; ERE4<\/h2>\n<h3>UTILIZA\u00c7\u00c3O DE UM GERADOR DE C\u00d3DIGO DE ARQUIVOS JSON ou XMI<\/h3>\n<p>Arquivos\u00a0<a href=\"https:\/\/www.json.org\/json-pt.html\">JSON<\/a> s\u00e3o amplamente utilizados em v\u00e1rias aplica\u00e7\u00f5es. Uma aplica\u00e7\u00e3o poss\u00edvel \u00e9 para defini\u00e7\u00e3o de modelos de dados aninhados, isto \u00e9, que possuem uma estrutura formada por elementos, e estes elementos possuem propriedades ou sub-elementos, e assim sucessivamente.\u00a0<\/p>\n<p>Neste trabalho, os arquivos JSON ser\u00e3o utilizados para defini\u00e7\u00e3o de modelos de dados e este modelo ser\u00e1 utilizado para a utiliza\u00e7\u00e3o de um gerador de c\u00f3digo para produzir Java.<\/p>\n<p>Considere o exemplo abaixo escrito em JSON:<\/p>\n<pre class=\"prettyprint\"><span class=\"token punctuation\">{<\/span>\n  <span class=\"token string\">\"Aluno\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Jos\u00e9\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"cpf\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"12341234\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"telefone\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"9999999\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"Turma\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token string\">\"codigo\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"CI1061\"<\/span><span class=\"token punctuation\">,<\/span>\n          <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"T\u00e9cnicas em modelagem\"<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token string\">\"codigo\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"CI1057\"<\/span><span class=\"token punctuation\">,<\/span>\n          <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Algoritmos 3\"<\/span>\n        <span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">]<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Carlos\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"cpf\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"123456\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"telefone\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"8888888\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token string\">\"Turma\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token string\">\"codigo\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"CI092\"<\/span><span class=\"token punctuation\">,<\/span>\n          <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"T\u00e9cnicas em modelagem\"<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token string\">\"codigo\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"CI1056\"<\/span><span class=\"token punctuation\">,<\/span>\n          <span class=\"token string\">\"nome\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"Algoritmos 2\"<\/span>\n        <span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">]<\/span>\n    <span class=\"token punctuation\">}<\/span>\n  <span class=\"token punctuation\">]<\/span>\n<span class=\"token punctuation\">}<\/span><\/pre>\n<p>O JSON acima dever\u00e1 ser utilizado para gera\u00e7\u00e3o das classes java correspondentes. Para gera\u00e7\u00e3o do c\u00f3digo, <strong>dever\u00e1 ser utilizado um gerador de c\u00f3digo existente.<\/strong> A escolha do gerador de c\u00f3digo ficar\u00e1 a crit\u00e9rio do grupo. Duas sugest\u00f5es de geradores de c\u00f3digo para serem utilizados s\u00e3o: <a href=\"https:\/\/www.eclipse.org\/acceleo\/\">Acceleo<\/a> (dispon\u00edvel na distribui\u00e7\u00e3o &#8220;Modeling&#8221; do Eclipse) e <a href=\"https:\/\/dzone.com\/articles\/introducing-picocog-a-lightweight-code-generation\">Picocog<\/a>. Existem centenas de ferramentas de geradores de c\u00f3digo, como estas <a href=\"https:\/\/en.wikipedia.org\/wiki\/Comparison_of_code_generation_tools\">apresentadas na Wikipedia<\/a>.<br \/><br \/>Um exemplo de c\u00f3digo gerado pode ser mostrado abaixo:<\/p>\n<pre class=\"prettyprint\"><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Aluno<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token class-name\">String<\/span> nome<span class=\"token punctuation\">;<\/span>\n    <span class=\"token class-name\">String<\/span> cpf<span class=\"token punctuation\">;<\/span>\n    <span class=\"token class-name\">String<\/span> telefone<span class=\"token punctuation\">;<\/span>\n    <span class=\"token class-name\">ArrayList<\/span><span class=\"token generics\"><span class=\"token punctuation\">&lt;<\/span><span class=\"token class-name\">Turma<\/span><span class=\"token punctuation\">&gt;<\/span><\/span> turmas<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Turma<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token class-name\">String<\/span> codigo<span class=\"token punctuation\">;<\/span>\n    <span class=\"token class-name\">String<\/span> nome<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<br \/><\/span><br \/>class Programa {\n<span class=\"token keyword\">   public<\/span> <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">main<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token class-name\">String<\/span> args<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span>\n<span class=\"token punctuation\">   }<br \/>}<\/span><\/pre>\n<pre class=\"prettyprint\"><span class=\"token punctuation\">\u00a0<\/span><\/pre>\n<p><strong>ENTRADA:<\/strong><br \/>O gerador de c\u00f3digo receber\u00e1 um arquivo .json (ou XMI) com estrutura semelhante \u00e0 descrita no exemplo. N\u00e3o ser\u00e1 necess\u00e1rio processar a especifica\u00e7\u00e3o completa do formato JSON ou XMI, apenas o subconjunto descrito acima.<br \/><strong><br \/>Alternativa de entrada: <\/strong>Outro formato tamb\u00e9m poss\u00edvel para representa\u00e7\u00e3o de modelos \u00e9 o formato XMI. Este formato \u00e9 utilizado por diferentes editores, entre eles o editor de modelos Ecore dispon\u00edvel na ferramenta Eclipse ou editores UML como Papyrus. O grupo poder\u00e1 escolher entre JSON e XMI, justificando a escolha.<\/p>\n<p><strong>SAIDA:<br \/><\/strong>O gerador ir\u00e1 produzir um arquivo .java com um conjunto de classes correspondentes. O arquivo deve ser funcional, isto \u00e9, ao ser compilado e executado n\u00e3o poder\u00e1 apresentar erros.<br \/><br \/>A compila\u00e7\u00e3o e execu\u00e7\u00e3o ser\u00e3o feitas com os seguinte comandos:<\/p>\n<pre>javac *.java<\/pre>\n<pre>java Programa<\/pre>\n<h5>ENTREGA<\/h5>\n<p>Dever\u00e1 ser entregue um conjunto de arquivos fones com a utiliza\u00e7\u00e3o do gerador do c\u00f3digo. Todas as classes (fontes) devem estar em uma mesma pasta e compactadas em um arquivo (tar.gz ou zip). Trabalhos sem os fontes n\u00e3o ser\u00e3o considerados. Os trabalhos dever\u00e3o compilar e rodar facilmente nos servidores do Departamento de Inform\u00e1tica, ou usando a \u00faltima vers\u00e3o da distribui\u00e7\u00e3o &#8220;Eclipse Modeling&#8221; do framework Eclipse.&#8217;<\/p>\n<p>Dever\u00e1 ser entregue um relat\u00f3rio explicando as principais escolhas de implementa\u00e7\u00e3o:<br \/>&#8211; escolha do gerador;<br \/>&#8211; comparativo entre a utiliza\u00e7\u00e3o de um gerador de c\u00f3digo e a implementa\u00e7\u00e3o de um gerador de c\u00f3digo, feito no trabalho 1.<\/p>\n<p><strong>MODO DE ENTREGA :<\/strong>\u00a0enviar o c\u00f3digo por email para marcos.ddf _at_ inf.ufpr.br (at\u00e9 as 24h da data final). Cada dia de atraso ser\u00e3o descontados 10 pontos da nota.<\/p>\n<p><br \/>No corpo do email, colocar o nome e GRR do aluno. No assunto, preencher com \u201cEntrega trabalho 092\u201d. O trabalho pode ser feito em grupos com 2 ou 3 participantes.<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":21,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1625","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/comments?post=1625"}],"version-history":[{"count":4,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1625\/revisions"}],"predecessor-version":[{"id":1631,"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/pages\/1625\/revisions\/1631"}],"wp:attachment":[{"href":"https:\/\/web.inf.ufpr.br\/didonet\/wp-json\/wp\/v2\/media?parent=1625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}