<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PauloMotta.pro &#187; OBJETOS</title>
	<atom:link href="http://www.paulomotta.pro.br/tag/objetos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulomotta.pro.br</link>
	<description>&#34;Qualquer tecnologia suficientemente avançada é indistinguível da mágica&#34; - Arthur C. Clarke</description>
	<lastBuildDate>Tue, 10 Jan 2012 03:00:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Tutorial JPA</title>
		<link>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/</link>
		<comments>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/#comments</comments>
		<pubDate>Mon, 17 May 2010 10:00:29 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[APLICAÇÃO]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OBJETOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[SISTEMA]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=452</guid>
		<description><![CDATA[Já há algum tempo eu vinha planejando colocar aqui no site alguns tutoriais, mas o tempo sempre curto me atrapalhava muito. Esse período porém eu tenho um aliado, decidi usar na faculdade o JPA nas disciplinas de Java e de Web, então para economizar o tempo de explicações nada melhor do que colocar aqui o [...]]]></description>
			<content:encoded><![CDATA[<p>Já há algum tempo eu vinha planejando colocar aqui no site alguns tutoriais, mas o tempo sempre curto me atrapalhava muito. Esse período porém eu tenho um aliado, decidi usar na faculdade o JPA nas disciplinas de Java e de Web, então para economizar o tempo de explicações nada melhor do que colocar aqui o primeiro tutorial de como usar JPA (com o auxílio do Netbeans.)</p>
<p>Vamos começar com o que será necessário. Primeiro de tudo meu ambiente é um linux configurado em inglês por isso as telas aqui estão em inglês, então pode ser que precise adaptar os detalhes das telas para o seu ambiente. Aqui eu uso tanto MySQL quanto PostgreSQL, mas nesse tutorial vou assumir que existe um MySQL instalado com um banco de dados criado de nome &#8220;curso&#8221; com um usuário &#8220;javadb&#8221; (e a senha você precisa saber qual configurou aí.) Infelizmente a configuração do MySQL não está no nosso escopo, mas qualquer banco de dados relacional serve (só precisa mudar durante a configuração conforme vou mostrar mais a frente.) Finalmente a última definição é usar o Netbeans 6.7, já temos o 6.8 disponível, mas por questões de projeto ainda não migrei nem testei ele, já a versão 6.7.1 tem alguns problemas com detalhes de web e CVS então sugiro ficar com o 6.7 por enquanto, e pode ser encontrado <a href="http://netbeans.org/downloads/6.7/index.html" target="_blank">aqui</a>.</p>
<p>Então agora vamos começar!</p>
<p>Primeiro precisamos entender do que estamos falando, isso costuma ajudar muito no desenvolvimento de qualquer coisa na vida. JPA é a sigla para Java Persistence Api, ou seja, uma especificação de persistência para Java. Isso significa que depois de anos de trabalho tentando mapear sistemas orientados a objetos em bancos de dados relacionais aprendemos quais são os problemas recorrentes e as soluções foram sendo catalogadas. O resultado disso ao longo dos anos foi a construção de ferramentas que ofereciam soluções parcialmente automáticas. Com a chegada do EJB3 a Sun mudou os Entity Beans (entidades do sistema) para marcar seus relacionamentos via anotações, e além disso incorporou os mecanismos das diversas ferramentas de persistência. Como implementação de referência a Oracle disponibilizou gratuitamente o TopLink, na época Oracle ainda não tinha comprado a Sun.</p>
<p>É claro que usar uma ferramenta de persistência pode sacrificar um pouco o desempenho da aplicação, mas tenha em mente o seguinte, nem todas as partes do sistema precisam ser extremamente rápidas. Quando alguma das partes do sistema não estiver satisfatória podemos deixar de lado a ferramenta e prover alguma solução construída manualmente. Mas por experiência própria, são poucas as vezes que isso é necessário em sistemas de informação.</p>
<p>Então para fechar a parte teórica e começarmos a meter a mão na massa. A Sun já tinha proposto anteriormente o JDBC que é a especificação que permite que os fornecedores de bancos de dados disponibilizem os drivers para acessar seus produtos, agora com o JPA temos o papel de provedor de persistência, neste caso temos <a href="http://www.hibernate.org/" target="_blank">Hibernate</a>, <a href="http://www.oracle.com/technology/products/ias/toplink/index.html" target="_blank">TopLink</a>, <a href="http://www.eclipse.org/eclipselink/" target="_blank">EclipseLink</a> e assim por diante. Entre estes eu não usei ainda o eclipse link.</p>
<p>Agora então temos uma nova camada entre a aplicação e o banco de dados tentando tornar a aplicação cada vez mais independente de tecnologias de infraestrutura. Para o nosso exemplo vamos usar o TopLink que já vem com o Netbeans simplesmente porque o Hibernate requer que a aplicação seja gerenciada por um container, se a ideia fosse uma aplicação web isso seria mais fácil, mas vou usar aqui uma aplicação desktop.</p>
<p>Vamos começar então criando um projeto Java no Netbeans. Escolha Java e Aplicação Java como na figura a seguir.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/1.jpg"><img class="aligncenter size-medium wp-image-453" title="Iniciando um projeto no Netbeans" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/1-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora precisamos dar um nome ao projeto, sugiro TutorialJPA, uma coisa que o Netbeans sempre faz é perguntar se você quer criar uma classe main, pode desabilitar essa opção. E vamos escolher finalizar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/2.jpg"><img class="aligncenter size-medium wp-image-459" title="Nome do projeto" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/2-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora que temos um projeto para trabalhar fica tudo um pouco mais fácil. Para entender melhor o que vamos fazer, a ideia e criar uma aplicação que grave as informações de uma classe Livro no banco de dados. Então precisamos de uma entidade Livro, e vou usar os atributos título, autor, isbn e número de páginas. Para isso vamos criar um pacote java de nome &#8220;domain&#8221; para guardar todas as entidades do nosso pequeno sistema.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/3.jpg"><img class="aligncenter size-medium wp-image-461" title="Criando um pacote java" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/3-300x274.jpg" alt="" width="300" height="274" /></a></p>
<p>E em seguida indique o nome do pacote, domain.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/4.jpg"><img class="aligncenter size-medium wp-image-462" title="nome do pacote" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/4-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Certo, agora vamos criar a classe de entidade, para isso temos a opção criar nova classe de entidade que já considera que você vai usar as facilidades de JPA.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/5.jpg"><img class="aligncenter size-medium wp-image-465" title="criando uma classe de entidade" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/5-300x284.jpg" alt="" width="300" height="284" /></a></p>
<p>Agora precisamos escolher o nome da entidade, Livro.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/61.jpg"><img class="aligncenter size-medium wp-image-467" title="Classe de entidade Livro" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/61-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Note que usamos o tipo Long para o id dos objetos, além disso o Netbeans no diz que não tem uma unidade de persitência configurada, agora começa a mágica do negócio. Antes de criar essa unidade de persistência, vamos entender do que se trata, para que a nossa aplicação tenha tantas indepedências precisamos configurar em algum lugar onde está o banco, e que tipo de banco estamos usando. Isso é feito em um xml que fica embutido no projeto, se você quiser mudar alguma coisa do banco, basta mexer nesse xml sem compilar nada! Aqui escolhemos Toplink, damos um nome para referenciar dentro da aplicação e precisamos escolher também qual a conexão com o banco de dados. Além disso podemos escolher o comportamento do JPA, se deve criar; remover e criar, ou não tomar ações em relação as tabelas, sim! O JPA pode criar as tabelas para nós no banco de ddaos!</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/7.jpg"><img class="aligncenter size-medium wp-image-468" title="unidade de persistencia" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/7-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>Uma facilidade que o Netbeans nos oferece é criar a conexão durante este processo, é claro que se você já tiver conexões de banco de dados (até porque o Netbeans permite conectar no banco e executar comandos SQL) você pode simplesmente escolher. É claro que aqui eu vou mostrar como criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/8.jpg"><img class="aligncenter size-medium wp-image-469" title="conexao com o banco" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/8-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>E agora configurar a conexão, colocando driver, endereço, nome do banco de dados, login e senha, escolhi também para lembrar a senha.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/9.jpg"><img class="aligncenter size-medium wp-image-470" title="configuracao de conexao de banco" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/9-300x247.jpg" alt="" width="300" height="247" /></a></p>
<p>Terminando esse processo voltamos para a tela de criação da unidade de persistência e clicamos em criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/11.jpg"><img class="aligncenter size-medium wp-image-471" title="conexao criada" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/11-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>O resultado é uma tela que nos permite visualizar de forma amigável o conteúdo do arquivo xml.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/12.jpg"><img class="aligncenter size-medium wp-image-472" title="visualizando o pu" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/12-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Agora vamos retomar nossa classe de Entidade, é claro que se fossemos criar várias classes de entidade, apenas na primeira vez seria necessário. Bom podemos ver que a classe Livro foi criada apenas com o atributo id, e vamos colocar agora 4 novos atributos que estão marcados na figura a seguir.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/13.jpg"><img class="aligncenter size-medium wp-image-475" title="atributos da classe livro" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/13-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Pela especificação de java beans (já bem antiga) devemos criar os métodos acessores (get/set) para esses atributos, mas calma! O Netbeans ajuda a gente nisso. Para isso vamos clicar com o botão direito do lado de qualquer um dos atributos e aparecerá um menu no qual vamos escolher Refatorar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/14.jpg"><img class="aligncenter size-medium wp-image-476" title="refatorar" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/14-153x300.jpg" alt="" width="153" height="300" /></a></p>
<p>Depois disso aparecerá outro menu no qual vamos escolher Encapsular Campos.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/15.jpg"><img class="aligncenter size-medium wp-image-477" title="encapsular campos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/15-204x300.jpg" alt="" width="204" height="300" /></a></p>
<p>Com isso aparecerá uma nova tela na qual vamos escolher quais campos (atributos) queremos encapsular. Vamos escolher os quatro atributos que acabamos de criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/16.jpg"><img class="aligncenter size-medium wp-image-478" title="escolher os atributos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/16-300x192.jpg" alt="" width="300" height="192" /></a></p>
<p>Agora temos um detalhe, quando a classe foi criada o Netbeans gerou para a gente automanticamente dois métodos importantes o equals e o hashCode, esses métodos são fundamentais para conseguir comparar corretamente dois objetos, só que como criamos atributos novos precisamos recriar esses métodos, e novamente vamos ter uma ajuda. Podemos remover os métodos gerados.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/17.jpg"><img class="aligncenter size-medium wp-image-480" title="equals e hashCode original" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/17-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Agora podemos recriar os métodos clicando novamente com o botão direito na tela, dentro da classe e escolhendo inserir código.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/18.jpg"><img class="aligncenter size-medium wp-image-481" title="inserir codigo" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/18-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>E uma nova janela aparece onde escolhemos equals e hashCode.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/19.jpg"><img class="aligncenter size-full wp-image-482" title="equals e hashCode" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/19.jpg" alt="" width="153" height="134" /></a></p>
<p>Agora, surgirá uma nova tela onde podemos escolher os atributos que serão usados para comparar dois objetos.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/21.jpg"><img class="aligncenter size-medium wp-image-483" title="escolha de atributos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/21-300x190.jpg" alt="" width="300" height="190" /></a></p>
<p>Antes de continuar, vamos dar uma pausa para uma outra configuração, precisamos importar para o nosso projeto a biblioteca do MySQL, como esse passo é bem simples é um bom momento para descansar a cabeça <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Então agora vamos clicar com o botão direito sobre o projeto e vamos escolher propriedades.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/30.jpg"><img class="aligncenter size-medium wp-image-484" title="propriedades do projeto" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/30-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Isso nos abre uma outra tela na qual vamos escolher a opção bibliotecas. E agora vamos escolher adicionar bibliotecas.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/31.jpg"><img class="aligncenter size-medium wp-image-485" title="escolher bibliotecas 1" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/31-300x234.jpg" alt="" width="300" height="234" /></a></p>
<p>Com isso vai aparecer a opção para escolhermos quais as bibliotecas queremos adicionar, neste caso a do MySQL.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/32.jpg"><img class="aligncenter size-medium wp-image-486" title="biblioteca do mysql" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/32-261x300.jpg" alt="" width="261" height="300" /></a></p>
<p>Fim dos comerciais, agora podemos voltar ao nosso projeto. Vamos agora criar um pacote java chamado app onde ficará nossa classe de &#8220;aplicação&#8221; que vai representar o que seria uma interface gráfica por exemplo. Isso já está explicado aí em cima né ? Então vamos seguir para criar uma classe Java tradicional.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/231.jpg"><img class="aligncenter size-medium wp-image-488" title="classe de aplicacao" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/231-283x300.jpg" alt="" width="283" height="300" /></a></p>
<p>E basta agora dar o nome de Aplicacao e colocar a classe no pacote app. Vamos deixar essa classe em banho-maria por enquanto. Vamos seguir agora para uma outra parte mágica do JPA, o Netbeans permite criar um tipo de classe chamado JPAController, aplicando o padrão de projetos Controller, ele permite fazer a ponte entre a classe de entidade e o banco de dados efetivamente. Quando criada, está classe já vem com as operações básicas, e que muitas vezes são suficientes para alguns cadastros. Algumas vezes o tipo de recurso que queremos criar não está disponível no menu, basta ir até &#8220;outros&#8221;.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/24.jpg"><img class="aligncenter size-medium wp-image-489" title="outras classes" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/24-234x300.jpg" alt="" width="234" height="300" /></a></p>
<p>E em seguida escolher em persistência, JPAController.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/25.jpg"><img class="aligncenter size-medium wp-image-490" title="jpacontroller" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/25-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora uma nova tela surgirá para que escolhamos para qual Entidade vamos criar o JPAController, sim, para cada entidade teremos um controller diferente.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/26.jpg"><img class="aligncenter size-medium wp-image-491" title="escolha de entidade" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/26-300x203.jpg" alt="" width="300" height="203" /></a></p>
<p>Em nosso projeto só existe uma entidade, e portanto fica fácil de escolher, basta clicar na classe domain.Livro e clicar em adicionar, depois vamos para a próxima tela onde vamos escolher em que pacote as classes vão ser criadas.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/28.jpg"><img class="aligncenter size-medium wp-image-492" title="pacote do jpa" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/28-300x191.jpg" alt="" width="300" height="191" /></a></p>
<p>Neste momento estamos com toda a infraestrutura do nosso projeto criada e podemos retomar a nossa classe de aplicação que vai utilizar todos esses mecanismos. Para conferir a estrutura e as classes criadas segue a próxima figura.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/29.jpg"><img class="aligncenter size-medium wp-image-493" title="classes criadas" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/29-237x300.jpg" alt="" width="237" height="300" /></a></p>
<p>Agora retomando nossa classe de aplicação, o que queremos fazer com um banco de dados ? Persistir os dados de nossa aplicação! Então precisamos criar objetos, preencher os valores, criar uma instância de JPAController e chamar os métodos para realizar as ações desejadas. Nesta figura temos todos os usos das chamadas, criar, buscar, editar e remover. Esse código precisa ser colocado no método main da nossa classe Aplicacao.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/34.jpg"><img class="aligncenter size-medium wp-image-494" title="codigo" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/34-300x164.jpg" alt="" width="300" height="164" /></a></p>
<p>É isso, é claro que até aqui só temos o suficiente para criar um pequeno projeto, mas podemos ampliar os estudos com alguns livros importantes, mais para frente vou colocar aqui umas resenhas de livros importantes para esse tópico.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Tipos Abstratos de Dados</title>
		<link>http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/</link>
		<comments>http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 20:17:38 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[OBJETOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/</guid>
		<description><![CDATA[Conforme a demanda do usuÃ¡rio por sistemas maiores e mais complexos aumenta, fica evidente a necessidade que temos de mecanismos para expressar conceitos do mundo real. Nas primeiras linguagens de programaÃ§Ã£o sÃ³ era possÃ­vel utilizar variÃ¡veis de tipos primitivos tais como nÃºmeros inteiros ou reais, e estruturar informaÃ§Ã£o em vetores, para a realizaÃ§Ã£o de cÃ¡lculos [...]]]></description>
			<content:encoded><![CDATA[<p>Conforme a demanda do usuÃ¡rio por sistemas maiores e mais complexos aumenta, fica evidente a necessidade que temos de mecanismos para expressar conceitos do mundo real. Nas primeiras linguagens de programaÃ§Ã£o sÃ³ era possÃ­vel utilizar variÃ¡veis de tipos primitivos tais como nÃºmeros inteiros ou reais, e estruturar informaÃ§Ã£o em vetores, para a realizaÃ§Ã£o de cÃ¡lculos essa Ã© uma forma suficiente de representaÃ§Ã£o de informaÃ§Ã£o. Com o aumenta da complexidade uma das alternativas era utilizar um conjunto de vetores de tipos diferentes onde cada Ã­ndice representaria a referÃªncia entre todos eles &#8220;compondo&#8221; assim um conceito mais complexo.</p>
<p>Atualmente contamos com mecanismos mais adequados para esse tipo de representaÃ§Ã£o, as linguagens estruturadas oferecem uma forma de compor novos tipos, criados pelo usuÃ¡rio, utilizando os tipos primitivos e/ou outros tipos do usuÃ¡rio. Na linguagem C esse mecanismo Ã© o struct, que cria uma &#8220;estrutura&#8221; composta de outras variÃ¡veis, assim podemos criar um struct categoria composta de um inteiro cÃ³digo e um vetor de caracteres nome. Chamamos esses novos tipos definidos pelo usuÃ¡rio de Tipos Abstratos de Dados porque estÃ£o relacionados a conceitos mais abstratos do que os conceitos primitivos oferecidos pela prÃ³pria linguagem de programaÃ§Ã£o. Nas linguagens orientadas a objetos utilizamos classes para representar os conceitos que modelamos para o sistema entÃ£o as classes sÃ£o as definiÃ§Ãµes dos Tipos Abstratos de Dados.</p>
<p>A relaÃ§Ã£o com o conceito de &#8220;tipo&#8221; estÃ¡ no fato de que a partir da definiÃ§Ã£o criada pelo usuÃ¡rio podemos declarar variÃ¡veis que representarÃ£o durante o processamento os dados que queremos associar com as representaÃ§Ãµes que damos a modelagem do sistema.</p>
<p>No entanto existem diferenÃ§as importantes entre a forma de trabalhar com as linguagens estruturadas e as orientadas a objetos. Na orientaÃ§Ã£o a objetos alÃ©m de estruturar as variÃ¡veis que compÃµe o conceito (do mundo real) podemos incluir mÃ©todos para tratar essas variÃ¡veis e/ou para expor outros &#8220;comportamentos,&#8221; assim quando usamos um objeto (instÃ¢ncia da classe em tempo de execuÃ§Ã£o) ele pode executar certas funcionalidades ou serviÃ§os de acordo com as responsabilidades que se referem ao conceito no mundo real. Apenas para exemplificar, uma classe LancamentoMensal, nÃ£o deveria ter um mÃ©todo &#8220;imprimir&#8221; porque nÃ£o faz parte das responsabilidades associadas a esse conceito. Por outro lado esta classe poderia ter um mÃ©todo &#8220;calcularTotal.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Programação Orientada a Objetos</title>
		<link>http://www.paulomotta.pro.br/2009/08/24/programacao-orientada-a-objetos/</link>
		<comments>http://www.paulomotta.pro.br/2009/08/24/programacao-orientada-a-objetos/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 20:38:06 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[OBJETOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/2009/08/24/programacao-orientada-a-objetos/</guid>
		<description><![CDATA[Uma das caracterÃ­sticas mais interessantes da ciÃªncia da computaÃ§Ã£o (ou informÃ¡tica, depende do gosto do leitor) Ã© a constante e rÃ¡pida evoluÃ§Ã£o. Isso Ã© uma caracterÃ­stica da Ã¡rea atÃ© porque suas evoluÃ§Ãµes permitem suportar pesquisas em outras Ã¡reas. E quando paramos para pensar sobre isso uma das coisas que nos vem a mente Ã©, mas [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das caracterÃ­sticas mais interessantes da ciÃªncia da computaÃ§Ã£o (ou informÃ¡tica, depende do gosto do leitor) Ã© a constante e rÃ¡pida evoluÃ§Ã£o. Isso Ã© uma caracterÃ­stica da Ã¡rea atÃ© porque suas evoluÃ§Ãµes permitem suportar pesquisas em outras Ã¡reas. E quando paramos para pensar sobre isso uma das coisas que nos vem a mente Ã©, mas o que Ã© que move essas pesquisas, essas evoluÃ§Ãµes?</p>
<p>Bom, existem vÃ¡rias respostas para essa pergunta, mas com certeza a mais interessante Ã© a que diz respeito a demanda do usuÃ¡rio. NÃ£o vou falar sobre como surge a demanda do usuÃ¡rio por sistemas propriamente, mas Ã© entender que em algum momento o usuÃ¡rio percebe um interesse por um sistema. AtÃ© aÃ­ tudo bem, o &#8220;problema&#8221; comeÃ§a na verdade quando o usuÃ¡rio comeÃ§a a aumentar a lista de necessidades, porque do ponto de vista puramente abstrato (caracterÃ­stica do software) tudo Ã© possÃ­vel fazer, porÃ©m quando tentamos &#8220;concretizar&#8221; a necessidade do usuÃ¡rio em software essa tarefa em alguns casos se torna mais difÃ­cil do que deveria ser. Isso acontece porque quando vamos ampliando os horizontes dos sistemas vamos chegando aos limites que as nossas tÃ©cnicas comportam. Um dos limites mais importantes Ã© o de gerenciar abstraÃ§Ãµes de mais alto nÃ­vel, ou seja, quando chegamos nas fronteiras do desenvolvimento de sistemas nÃ£o conseguimos mais gerenciar adequadamente as abstraÃ§Ãµes necessÃ¡rias para desenvolver os sistemas que atendem as novas demandas dos usuÃ¡rios.</p>
<p>Isso acontece e fica claro quando pensamos na programaÃ§Ã£o estruturada de forma comparada com a programaÃ§Ã£o orientada a objetos. Essas duas formas de visÃ£o (ou <em>paradigmas</em>) nÃ£o sÃ£o contrÃ¡rias entre si, apenas fornecem mÃ©todos de modelagem diferentes. Costumo dizer que a mudanÃ§a estÃ¡ no foco, enquanto a programaÃ§Ã£o estruturada trabalha com o foco nas funÃ§Ãµes do sistema, a programaÃ§Ã£o orientada a objetos tem o foco nos dados, ou mais precisamente nos <a href="http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/" target="_blank"><em>tipos abstratos de dados</em></a> e isso Ã© uma diferenÃ§a fundamental.</p>
<p>O impacto dessa mudanÃ§a de foco estÃ¡ no fato de que fica mais fÃ¡cil de se comunicar com o usuÃ¡rio uma vez que estaremos trabalhando com as <em>entidades</em> ou conceitos que sÃ£o usados diariamente, sejam eles Produto, Compra, OrdemDeVenda, ItemDePedido, Fornecedor entre outras. Com isso gastamos (ou deverÃ­amos gastar) mais tempo com a anÃ¡lise, projetando um sistema mais coerente com as abstraÃ§Ãµes do prÃ³prio usuÃ¡rio e torna-se (ou deveria se tornar) possÃ­vel construir sistemas maiores, com uma complexidade menor. Na prÃ¡tica surge uma dificuldade diferente que Ã© conseguir lidar com um nÃ­vel maior de abstraÃ§Ã£o, mas isso se deve muito mais a falta de prÃ¡tica (e/ou vontade de realmente aprender a tÃ©cnica) do que a mudanÃ§a de foco em si.</p>
<p>Uma outra caracterÃ­stica importante e interessante Ã© o fato de que a programaÃ§Ã£o orientada a objetos <em>contÃ©m</em> a programaÃ§Ã£o estruturada, ao contrÃ¡rio do que as pessoas pensam que teram que simplesmente jogar tudo fora e aprender novamente. O ponto Ã© que agora nÃ£o dÃ¡ para ir sÃ³ aglutinando funÃ§Ãµes, o que gera as dependÃªncias, Ã© necessÃ¡rio pensar onde as coisas entram, de quem Ã© a <em>responsabilidade</em> por executar um certo cÃ³digo. Os mÃ©todos (o equivalente as funÃ§Ãµes) precisam fazer parte de uma classe, entÃ£o nÃ£o acontece (ou nÃ£o deveria acontecer) de termos uma classe Recibo com um mÃ©todo imprime porque o Recibo nÃ£o deveria mesmo conhecer o sistema de impressÃ£o, ao invÃ©s disso, essa classe fica responsÃ¡vel por aglutinar os dados de um Recibo de forma que seja mais claro e simples carregar essa informaÃ§Ã£o. Por outro lado a classe ServicoDeImpressao pode ter acesso a classe ModeloDeImpressao para preencher com os dados e executar a impressÃ£o propriamente dita. O que conseguimos com isso Ã© ter uma separaÃ§Ã£o clara entre classes de dados e classes de controle, alÃ©m disso, como efeito colateral, temos uma organizaÃ§Ã£o do sistema que nos permite achar de forma mais simples e Ã¡gil <em>onde</em> estÃ£o os cÃ³digos que realizam cada tarefa.</p>
<p>Ã‰ claro que junto com um novo paradigma vem um conjunto de novas formas de pensar o sistema, entÃ£o torna-se necessÃ¡rio aprender a fazer a anÃ¡lise de forma adequada para poder fornecer para o programador todas as informaÃ§Ãµes necessÃ¡rias Ã  construÃ§Ã£o do sistema. Enquanto na programaÃ§Ã£o estruturada quase sempre partÃ­amos diretamente para a codificaÃ§Ã£o, na programaÃ§Ã£o orientada a objetos Ã© muito difÃ­cil que essa abordagem funcione de forma satisfatÃ³ria porque Ã© necessÃ¡rio pensar onde as coisas vÃ£o se encaixar.</p>
<p>&#8220;Ah, mas se eu colocar em qualquer lugar e fizer a chamada nÃ£o vai funcionar?&#8221; Bem, a resposta Ã© sim, vai funcionar, sÃ³ que nÃ£o teremos nenhum benefÃ­cio de usar a orientaÃ§Ã£o a objetos se nÃ£o fizermos as coisas como devem ser feitas. Muitas vezes vemos nas empresas sistemas feitos em Java, C++ e C# que, embora usem linguagens orientadas a objetos, sÃ£o programados de forma estruturada. &#8220;Mas isso Ã© possÃ­vel?&#8221; Sim, o fato de usar uma linguagem orientada a objetos nÃ£o quer dizer que o seu sistema esteja orientado a objetos, de fato Ã© possÃ­vel atÃ© mesmo construir um sistema orientado a objetos com uma linguagem estruturada como C (sÃ³ que isso Ã© muito mais difÃ­cil.)</p>
<p>Isso nos leva a entender que os paradigmas estruturado e orietado a objetso sÃ£o apenas <em>formas</em> de trabalhar, o uso de uma linguagem que dÃ¡ <em>suporte</em> a um ou outro nÃ£o nos obriga a usÃ¡-lo. No entanto se estamos escolhendo trabalhar com uma linguagem que suporta o paradigma orientado a objetos (salvo situaÃ§Ãµe puramente de modismo) Ã© porque estamos interessados nos benefÃ­cios que esse paradigma pode nos oferecer, quando nÃ£o gastamos o tempo necessÃ¡rio para aplicar as tÃ©cnicas estamos jogando fora uma possibilidade de escrever sistemas mais claros e com maior durabilidade (considerando que o usuÃ¡rio tenha interesse no sistema durante um longo perÃ­odo.) Essencialmente, um sistema deveria durar o tempo suficiente para que o usuÃ¡rio perca o interesse ou a necessidade nos serviÃ§os prestados no sistema de forma que ele seja substitÃ­do. Enquanto o usuÃ¡rio nÃ£o precisar de um sistema novo, deveria ser possÃ­vel aplicar evoluÃ§Ãµes no sistema em uso, muitas vezes isso nÃ£o Ã© possÃ­vel porque devido ao uso incorreto das ferramentas o sistema tem tantas dependÃªncias entre mÃ³dulos que quebra. Nesse tipo de situaÃ§Ã£o o usuÃ¡rio ainda tem interesse no mesmo serviÃ§o, mas Ã© obrigado a trocar o sistemaÂ  por nÃ£o ser possÃ­vel mais evoluir e adaptar as dinÃ¢micas diÃ¡rias.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2009/08/24/programacao-orientada-a-objetos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

