<?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>Tecnoclasta &#187; Aula CPWJ</title>
	<atom:link href="http://www.tecnoclasta.com/category/cursos/aula-cpwj/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tecnoclasta.com</link>
	<description>Astronomia, Astronáutica e Detonando Tecnologia.</description>
	<lastBuildDate>Tue, 07 Feb 2012 23:27:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Documentos de Padrões Web em Português.</title>
		<link>http://www.tecnoclasta.com/2010/05/11/documentos-de-padroes-web-em-portugues/</link>
		<comments>http://www.tecnoclasta.com/2010/05/11/documentos-de-padroes-web-em-portugues/#comments</comments>
		<pubDate>Tue, 11 May 2010 19:31:18 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWA]]></category>
		<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/?p=4024</guid>
		<description><![CDATA[Esta é especial para meus alunos: acabou a desculpa para não seguir os padrões web à risca! Está disponível nesta página a lista completa dos principais documentos de padronização do W3C na nossa língua! Dois dos documentos que acho imprescindíveis estão lá: Especificação HTML 4.01 XHTML™ 1.0 The Extensible HyperText Markup Language (Segunda Edição), Uma [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2010%2F05%2F11%2Fdocumentos-de-padroes-web-em-portugues%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2010%2F05%2F11%2Fdocumentos-de-padroes-web-em-portugues%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Esta é especial para meus alunos: acabou a desculpa para não seguir os padrões web à risca!  Está disponível nesta página a lista completa dos principais documentos de padronização do W3C na nossa língua!<br />
Dois dos documentos que acho imprescindíveis estão lá:</p>
<ul>
<li><a hreflang="pt" href="http://desenaviegas.com/cover.html">Especificação <span style="color: #ff0000;">HTML 4.01</span></a></li>
<li><a hreflang="pt-br" href="http://www.maujor.com/w3c/xhtml10_2ed.html"><span style="color: #ff0000;">XHTML™ 1.0</span> The Extensible HyperText Markup Language (Segunda Edição), Uma reformulação do HTML 4 em XML 1.0</a></li>
</ul>
<div id="attachment_4025" class="wp-caption alignleft" style="width: 750px"><a href="http://www.tecnoclasta.com/wp-content/uploads/2010/05/Captura_de_tela-Portuguese-Translations-of-W3C-Documents-Google-Chrome.png"><img class="size-large wp-image-4025" title="Tradução dos Documentos do W3C" src="http://www.tecnoclasta.com/wp-content/uploads/2010/05/Captura_de_tela-Portuguese-Translations-of-W3C-Documents-Google-Chrome-740x607.png" alt="Tradução dos Documentos do W3C" width="740" height="607" /></a><p class="wp-caption-text">Tradução dos Documentos do W3C</p></div>
<p>Só faltou mesmo a <a href="http://www.w3.org/TR/1998/REC-CSS2-19980512/">especificação do CSS</a>.</p>
<p>Observe lá no documento que a vários deles foram traduzidos por Maurício Samy Silva, autor e editor do site <a href="http://wwwmaujor.com">Maujor.com</a> já indicado por aqui várias vezes.</p>
<p>Fuçando mais acabei encontrando também alguns documentos publicados pelo escritório brasileiro do W3C: <a href="http://www.w3c.br/divulgacao/">http://www.w3c.br/</a><a href="http://www.w3c.br/divulgacao/">divulgacao</a><a href="http://www.w3c.br/divulgacao/">/</a>. Neste encontramos um guia de referência CSS e outro HTML.</p>
<p>Espero que ajude os alunos com dificuldades em Inglês.</p>
<p>Fonte: http://revolucao.etc.br/archives/documentos-da-w3c-em-portugues<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2010/05/11/documentos-de-padroes-web-em-portugues/" rel="bookmark" title="11 de maio de 2010">Documentos de Padrões Web em Português.</a></li>
<li><a href="http://www.tecnoclasta.com/2007/06/10/novo-forum-tecnoclasta/" rel="bookmark" title="10 de junho de 2007">Novo Fórum Tecnoclasta.</a></li>
<li><a href="http://www.tecnoclasta.com/2011/04/13/novo-tema-no-tecnoclasta/" rel="bookmark" title="13 de abril de 2011">Novo Tema no Tecnoclasta ATUALIZADO: FALHOU!</a></li>
<li><a href="http://www.tecnoclasta.com/2007/06/11/segunda-aula-pagina-minima-xhtml/" rel="bookmark" title="11 de junho de 2007">Segunda Aula: Página mínima XHTML</a></li>
<li><a href="http://www.tecnoclasta.com/2007/11/09/primeira-avalicao-cpwj/" rel="bookmark" title="9 de novembro de 2007">Primeira Avalição CPWJ</a></li>
</ul>
<p><!-- Similar Posts took 13.213 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2010%2F05%2F11%2Fdocumentos-de-padroes-web-em-portugues%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2010/05/11/documentos-de-padroes-web-em-portugues/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Encerrando o Curso de Programação para Web em Java.</title>
		<link>http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/</link>
		<comments>http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 14:46:53 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/</guid>
		<description><![CDATA[Pois é senhores, esta é a última aula do curso de programação para Web em java. Quem chegou agora, o curso pode ser feito, basta fazer as aulas a partir da primeira aqui. Foram 5 meses de curso e nada menos que 21 mil acessos. Espero realmente que todos tenham aprendido alguma coisa, e pelo [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F13%2Fencerrando-o-curso-de-programacao-para-web-em-java%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F13%2Fencerrando-o-curso-de-programacao-para-web-em-java%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Pois é senhores, esta é a última aula do curso de programação para Web em java.</p>
<p>Quem chegou agora, o curso pode ser feito, basta fazer as aulas a partir da primeira <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">aqui. </a></p>
<p>Foram 5 meses de curso e nada menos que 21 mil acessos. Espero realmente que todos tenham aprendido alguma coisa, e pelo menos encontrado o caminho das pedras para aprender mais a respeito.</p>
<p>Eu pretendia aprofundar mais alguns assuntos, porém não estou com disponibilidade para produzir um material com a qualidade que desejo. Portanto, as aulas que prometi, (por exemplo CRUD), estarão engavetadas no momento.</p>
<p>Para continuarmos mantendo o contato estou preparando uma nova categoria de artigos, com dicas rápidas para programadores em geral. Devido a minha experiência Java e Asp.Net, estes serão assuntos constantes. Estou aceitando sugestões de dicas, ou de assuntos a serem tratados.</p>
<p>Estou preparando também um roteiro com material bibliográfico que utilizei para o desenvolvimento do curso.</p>
<p>Para aqueles que queiram deixar uma palavra final sobre curso, escrevam nos comentários deste artigo.</p>
<p><span style="text-decoration: line-through;">Quanto ao projeto de um curso nos moldes deste, mas sobre Asp.Net, estou estudando&#8230; ainda não é certeza. Existe interesse?</span></p>
<h1>Atualizando<a href="http://www.tecnoclasta.com/conteudo-especial-tecnoclasta/"><br />
</a></h1>
<p><a href="http://www.tecnoclasta.com/conteudo-especial-tecnoclasta/">O curso de Asp.net já foi publicado, procure aqui.</a><span style="text-decoration: line-through;"><br />
</span><br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/" rel="bookmark" title="13 de março de 2008">Encerrando o Curso de Programação para Web em Java.</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/" rel="bookmark" title="14 de fevereiro de 2008">Atraso na Aula do Curso Java e novidades</a></li>
<li><a href="http://www.tecnoclasta.com/2008/04/01/curso-gratuito-de-programacao-aspnet-com-video-aulas/" rel="bookmark" title="1 de abril de 2008">Curso Gratuito de Programação Asp.Net (com vídeo Aulas)</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/29/novas-video-aulas-de-programacao-para-web-desta-vez-aspnet/" rel="bookmark" title="29 de março de 2008">Novas (vídeo) aulas de Programação para Web: desta vez ASP.NET</a></li>
<li><a href="http://www.tecnoclasta.com/2008/05/07/aspnet-aulas-aula-5/" rel="bookmark" title="7 de maio de 2008">Asp.net Aulas | Aula 5: xHtml e Css</a></li>
</ul>
<p><!-- Similar Posts took 16.772 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F13%2Fencerrando-o-curso-de-programacao-para-web-em-java%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Aula 17: Hibernate e Camada Model</title>
		<link>http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/</link>
		<comments>http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 21:54:57 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima sétima aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ Depois que vimos uma aplicação funcionando, vamos agora detalhar cada parte do processo. Nosso estudo de caso será o sistema de busca, porém iremos incrementá-lo [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F07%2Faula-17-hibernate-e-camada-model%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F07%2Faula-17-hibernate-e-camada-model%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima sétima aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ</a></p>
<p>Depois que vimos uma aplicação funcionando, vamos agora detalhar cada parte do processo. Nosso estudo de caso será o sistema de busca, porém iremos incrementá-lo significativamente.</p>
<p>Esta aula está sendo postada com atraso, devido a problemas que tive para publicar o código java no WordPress. Depois de várias tentativas, decidi colocar os arquivos *.java e os *.xml em um diretório do servidor para que você possam baixar.</p>
<h5>Voltemos à aula</h5>
<p>Comecemos estudando a camada <strong>Model</strong>, ou modelo: O objetivo desta camada é definir as entidades envolvidas e as regras de negócio do programa. Em orientação a objeto, não nos preocupamos inicialmente com a interface do programa, mas sim de um modelo de representação das entidades que fazem parte do projeto. Uma abordagem pedagógica para atacar o problema é escrever de início um lista de requisitos do sistema, discutindo o que ele precisará ter:</p>
<ul>
<li>Permitir o usuário digitar uma palavra chave e obter uma lista de sites que possuem relação com a palavra digitada usando o motor de busca;</li>
<li>Permitir um usuário cadastrar um ou mais sites definindo uma lista limitada de palavras chaves relacionadas com seu site;</li>
<li>Permitir um administrador do sistema corrigir, adicionar ou eliminar algum site cadastrado no sistema;</li>
</ul>
<p>Esta será a lista de requisitos que usaremos no nosso exemplo. Para construir o modelo devemos olhar esta lista e identificar as entidades necessárias. Uma abordagem é olhar os substantivos. Estes serão entidades candidatas:</p>
<p>usuário, palavra chave, lista de sites, site, lista de palavras chaves, administrador, sistema de busca, cadastro Esta é uma lista preliminar, já eliminando repetições. O passo seguinte é separar o que é atributo, do que é classe, ficando somente as classes:</p>
<ul>
<li>Usuário (administrador é um tipo de usuário especial)</li>
<li>Site (Lista de palavras chave é um atributo do site. Lista de Sites é uma coleção de sites)</li>
<li>Motor de busca</li>
<li>Cadastro de Sites</li>
</ul>
<p>Depois disso iremos definir quais atributos são importantes para estas classes funcionarem de acordo com os requisitos.</p>
<ul>
<li>Usuário: Id, Nome, Apelido, Senha, Email, Nível</li>
<li>Site: Id, Nome, Descrição, Url, KeyWords, Responsável (pelo cadastro)</li>
<li>Motor de Busca: Resultado da Busca, KeyWords (a serem encontrados)</li>
<li>Cadastro de Sites: Usuário responsável</li>
</ul>
<p>Implementamos então as classes de modo que sejam manipuláveis pelo Hibernate. Este framework é responsável pela persistência, isso é, pelo armazenamento dos objetos criados na memória, para o banco de dados relacional. As regras para que as classes sejam manipuláveis pelo Hibernate são os seguintes:</p>
<ul>
<li>A classe deverá ser um Java Bean definindo os atributos como dados privados e com funções públicas Getters e Setters. (veja em wikipedia as regras de uma classe Java Bean);</li>
<li>A classe deverá ter um construtor sem parâmetros para permitir o Hibernate criar objetos;</li>
<li>Deve possuir uma chave primária: isso é um campo id que armazenará um valor único que será gerado pelo Hibernate. A funcão setID() é privada, pois somente o Hibernate deverá modificar o campo chave.</li>
<li>A classe Motor de Busca e cadastro de Site não será persistido. Já que não é necessário a manutenção da busca realizada entre as chamadas.</li>
</ul>
<p>No nosso exemplo teremos uma nova classe Usuario:</p>
<p><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/usuario1.java" title="Usuario.class">Usuario.class</a><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/Usuario.class"></a></p>
<p>Observe no código que criei uma propriedade &#8220;sites&#8221; com um HashSet. Esta propriedade irá auxiliar durante a manutenção dos sites que um usuário possui.</p>
<pre>
private Set sites = new HashSet();</pre>
<p>E criamos o arquivo Usuario.hbm.xml na pasta sbusca. Este arquivo indica ao Hibernate o funcionamento da persistência da classe Usuário criada:</p>
<p><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/usuariohbm1.xml" title="Usuario.hbm.xml">Usuario.hbm.xml</a><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/Usuario.hbm.xml"></a></p>
<p>Além disso devemos incluir ao arquivo hibernate.cfg.xml:</p>
<p>&lt;mapping resource=&#8221;sbusca/Usuario.hbm.xml&#8221;&gt; &lt;/mapping&gt;</p>
<p>Após todas estas codificações teremos duas entidades: Usuário e Sites. Além delas vamos definir uma classe chamada MotorBusca, que fará a lógica mais importante do sistema, isto é, a busca em si. Não é nada complicado e seria possível fazer o código diretamente nos Actions do Struts, mas vamos abusar um pouco de orientação a objeto. Olhando este exemplo simples quem sabe em um trabalho mais complexo você não se intimide. A classe deverá ter: MotorBusca:</p>
<ul>
<li>Propriedade keyword: String e método executar() com e sem parâmetro;</li>
</ul>
<p>E o código da classe ficará:</p>
<p><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/motorbusca1.java" title="MotorBusca.java">MotorBusca.java</a><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/MotorBusca.class"></a></p>
<p class="western">Já definimos nesta aula um modelo quase completo para o nosso sistema. Deixei para depois somente o Cadastro de Sites, pois para implementá-lo será necessário falarmos de um CRUD, também conhecida como tela de Cadastro. Iremos ter uma aula somente sobre isso, quando voltaremos para tornar completo o modelo.</p>
<p>Para que você possa verificar se a busca está funcionando, criei uma classe simples de teste:</p>
<p><a href="http://www.tecnoclasta.com/wp-content/uploads/2008/03/testebusca1.java" title="TesteBusca.java">TesteBusca.java</a><a href="http://www.tecnoclasta.com/wp-admin/"></a></p>
<p>Por hoje é só.</p>
<p>Dúvidas? vá para o <a href="http://www.tecnoclasta.com/forum">fórum</a><br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/" rel="bookmark" title="7 de março de 2008">Aula 17: Hibernate e Camada Model</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/" rel="bookmark" title="25 de fevereiro de 2008">Aula 16: Sistema de busca última parte: Jsp e Struts</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/" rel="bookmark" title="14 de fevereiro de 2008">Aula 14: O modelo MVC</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/" rel="bookmark" title="1 de outubro de 2007">Curso Gratuito de Programação para Web em Java</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/" rel="bookmark" title="19 de fevereiro de 2008">Aula 15: Oracle e Hibernate, fazendo uma busca</a></li>
</ul>
<p><!-- Similar Posts took 50.866 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F03%2F07%2Faula-17-hibernate-e-camada-model%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aula 16: Sistema de busca última parte: Jsp e Struts</title>
		<link>http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/</link>
		<comments>http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 18:27:07 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima sexta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ Na última aula começamos a construir o sistema de busca. Configuramos o Hibernate para uso com o Netbeans. Esta primeira aplicação é para verem tudo [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F25%2Faula-16-sistema-de-busca-ultima-parte-jsp-e-struts%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F25%2Faula-16-sistema-de-busca-ultima-parte-jsp-e-struts%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima sexta aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ</a></p>
<p>Na última aula começamos a construir o sistema de busca. Configuramos o Hibernate para uso com o Netbeans. Esta primeira aplicação é para verem tudo funcionando junto. Depois irei destrinchar com detalhes cada parte do processo.</p>
<h3>Camada Model</h3>
<p>Hoje vamos terminar o sistema começando com a camada Model. A camada Model representa as entidades lógicas que precisamos para construir nossa aplicação. Para o funcionamento correto teremos a classe Sites, representando os sites armazenados no sistema, (isso já está pronto) e teremos também a classe MaquinaDeBusca.</p>
<p>A classe MaquinaDeBusca fará o trabalho pesado permitindo buscar uma lista de Sites de acordo com a palavra chave. Na verdade a classe de teste da última aula tem tudo que precisamos: A função &#8220;List buscaSites(String keyword)&#8221; realiza a busca dos itens com palavra chave igual ao parâmetro e devolve uma lista com os objetos que atendem a busca.</p>
<h3>Camada View</h3>
<p>A segunda camada que iremos trabalhar é a camada View. Vamos começar criando uma página JSP que apresenta um formulário para o preenchimento do usuário. Escolha &#8220;File/New File&#8221; no menu do Netbeans. Na janela &#8220;New File&#8221; selecione categoria &#8220;Web&#8221; tipo de arquivo &#8220;JSP&#8221; e clique em &#8220;Next&#8221;. Chame a página de &#8220;busca&#8221; e clique em &#8220;Finish&#8221;.</p>
<p>Para o formulário faremos algo bem simples:</p>
<pre name="code" class="xhtml">
&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;title&gt;Sistema de Busca&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;form action="buscar.do"&gt;
    &lt;input name="buscar"/&gt;
    &lt;input type="submit" value="Buscar"/&gt;
  &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Veja que o formulário chama a ação &#8220;buscar.do&#8221;. O que será esta ação definiremos pelo framework Struts. Já vamos chegar lá. Vamos também criar um página chamada resultado.jsp que permitirá ver a lista de Sites encontrados. Para funcionar vamos supor que temos uma variável de requisição com o resultado da busca:</p>
<pre name="code" class="xhtml">
&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%&gt;
&lt;%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%&gt;
&lt;%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;title&gt;Sistema de Busca&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;form action="buscar.do"&gt;
    &lt;input name="buscar"/&gt;
    &lt;input type="submit" value="Buscar"/&gt;
  &lt;/form&gt;
  &lt;logic:empty name="sites" &gt;
    &lt;h5&gt;Nenhum Ítem Encontrado&lt;/h5&gt;
  &lt;/logic:empty&gt;
  &lt;logic:notEmpty name="sites"&gt;
    &lt;table border='1'&gt;
      &lt;tr&gt;
      &lt;th&gt;Nome&lt;/th&gt;
      &lt;th&gt;Descrição&lt;/th&gt;
      &lt;th&gt;Url&lt;/th&gt;
      &lt;th&gt;Palavras Chave&lt;/th&gt;
      &lt;/tr&gt;
      &lt;logic:iterate name="sites" id="site"&gt;
        &lt;tr&gt;
        &lt;td&gt;${site.nome}&lt;/td&gt;
        &lt;td&gt;${site.descricao}&lt;/td&gt;
        &lt;td&gt;${site.url}&lt;/td&gt;
        &lt;td&gt;${site.keyword}&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/logic:iterate&gt;
    &lt;/table&gt;
  &lt;/logic:notEmpty&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Os tags logic:empty e logic:iterate são bastante auto explicativos. São parte da biblioteca de componentes do Struts. Veja as linhas após o @page.</p>
<h3>Camada Control</h3>
<p>Agora só falta juntar todas as peças. Quem faz isso é a camada Control. E esta camada é implementada pelo framework Struts. Nós temos apenas que definir o que acontecerá em cada ação possível do usuário.</p>
<p>A única ação deste sistema que o usuário poderá executar é clicar em buscar no formulário de busca. Então vamos gerar um Ação Struts para tratar este evento.</p>
<p>Escolha novamente &#8220;File/New File&#8221; no menu do Netbeans e na janela &#8220;New File&#8221; escolha categoria &#8220;Struts&#8221;, tipo de arquivo &#8220;Struts Actions&#8221;. Clique em &#8220;Next&#8221; e digite o nome do Action como &#8220;buscarAction&#8221;, o package como &#8220;sbusca&#8221; e o action Path para &#8220;/buscar&#8221;. Clique em &#8220;Next&#8221; e desligue a opção &#8220;Use ActionForm Bean&#8221;. Clique em Finish.</p>
<p>Modifique a função &#8220;Execute&#8221; para determinar o que acontecerá ao clicar o botão Buscar:</p>
<pre name="code" class="java">
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
  MaquinaDeBusca mdb=new MaquinaDeBusca(); //Prepara um objeto do modelo
  String busca= request.getParameter("buscar"); //recupera o que o usuario digitou na caixa de texto
  List sites=(ArrayList) mdb.buscaSites(busca); //Usa o modelo para obter os sites que batem com a palavra chave digitada pelo usuário
  request.setAttribute("sites", sites); //armazena os sites encontrados para que a camada view (resposta.jsp) mostre a lista de sites encontrados
  return mapping.findForward(SUCCESS); //passa a ação para o struts
}
</pre>
<p>(incluir &#8220;import java.util.*;&#8221; junto aos outros imports)</p>
<p>Falta muito pouco. Abra o arquivo struts-config.xml em WEB-INF na aba Project. Este arquivo está a configuração da amarração das ações com a views.</p>
<p>Modifique a linha &lt;action path=&#8221;/buscar&#8221; type=&#8221;sbusca.buscarAction&#8221;/&gt; para:</p>
<pre name="code" class="xhtml">
&lt;action path="/buscar" type="sbusca.buscarAction"&gt;
&lt;forward name="success" path="/resultado.jsp"/&gt;
&lt;/action&gt;
</pre>
<p>Isso fará com que ao final da Action &#8220;BuscarAction&#8221; a página de resposta que irá para o usuário será a &#8220;resultado.jsp&#8221;.</p>
<p>Aproveite e defina a página padrão modificando a linha &lt;action path=&#8221;/Welcome&#8221; forward=&#8221;/welcomeStruts.jsp&#8221;/&gt; para: &lt;action path=&#8221;/Welcome&#8221; forward=&#8221;/busca.jsp&#8221;/&gt;</p>
<p>Pronto, basta executar a aplicação e terá o sistema funcionando! (tecla F6 ou menu Run/Run Main Project)</p>
<p>Sei que vão pintar milhares de dúvidas, porém estou aqui para esclarecer. (<a href="http://www.tecnoclasta.com/forum">no fórum</a>).</p>
<p>Na próxima aula vamos detalhar cada parte do processo, começando com um longo artigo sobre a camada Model.<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/" rel="bookmark" title="25 de fevereiro de 2008">Aula 16: Sistema de busca última parte: Jsp e Struts</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/" rel="bookmark" title="14 de fevereiro de 2008">Aula 14: O modelo MVC</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/" rel="bookmark" title="7 de março de 2008">Aula 17: Hibernate e Camada Model</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/" rel="bookmark" title="19 de fevereiro de 2008">Aula 15: Oracle e Hibernate, fazendo uma busca</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/" rel="bookmark" title="1 de outubro de 2007">Curso Gratuito de Programação para Web em Java</a></li>
</ul>
<p><!-- Similar Posts took 54.071 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F25%2Faula-16-sistema-de-busca-ultima-parte-jsp-e-struts%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Aula 15: Oracle e Hibernate, fazendo uma busca</title>
		<link>http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/</link>
		<comments>http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 11:55:21 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima quinta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ Vamos construir uma aplicação de verdade usando Java e Web e o modelo MVC. Já sabemos lidar com java, xhtml e css e um pouco [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F19%2Faula-15-oracle-e-hibernate-fazendo-uma-busca%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F19%2Faula-15-oracle-e-hibernate-fazendo-uma-busca%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima quinta aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ</a></p>
<p>Vamos construir uma aplicação de verdade usando Java e Web e o modelo MVC. Já sabemos lidar com java, xhtml e css e um pouco de teoria sobre o MVC. Vamos colocar tudo pra funcionar?</p>
<p>Definindo o que será nosso primeiro programa: um sistema de busca. Vamos começar com um formulário simples com uma caixa de texto e um botão buscar, que quando clicado leva a outra página com a lista de sites com a palavra chave procurada.</p>
<p>Eu prometi que o conteúdo seria apresentado com o banco de dados mysql, porém tive uma seqüência de problemas com o hibernate mais mysql. Não quiz perder tempo com os detalhes. Eu não trabalho com o mysql, mas com o Oracle. Acredito que vocês possam encontrar material sobre o uso do mysql e hibernate, porém eu estou com pressa para publicar logo este material e como tenho experiência com Oracle é com ele mesmo que vou continuar. A forma de trabalho é a mesma, mudando apenas o xml de conexão com o banco.</p>
<p>Para uso do Oracle faça o download do Oracle 10g Express Edition em <a href="http://www.oracle.com/technology/software/products/database/index.html">http://www.oracle.com/technology/software/products/database/index.html</a>. É uma versão limitada mas de uso gratuíto. (Debian, Mandriva, Novell, Red Hat, Ubuntu e Windows compatíveis conforme o site Oracle).</p>
<p>Após o processo de instalação crie um usuário &#8220;sbusca&#8221; com senha &#8220;suasenha&#8221;.</p>
<p>É só o que você precisa na parte do banco de dados, o restante ficará por conta do Hibernate.</p>
<p>Para a configuração do ambiente do Netbeans 6.0, você precisa das seguintes arquivos de biblioteca:</p>
<ul>
<li>para conectar no banco:
<ul>
<li>classes12.jar</li>
</ul>
</li>
<li>para o Hibernate:
<ul>
<li>ant-antlr-1.6.5.jar</li>
<li>asm-attrs.jar</li>
<li>asm.jar</li>
<li>cglib-2.1.3.jar</li>
<li>commons-collections-2.1.1.jar</li>
<li>commons-logging-1.0.4.jar</li>
<li>dom4j-1.6.1.jar</li>
<li>ehcache-1.2.3.jar</li>
<li>hibernate3.jar</li>
<li>jta.jar</li>
</ul>
</li>
</ul>
<p>O classes12.jar  você encontra aqui mesmo<a title="jdbc Oracle" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/classes12.jar">:jdbc Oracle</a>. As bibliotecas do Hibernate você encontra no site do Hibernate em <a href="http://www.hibernate.org/6.html">http://www.hibernate.org/6.html</a>. A opção de download do Core é suficiente. (hibernate3.jar está na raiz do zip e os outros no diretório lib)</p>
<p>Reserve os arquivos indicados acima, somente eles, em um diretório qualquer de sua máquina.</p>
<p>Abra agora o Netbeans e vamos começar a fazer a mágica. Após o processo de carga escolha o opção File/New Project&#8230;</p>
<p>Escolha a Categoria Web e o tipo de projeto Web Application conforme a figura abaixo:<br />
<a title="Novo Projeto" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newproject.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newproject.thumbnail.jpg" alt="Novo Projeto" /></a></p>
<p>Clique em Next e digite o nome do projeto e se quiser escolha outra localização para a pasta do projeto. O restante pode deixar como indicado na tela:<br />
<a title="Novo Projeto (2)" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/new-web-application.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/new-web-application.thumbnail.jpg" alt="Novo Projeto (2)" /></a></p>
<p>Clique em Next e ative a biblioteca do Struts conforme a figura:<br />
<a title="Novo Projeto (3)" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newwebapplication1.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newwebapplication1.thumbnail.jpg" alt="Novo Projeto (3)" /></a></p>
<p>Clicando em Finish o projeto estará criado.</p>
<p>Vamos instalar as bibliotecas hibernate e do oracle para uso no nosso projeto. Na aba Projects use o botão direito sobre o nome do projeto (sbusca) e clique em properties. Na janela &#8220;Project Properties &#8211; sbusca&#8221; clique em libraries nas Categorias e no botão &#8220;Add JAR/Folder&#8221;. Selecione todos os arquivos do diretório que você colocou os arquivos jar e confirme clicando em &#8220;OK&#8221;.</p>
<p>Criado o projeto e definido as bibliotecas que vamos utilizar, o próximo passo é o Hibernate. Esta biblioteca auxilia no acesso ao Banco de Dados. Implementa a persistência aos objetos, fazendo a ponte objeto/relacional.</p>
<p>Vamos configurar o Hibernate para conexão com o Oracle. Para isso vamos escrever um arquivo de configuração XML. Clique com o botão direito do mouse sobre &#8220;Source Package&#8221; na aba do projeto e escolha a opção &#8220;New/ XML Document&#8221;. Digite o nome do arquivo como &#8220;hibernate.cfg.xml&#8221; (xml é automaticamente preenchido digite somente hibernate.cfg). Clique em &#8220;Next&#8221; e &#8220;Finish&#8221;.</p>
<p>Digite ou copie o código de configuração da conexão com o Oracle: (sempre cuidado com as aspas em códigos fonte, o WordPress detona lembra-se?)</p>
<pre name="code" class="xml">&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE hibernate-configuration
PUBLIC   "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
&lt;hibernate-configuration&gt;
&lt;session-factory&gt;
&lt;!-- Database connection settings --&gt;
&lt;property name="connection.driver_class"&gt;oracle.jdbc.driver.OracleDriver&lt;/property&gt;
&lt;property name="connection.url"&gt;jdbc:oracle:thin:@10.89.9.6:1521:orabkl&lt;/property&gt;
&lt;property name="connection.username"&gt;SBUSCA&lt;/property&gt;
&lt;property name="connection.password"&gt;suasenha&lt;/property&gt;
&lt;!-- JDBC connection pool (use the built-in) --&gt;
&lt;property name="connection.pool_size"&gt;1&lt;/property&gt;
&lt;!-- SQL dialect --&gt;
&lt;!--property name="dialect"&gt;org.hibernate.dialect.HSQLDialect&lt;/property--&gt;
&lt;property name="dialect"&gt;org.hibernate.dialect.Oracle9Dialect&lt;/property&gt;
&lt;!-- Enable Hibernate's automatic session context management --&gt;
&lt;property name="current_session_context_class"&gt;thread&lt;/property&gt;
&lt;!-- Disable the second-level cache  --&gt;
&lt;property name="cache.provider_class"&gt;org.hibernate.cache.NoCacheProvider&lt;/property&gt;
&lt;!-- Echo all executed SQL to stdout --&gt;
&lt;property name="show_sql"&gt;true&lt;/property&gt;
&lt;!-- Drop and re-create the database schema on startup --&gt;
&lt;!-- Depois que executar uma vez a classe de teste elimine a linha seguinte. Esta linha provoca a exclusão de todas as tabelas e recriação.--&gt;
&lt;property name="hbm2ddl.auto"&gt;create&lt;/property&gt;
&lt;mapping resource="sbusca/Sites.hbm.xml"/&gt;
&lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;</pre>
<p>Para facilitar a codificação com o Hibernate vamos criar uma classe para a conexão e desconexão do banco de dados.  Clique com o botão direito do mouse sobre &#8220;Source Package&#8221; na aba do projeto e escolha a opção &#8220;New\java class&#8221;. Chame a classe de &#8220;HibernateUtil&#8221; e defina o package como &#8220;util&#8221;:</p>
<p><a title="HibernateUtil" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/hibernateutil1.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/hibernateutil1.thumbnail.jpg" alt="HibernateUtil" /></a></p>
<p>Clique em finish e copie o código da classe:</p>
<pre name="code" class="java">package util;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
  private static final SessionFactory sessionFactory;
  static {
    try {
      // Create the SessionFactory from hibernate.cfg.xml
      sessionFactory = new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
      // Make sure you log the exception, as it might be swallowed
      System.err.println("Initial SessionFactory creation failed." + ex);
      throw new ExceptionInInitializerError(ex);
    }
  }
  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}</pre>
<p>Com a biblioteca carregada e as configurações do hibernate certas, vamos codificar uma classe Sites para representar um dado persistente. Clique em File/New File e escolha Categoria &#8220;java&#8221; e &#8220;File Types&#8221; igual a &#8220;Java Class&#8221;:</p>
<p><a title="Nova Classe" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newfile0.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newfile0.thumbnail.jpg" alt="Nova Classe" /></a></p>
<p>Clique em &#8220;Next&#8221; e defina o nome da classe como Sites e o package como sbusca:</p>
<p><a title="Nova Classe (2)" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newjavaclass1.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/newjavaclass1.thumbnail.jpg" alt="Nova Classe (2)" /></a></p>
<p>Clicando em &#8220;Finish&#8221; o Netbeans irá abrir a página com o código da Classe. Complete o código da classe criando os campos necessários:</p>
<pre name="code" class="java">package sbusca;
public class Sites {
  private Long id;
  private String nome;
  private String url;
  private String descricao;
  private String keyword;
  public Sites() {}
  public Long getId() {
    return id;
  }
  private void setId(Long id) {
    this.id = id;
  }
  public String getNome() {
    return nome;
  }
  public void setNome(String nome) {
    this.nome = nome;
  }
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  public String getDescricao() {
    return descricao;
  }
  public void setDescricao(String descricao) {
    this.descricao = descricao;
  }
  public String getKeyword() {
    return keyword;
  }
  public void setKeyword(String keyword) {
    this.keyword = keyword;
  }
}</pre>
<p>Para o funcionamento perfeito do Hibernate são necessários alguns detalhes:</p>
<ul>
<li>Um campo Id para ser usado como campo chave automático;</li>
<li>Funções Get e Set públicos para manipulação dos dados privados;</li>
</ul>
<p>Após a criação da classe é necessário definir um arquivo de mapeamento Hibernate. Com o botão direito do mouse sobre &#8220;sbusca&#8221; em destaque na figura, escolha a opção &#8220;new&#8221; e &#8220;others&#8221;.<br />
<a title="Conectando Hibernate" href="http://www.tecnoclasta.com/wp-content/uploads/2008/02/hibernateconec.jpg"><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/hibernateconec.thumbnail.jpg" alt="Conectando Hibernate" /></a></p>
<p>Na janela &#8220;New File&#8221; escolha a categoria &#8220;XML&#8221; e &#8220;File Type&#8221; &#8220;Xml Document&#8221;. Clique em &#8220;Next&#8221; e defina o nome do arquivo como &#8220;Sites.hbm.xml&#8221; (a extensão xml é automaticamente inserida). Clique em &#8220;Next&#8221; e por fim em &#8220;Finish&#8221;. Copie o código abaixo para realizar a amarração:</p>
<pre name="code" class="xml">&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
&lt;hibernate-mapping&gt;
&lt;class name="sbusca.Sites" table="SITES"&gt;
&lt;id name="id" column="SITES_ID"&gt;
&lt;generator class="native"/&gt;
&lt;/id&gt;
&lt;property name="nome"/&gt;
&lt;property name="url"/&gt;
&lt;property name="descricao"/&gt;
&lt;property name="keyword"/&gt;
&lt;/class&gt;
&lt;/hibernate-mapping&gt;</pre>
<p>Para verificar se tudo funcionou até aqui, vamos criar uma classe para ver se o hibernate está conseguindo criar os registros: (espero que já saiba como criar a classe depois de eu repetir mais de uma vez a seqüencia de teclas!)</p>
<pre name="code" class="java">package sbusca;
import org.hibernate.Session;
import util.HibernateUtil;
public class MaquinaDeBusca {
  public static void main(String[] args) {
    MaquinaDeBusca mgr = new MaquinaDeBusca();
    mgr.createAndStoreEvent("Tecnoclasta","http://www.tecnoclasta.com","Detonanto Tecnologia","java, tecnologia, astronáutica, astronomia");
    mgr.createAndStoreEvent("Uol Universo On-line","<a href="http://www.uol.com.br/">http://www.uol.com.br/</a>","Universo On-line - O maior portal em língua portuguesa","portal, uol, sites, notícias");
    mgr.createAndStoreEvent("Portal Terra","<a href="http://www.terra.com.br/">http://www.terra.com.br/</a>","Qual a sua Terra","portal, terra, notícias, sites");
    mgr.createAndStoreEvent("Folha de São Paulo","<a href="http://www.folha.uol.com.br/">http://www.folha.uol.com.br/</a>","O Jornal com Credibilidade","jornal, folha, notícias");
    HibernateUtil.getSessionFactory().close();
  }
  private void createAndStoreEvent(String nome, String url, String descricao, String keyword) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Sites umSite = new Sites();
    umSite.setNome(nome);
    umSite.setDescricao(descricao);
    umSite.setUrl(url);
    umSite.setKeyword(keyword);
    session.save(umSite);
    session.getTransaction().commit();
  }
}</pre>
<p>Executando esta classe o NetBeans vai trabalhar um bocado, e no fim do processo tudo deverá funcionar. Veja você mesmo se foi criada a tabela e se os registros foram criados corretamente.</p>
<p>Observe que o hibernate elimina toda a necessidade de codificação em SQL. Isso facilita muito a manutenção e mesmo portar o sistema para um banco de dados diferente.</p>
<p>Um segundo teste do hibernate consiste em executar uma consulta. Mude a função main para esta, inclua uma nova função &#8220;buscaSites()&#8221; e execute a classe novamente:</p>
<pre name="code" class="java">public static void main(String[] args) {
  MaquinaDeBusca mgr = new MaquinaDeBusca();
  //String teste="store";
  String teste = "list";
  if (teste.equals("store")) {
    mgr.createAndStoreEvent("Tecnoclasta", "http://www.tecnoclasta.com", "Detonanto Tecnologia", "java, tecnologia, astronáutica, astronomia");
    mgr.createAndStoreEvent("Uol Universo On-line", "http://www.uol.com.br", "Universo On-line - O maior portal em língua portuguesa", "portal, uol, sites, notícias");
    mgr.createAndStoreEvent("Portal Terra", "http://www.terra.com.br", "Qual a sua Terra", "portal, terra, notícias, sites");
    mgr.createAndStoreEvent("Folha de São Paulo", "http://www.folha.uol.com.br", "O Jornal com Credibilidade", "jornal, folha, notícias");
  } else if (teste.equals("list")) {
    List sites = mgr.buscaSites("notícias");
    for (int i = 0; i &lt; sites.size(); i++) {
      Sites umSite = (Sites) sites.get(i);
      System.out.println("Site: " + umSite.getNome() +": " + umSite.getDescricao()+ ", Url:"+umSite.getUrl());
    }
  }
  HibernateUtil.getSessionFactory().close();
} //fim da função main
public List buscaSites(String keyword) {
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();
  List result = session.createQuery("from Sites where keyword like '"+ keyword+"'").list();
  session.getTransaction().commit();
  return result;
}</pre>
<p>Dando certo será listado os sites da Uol, Terra e Folha.</p>
<p>Pensei em fazer isso em uma aula só, porém está ficando muito, muito longo. Então fica aqui a primeira parte do sistema de busca. Na próxima aula terminamos.</p>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/" rel="bookmark" title="19 de fevereiro de 2008">Aula 15: Oracle e Hibernate, fazendo uma busca</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/" rel="bookmark" title="25 de fevereiro de 2008">Aula 16: Sistema de busca última parte: Jsp e Struts</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/" rel="bookmark" title="7 de março de 2008">Aula 17: Hibernate e Camada Model</a></li>
<li><a href="http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/" rel="bookmark" title="22 de janeiro de 2008">Aula 12: Coleções, Hashing e Comparadores</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/" rel="bookmark" title="4 de dezembro de 2007">Aula 9: Introdução a Java</a></li>
</ul>
<p><!-- Similar Posts took 27.143 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F19%2Faula-15-oracle-e-hibernate-fazendo-uma-busca%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Aula 14: O modelo MVC</title>
		<link>http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/</link>
		<comments>http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 10:54:40 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima quarta aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Até a última aula de HTML e CSS descobrimos como preparar uma página para publicação na Internet. Porém estas página preparadas assim tem um problema: [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Faula-14-o-modelo-mvc%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Faula-14-o-modelo-mvc%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima quarta aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.<br />
</a><br />
Até a última aula de HTML e CSS descobrimos como preparar uma página para publicação na Internet. Porém estas página preparadas assim tem um problema: são estáticas. Uma vez escritas e copiadas para o servidor, permanecerão exatamente iguais em todos os detalhes.</p>
<p>Com o conteúdo de Java aprendemos como construir programas. Vamos juntar as duas coisas agora.</p>
<p>JSP é uma sigla para Java Server Pages, e é uma tecnologia desenvolvida pela Sun para permitir o uso do Java para produzir páginas dinâmicas na Web. É utilizada em conjunto com classes Java com regras específicas para atendimento a requisições dos usuários. Estas classes são os Servlets.</p>
<h3>Revisando como funciona a Web</h3>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2008/02/revisaointernet.jpg" alt="" /></p>
<p>O cliente faz uma requisição através do navegador quando:</p>
<ul>
<li>Digita um endereço 	na barra de endereço e envia;</li>
<li>Clica em um botão 	de envio de um formulário;</li>
<li>Modifica um dado 	em um formulário com código javascript relacionado;</li>
</ul>
<p>Na ação do usuário esta requisição é enviada pela Internet (ou Intranet) até o servidor de Web e este faz uma série de ações:</p>
<ul>
<li>Interpreta a 	requisição</li>
<li>Procura na pasta 	root o arquivo HTML pedido</li>
<li>Envia o arquivo de 	volta ao navegador do cliente</li>
</ul>
<p>Por fim o navegador do cliente interpreta o código Html, css e &#8220;desenha&#8221; o resultado.</p>
<h3>Páginas dinâmicas</h3>
<p>Com as páginas dinâmicas a diferença está nas ações do servidor de WEB:</p>
<ul>
<li>Interpreta a 	requisição e detectando um pedido para página 	dinâmica:</li>
<li>Aciona uma classe 	Servlet</li>
<li>A classe Servlet 	interpreta qual ação foi requisitada e aciona as 	classes adequadas</li>
<li>Após a 	execução das ações, é chamada a 	página JSP para preparar a resposta visuais à 	requisição. As páginas JSP possuem código 	para produção de uma página HTML ad-roc, isto é 	sob demanda.</li>
<li>O Servidor envia 	para o navegador cliente a página de resposta gerada</li>
</ul>
<p>Observe que temos duas camadas de código para produção de uma página dinâmica: os Servlets e o JSP. Um modelo mais completo utiliza três camadas e é chamada MVC Model-View-Control. Vamos ver cada uma destas camadas:</p>
<h3>Model</h3>
<p>A camada Model (modelo) possui a representação das informações do programa. No nosso exemplo, esta camada irá implementar classes para representar as entidades envolvidas no programa. Por exemplo em um programa de frente de caixa, haveria classes para representar produtos, compras, notas fiscais, itens de notas fiscais, métodos de pagamento. Estas classes iriam também armazenar todas as ações que eventualmente o usuários necessitasse realizar sobre estas entidades. Normalmente as classes utilizam um sistema de banco de dados para fazer o armazenamento persistente. Utilizaremos a biblioteca Hibernate para facilitar a persistência dos dados. Iremos utilizar o banco de dados Mysql para os exemplos</p>
<h3>View</h3>
<p>A camada View (visão) é responsável por construir uma interface para interação do usuário. Ela prepara a apresentação da informação para que o usuário possa reagir as respostas e continuar utilizando o programa. Em Java utilizaremos páginas JSP com Jstl para produzir as páginas de resposta. Observe que a camada View não acessa diretamente o banco de dados, ela recebe normalmente objetos Collection geradas pelas classes da camada Model e produz código HMTL a partir deles.  Percebeu porque tivemos uma longa aula sobre coleções? (revise)</p>
<h3>Control</h3>
<p>A camada Control (controle) é a camada que controla o processo. Cada requisição do usuário é primeiro interpretado pela camada de controle que determina qual ação deve ser executada no modelo e encaminha depois a resposta do modelo para a camada de visão. No nosso exemplo quem irá fazer toda a camada de controle será o Struts.</p>
<p>Preparem-se, na próxima aula um sistema de busca completo será nosso primeiro programa!</p>
<h3>Arrumem suas máquinas:</h3>
<ul>
<li>Instalar <a href="http://www.netbeans.org/">Netbeans 	6</a></li>
<li>Instalar o <a href="http://www.mysql.com/">Mysql</a></li>
<li>Baixar o <a href="http://dev.mysql.com/downloads/connector/j/3.1.html">Driver 	jdbc do MySql</a></li>
<li>Baixar o <a href="http://www.hibernate.org/">Hibernate</a></li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/" rel="bookmark" title="14 de fevereiro de 2008">Aula 14: O modelo MVC</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/" rel="bookmark" title="25 de fevereiro de 2008">Aula 16: Sistema de busca última parte: Jsp e Struts</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/" rel="bookmark" title="7 de março de 2008">Aula 17: Hibernate e Camada Model</a></li>
<li><a href="http://www.tecnoclasta.com/2007/06/09/primeira-aula-web-como-funciona/" rel="bookmark" title="9 de junho de 2007">Primeira Aula: Web Como funciona.</a></li>
<li><a href="http://www.tecnoclasta.com/2008/04/01/curso-gratuito-de-programacao-aspnet-com-video-aulas/" rel="bookmark" title="1 de abril de 2008">Curso Gratuito de Programação Asp.Net (com vídeo Aulas)</a></li>
</ul>
<p><!-- Similar Posts took 17.042 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Faula-14-o-modelo-mvc%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Atraso na Aula do Curso Java e novidades</title>
		<link>http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/</link>
		<comments>http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 09:30:34 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Metadados]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/</guid>
		<description><![CDATA[Os alunos do curso de programação web em Java não precisam se preocupar, apesar do atraso desde terça-feira, pretendo publicar a primeira aula de JSP entre hoje e amanhã. O motivo do atraso é uma boa notícia para alguns: estou preparando um material também de Asp.NET. Uma mudança na grade curricular do curso que leciono [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Fatraso-na-aula-do-curso-java-e-novidades%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Fatraso-na-aula-do-curso-java-e-novidades%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Os alunos do curso de programação web em Java não precisam se preocupar, apesar do atraso desde terça-feira, pretendo publicar a primeira aula de JSP entre hoje e amanhã. O motivo do atraso é uma boa notícia para alguns: estou preparando um material também de Asp.NET.</p>
<p>Uma mudança na grade curricular do curso que leciono na faculdade me fez rever os conteúdos ministrados e estou sendo obrigado a acertar o material para os alunos presenciais. As aulas começaram nesta segunda-feira e está sendo uma correria.</p>
<p>Se houver interesse, após as aulas de Java, eu até poderia passar alguma coisa de Asp.NET. Se manifestem se houver interesse.<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/" rel="bookmark" title="14 de fevereiro de 2008">Atraso na Aula do Curso Java e novidades</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/18/o-curso-web-esta-indo-de-vento-em-popa/" rel="bookmark" title="18 de outubro de 2007">O Curso Web está indo de &#8220;Vento em Popa&#8221;</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/" rel="bookmark" title="13 de março de 2008">Encerrando o Curso de Programação para Web em Java.</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/29/novas-video-aulas-de-programacao-para-web-desta-vez-aspnet/" rel="bookmark" title="29 de março de 2008">Novas (vídeo) aulas de Programação para Web: desta vez ASP.NET</a></li>
<li><a href="http://www.tecnoclasta.com/2008/06/10/you-tube-com-baloes-e-novo-pedido-de-desculpas/" rel="bookmark" title="10 de junho de 2008">You Tube com Balões e novo pedido de desculpas</a></li>
</ul>
<p><!-- Similar Posts took 7.284 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F02%2F14%2Fatraso-na-aula-do-curso-java-e-novidades%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Aula 13: Exceções e tratamento de erros</title>
		<link>http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/</link>
		<comments>http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 01:20:04 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima terceira aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Hoje a aula é bem curta e semana que vem é carnaval e teremos folga. Aproveite para adiantar nas aulas e conseguir acompanhar o ritmo. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F29%2Faula-13-excecoes-e-tratamento-de-erros%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F29%2Faula-13-excecoes-e-tratamento-de-erros%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima terceira aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Hoje a aula é bem curta e semana que vem é carnaval e teremos folga. Aproveite para adiantar nas aulas e conseguir acompanhar o ritmo. Vamos falar de Exceções ou tratamento de erros em Java.</p>
<p>O sistema de exceções do Java é uma ferramenta para ajudar os programadores a reportar e manipular erros.</p>
<p>Sempre que uma função chamada em um programa puder gerar uma exceção o programador é obrigado a tomar uma ação. Esta ação pode ser a captura e tratamento do erro, ou simplesmente o lançamento do erro para outra função tratar. Vamos ver primeiro como tratar o erro:</p>
<h4>Exemplo de tratamento/captura de erro típico: (Exception Catch)</h4>
<pre name="code" class="java">public float dividir(int a, int b) {
  Float resultado;
  float r=0;
  try {  // Bloco try delimita a porção de código que pode apresentar erro
    resultado = new Float(a / b);
    r=resultado.floatValue(); //divisão executada armazena resultado
  } catch (ArithmeticException e) { //bloco catch trata o tipo de exceção indicado
    return 0; //divisão por zero
  } catch (Exception x) { //são permitidos vários blocos catch, um para cada tipo de exceção.
    //Exception é usada para qualquer tipo de exceção não específica encontrada
    //tratar aqui outros erros
  } finally { // é executada após o tratamento das exceções ou quando nenhuma exceção
    //é gerada normalmente quando é liberado os recursos usados na função
    resultado = null;
    System.out.println(r);
  }
  // após a execução das exceções ou de todo o bloco try, o fluxo prossegue deste ponto
  return r;
}</pre>
<h4>Lançamento de Exceções (Exception throwing)</h4>
<p>Neste caso a função lança exceções para a função chamadora, isso é, quem deverá capturar o erro e tratá-lo é uma função que usa esta função para funcionar. Em outras palavras, a função escrita não trata o erro, simplesmente avisa que o erro aconteceu e interrompe seu processamento.</p>
<p>Exemplo de lançamento de erro:</p>
<pre name="code" class="java">public class File {
  public File(String nomeArquivo) throws FileNotFoundException {
    ...
    if (arquivo não encontrado ) {
      throw new FileNotFoundException();
    }
  }
}</pre>
<p>&#8220;throws FileNotFoundException&#8221; na linha de declaração da função, indica que nesta função este tipo de exceção poderá ocorrer. Isso obriga o programador que usar esta função a tratar esta exceção (ou lançar para outro nível novamente).</p>
<p>&#8220;throws new FileNotFoundException();&#8221; indica que uma exceção foi detectada e avisa a máquina Java a respeito.</p>
<p>E por hoje é só.</p>
<h4>Na Seqüência</h4>
<ul>
<li>dia 5 de Fevereiro: Carnaval. (não esqueçam a camisinha moçada!)</li>
<li>dia 12 de Fevereiro: Introdução a Jsp.</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/" rel="bookmark" title="29 de janeiro de 2008">Aula 13: Exceções e tratamento de erros</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/" rel="bookmark" title="18 de dezembro de 2007">Aula 11: Classes, Interfaces e Polimorfismo</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/" rel="bookmark" title="1 de outubro de 2007">Curso Gratuito de Programação para Web em Java</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/25/aula-16-sistema-de-busca-ultima-parte-jsp-e-struts/" rel="bookmark" title="25 de fevereiro de 2008">Aula 16: Sistema de busca última parte: Jsp e Struts</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/" rel="bookmark" title="12 de dezembro de 2007">Aula 10: Java Essencial</a></li>
</ul>
<p><!-- Similar Posts took 26.158 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F29%2Faula-13-excecoes-e-tratamento-de-erros%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Aula 12: Coleções, Hashing e Comparadores</title>
		<link>http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/</link>
		<comments>http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 21:25:42 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima segunda aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Estamos retornando hoje das férias e continuando a todo vapor com o curso. A partir de hoje fique atento, que as aulas voltarão todas as [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F22%2Faula-12-colecoes-hashing-e-comparadores%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F22%2Faula-12-colecoes-hashing-e-comparadores%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima segunda aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Estamos retornando hoje das férias e continuando a todo vapor com o curso. A partir de hoje fique atento, que as aulas voltarão todas as terças-feiras. O conteúdo de Java está no final, logo iremos começar nossa primeira aplicação Web com JSP.</p>
<p>Hoje iremos aprender alguns conceitos e técnicas para trabalhar com coleções.</p>
<h4>Hashing</h4>
<p>Hashing é uma maneira de identificar objetos com um número inteiro. Coisas iguais tem (ou deveriam ter) o mesmo número hash. Isso é extremamente útil para realização de comparações mais rápidas.</p>
<p>Em classes escritas por você mesmo, para isso funcionar corretamente, você deve sobrescrever a função .hashCode() e gerar seu próprio número hash.</p>
<h4>A função .HashCode()</h4>
<p>Esta função deve retornar um número inteiro. É definida na classe java.lang.Object e retorna altomaticamente um valor único para cada instância (para cada objeto).</p>
<p>Se sua classe tem comportamento diferente deste, você deve sobrescrever esta função.</p>
<p>As três premissas da função .HashCode() são:</p>
<ul>
<li>O hashCode de um 	objeto não deve mudar se o valor de um objeto não 	mudar.</li>
<li>Dois objetos 	iguais DEVEM ter o mesmo hashCode</li>
<li>É desejável 	que dois objetos diferentes tenham hashCode distintos (sempre que 	isso for possível)</li>
</ul>
<h4>Exemplos de hashCode:</h4>
<pre name="code" class="java">String scott = "Scotty";
String scott2 = "Scotty";
String corey = "Corey";
System.out.println(scott.hashCode());
System.out.println(scott2.hashCode());
System.out.println(corey.hashCode());  // =&gt; -1823897190, -1823897190, 65295514
Integer int1 = 123456789;
Integer int2 = 123456789;
System.out.println(int1.hashCode());
System.out.println(int2.hashCode()); // =&gt; 123456789, 123456789</pre>
<h4>Classe NomeCompleto</h4>
<p>Para prosseguir iremos definir uma classe chamada NomeCompleto, que será utilizada nos exemplos do restante da aula:</p>
<pre name="code" class="java">public class NomeCompleto {
  public String nome;
  public String sobrenome;
  public NomeCompleto(String nome, String sobrenome) {
    this.nome = nome;
    this.sobrenome = sobrenome;
  }
  public String toString() {
    return nome + " " + sobrenome;
  }
  public boolean equals(Object o) {
    return (o instanceof NomeCompleto &amp;&amp;((NomeCompleto) o).nome.equals(this.nome) &amp;&amp;((NomeCompleto) o).sobrenome.equals(this.sobrenome));
  }
}</pre>
<p>Vamos verificar se esta classe NomeCompleto está funcionando corretamente:</p>
<pre name="code" class="java">NomeCompleto maria = new NomeCompleto("Maria", "Lúcia");
NomeCompleto jose = new NomeCompleto("José", "Silva");
NomeCompleto jose2 = new NomeCompleto("José", "Silva");
System.out.println(maria.equals(jose));
System.out.println(jose.equals(jose2));
System.out.println(maria.hashCode());
System.out.println(jose.hashCode());
System.out.println(jose2.hashCode()); // ⇒ false, true, 6718604, 7122755, 14718739</pre>
<p>Objetos são iguais, mas o hashCode não é. Precisamos arrumar esta classe.</p>
<p>Você não pretende usar a classe hashCode, portanto não precisa se preocupar com isso não é? ERRADO! Você precisa resolver isso porque irá ter problemas com listas e coleções. As classes que implementam as listas pressupõem que a função hashCode() funciona corretamente.</p>
<p>Aliás, estamos vendo hashCode no início desta aula, justamente para podermos usar listas na continuação, e lembrá-lo que antes de usar listas deve sobrescrever esta função.</p>
<p>O que deve fazer a função hashCode mesmo? Gerar um número inteiro único para objetos com conteúdo iguais, e diferentes para objetos de conteúdo diferente.</p>
<p>Possível implementação para o nosso exemplo:</p>
<pre name="code" class="java">public class NomeCompleto {
  ...
  public int hashCode() {
    return nome.hashCode() *23 + sobrenome.hashCode();
  }
}</pre>
<p>Veja que as classes String já implementam hashCode corretamente. Usamos &#8220;*23&#8243; para que José Maria seja diferente de Maria José. Faça testes e verifique que sem a multiplicação o hashCode gerado é o mesmo.</p>
<p>Tenha certeza que entendeu este tópico antes de prosseguir. Funções hashCode não implementadas ou com código errado irão provocar problemas estranhos no uso de coleções. Estes problemas poderão te deixar realmente confuso. Se tiver dúvidas nesta parte pergunte no fórum, ou nos comentários antes de continuar.</p>
<h4>Coleções</h4>
<p>Coleções são implementações da biblioteca java para executar:</p>
<ul>
<li>Coleções 	de objetos</li>
<li>Ordenação 	de objetos</li>
<li>Estocagem de 	objetos</li>
<li>Recuperação 	e busca de objetos estocados</li>
</ul>
<p>Para usar Coleções deve-se incluir a importação de java.util.* no topo de cada arquivo *.java:</p>
<pre name="code" class="java">package lab2;
import java.util.*;
public class UsandoColecoes {
  List&lt;String&gt; lista = new ArrayList&lt;String&gt;();
  ... //resto da classe
}</pre>
<p>Sintaxe básica de uma coleção de NomeCompleto:</p>
<ul>
<li>Adiciona um nome a 	lista: boolean add(NomeCompleto o);</li>
<li>Verifica se um 	objeto está na lista: boolean contains(Object o);</li>
<li>Remove um elemento 	da lista: boolean remove(NomeCompleto o);</li>
<li>Verifica quantos 	elementos tem na lista: int size();</li>
</ul>
<p>Exemplo de uso:</p>
<pre name="code" class="java">List&lt;NomeCompleto&gt; iapjava = new ArrayList&lt;NomeCompleto&gt;();
iapjava.add(new NomeCompleto("Luis", "Lima");
iapjava.add(new NomeCompleto("José", "Silva");
System.out.println(iapjava.size()); // =&gt; 2
iapjava.remove(new NomeCompleto("José", "Silva");
System.out.println(iapjava.size());  // =&gt; 1
List&lt;NomeCompleto&gt; iapruby = new ArrayList&lt;NomeCompleto&gt;();
Iapruby.add(new NomeCompleto("Marcos", "Fontes"));
iapjava.addAll(iapruby);
System.out.println(iapjava.size()); // =&gt; 2</pre>
<h4>Coleções Genéricas</h4>
<p>É permitido definir uma coleção que só armazene objetos de um determinado tipo como no exemplo acima. Porém também é permitido definirmos coleções genéricas que armazenam objetos de qualquer tipo.<br />
Exemplo de coleções genéricas:</p>
<pre name="code" class="java">List untyped = new ArrayList();
List&lt;String&gt; typed = new ArrayList&lt;String&gt;();
Object obj = untyped.get(0);
String sillyString = (String) obj;
String smartString = typed.get(0);</pre>
<p>As coleções não genéricas ou tipadas são mais práticas de manipular.</p>
<h4>Recuperando todos os dados de uma lista:</h4>
<p>Dado uma coleção de NomeCompleto chamada &#8220;colecaox&#8221; podemos usar duas ferramentas para recuperar cada item da coleção: Iterator e For each.</p>
<p>Iterator</p>
<pre name="code" class="java">Iterator&lt;NomeCompleto&gt; it = colecaox.iterator();
while (it.hasNext) {
        NomeCompleto obj = it.next();
        // Fazer alguma coisa com cada objeto
}</pre>
<pre name="code" class="java">for (NomeCompleto obj : colecaox) {
        // Fazer alguma coisa com cada objeto
}</pre>
<h4>Excluir objetos da lista enquanto se está recuperando os mesmo:</h4>
<p>Não é permitido remover objetos de uma coleção enquanto a mesma está em um laço for-each. Para remover uma lista enquanto se está recuperando é necessário usar o Iterator:</p>
<pre name="code" class="java">Iterator&lt;NomeCompleto&gt; it = colecaox.iterator();
while (it.hasNext) {
   NomeCompleto obj = it.next();
   it.remove(obj); // Veja que só se remove pelo Iterator não pela coleção: colecaox.remove(Obj);
}</pre>
<h4>Tipos de Coleção disponíveis:</h4>
<ul>
<li>Listas:
<ul>
<li>ArrayList;</li>
</ul>
</li>
<li>Conjunto: (set)
<ul>
<li>HashSet</li>
<li>TreeSet</li>
</ul>
</li>
<li>Mapeamento (map)
<ul>
<li>HashMap</li>
</ul>
</li>
</ul>
<h4>Listas</h4>
<p>ArrayList é uma lista de objetos ordenados, similar a um Array, porém sem tamanho pré-definido. A lista é ordenada de acordo com a ordem de inserção.</p>
<p>Definindo e inserindo itens na lista:</p>
<pre name="code" class="java">List&lt;String&gt; strings = new ArrayList&lt;String&gt;();
strings.add("one");
strings.add("two");
strings.add("three");
// strings = [ "one", "two", "three"]</pre>
<p>Inserindo objetos em uma determinada posição</p>
<pre name="code" class="java">List&lt;String&gt; strings = new ArrayList&lt;String&gt;();
strings.add("one");
strings.add("three");
strings.add(1, "two");
// strings = [ "one", "two", "three"]</pre>
<p>Recuperando objetos de uma determinada posição:</p>
<pre name="code" class="java">s.o.print(strings.get(0))   // =&gt; "one"
s.o.print(strings.indexOf("one")) // =&gt; 0</pre>
<h4>Conjuntos (set)</h4>
<p>Coleção sem tamanho e sem ordem definida. Não é permitido duplicidade de objetos no conjunto.</p>
<p>Exemplo:</p>
<pre name="code" class="java">Set&lt;NomeCompleto&gt; nomes = new HashSet&lt;NomeCompleto&gt;();
nomes.add(new NomeCompleto("José", "Silva"));
nomes.add(new NomeCompleto("José", "Silva"));
System.out.println(names.size()); =&gt; 1</pre>
<p>Regra de ouro para Conjuntos (set):<br />
<em>Um elemento do conjunto não pode mudar se isso poderá afetá-la a ponto de torná-lo igual a um outro objeto do conjunto. (ou a outro objeto a ser inserido no conjunto mesmo após a mudança)</em></p>
<p>Se não respeitar esta regra, pode se preparar para coisas realmente estranhas. De preferência sempre use objetos imutáveis com conjuntos.</p>
<h4>Mapas (map)</h4>
<p>Mapas são conjuntos de pares Chave/Valor. Para cada chave o mapa armazena um valor correspondente. Com o valor da chave a coleção map pode recuperar o valor previamente armazenado. Uma chave deve ser única, porém valores podem repetir.</p>
<p>É um serviço muito útil para armazenamento e posterior recuperação de dados com valor chave. Utilíssimo para uso com banco de dados relacionais. Iremos usar isso muito, então não deixe dúvidas a respeito</p>
<p>Mapas não implementam as funções add e contais, em seu lugar temos as seguintes funções:</p>
<ul>
<li>boolean put(Foo 	chave, Bar valor);</li>
<li>boolean 	contaisKey(Foo chave);</li>
<li>boolean 	contaisvalue(Bar value);</li>
</ul>
<p>(neste exemplos Foo e Bar são duas classes de qualquer tipo)</p>
<p>Exemplo de uso:</p>
<pre name="code" class="java">Map&lt;String, String&gt; dns = new HashMap&lt;String, String&gt;();
dns.put("scotty.mit.edu", "18.227.0.87");
System.out.println(dns.get("scotty.mit.edu"));
System.out.println(dns.containsKey("scotty.mit.edu"));
System.out.println(dns.containsValue("18.227.0.87"));
dns.remove("scotty.mit.edu");
System.out.println(dns.containsValue("18.227.0.87"));
// =&gt; "18.227.0.87", true, true, false</pre>
<p>Outros métodos úteis em mapas (map):</p>
<ul>
<li>keySet() &#8211; retorna 	um Set de todos as chaves</li>
<li>values() &#8211; retorna 	uma  Collection de todos os valores (use ArrayList ou Set para 	armazená-lo)</li>
<li>entrySet() &#8211; 	returna um Set de pares &#8220;chave,valor&#8221;. Cada par é um 	objeto  Map.Entry. Map.Entry suporta getKey, getValue, setValue ;</li>
</ul>
<h4>Comparação e Ordenação</h4>
<p>Para uso das coleções ordenadas é preciso também definirmos a função compareTo nas classes que definirmos. Esta função é usada para decidir, entre dois objetos, qual é o maior ou se são iguais.</p>
<p>(a.compareTo(b)) deverá resultar em um número menor que zero se a &lt; b, em zero se a = b e, finalmente, em um número maior que zero se a &gt; b .</p>
<p>Exemplos de comparação:</p>
<pre name="code" class="java">Integer um = 1;
System.out.println(um.compareTo(3));
System.out.println(um.compareTo(-50));
String jose= "José";
System.out.println(jose.compareTo("Ana"));
System.out.println(jose.compareTo("Zé"));
// =&gt; -1 , 1, 4, -2</pre>
<p>Veja que as classes String e Integer já implementam uma função compareTo corretamente. Nas classes definidas pelo programador esta função deverá ser definida corretamente. Mais a frente iremos definí-la para nosso exemplo NomeCompleto. Por enquanto vamos ver como usar compareTo com listas para ordenar alfabeticamente uma lista:</p>
<pre name="code" class="java">List&lt;String&gt; nomes = new ArrayList&lt;String&gt;();
nomes.add("Sailor");
nomes.add("Lula");
nomes.add("Bobby");
nomes.add("Santos");
nomes.add("Dell");
Collections.sort(nomes);
// nomes =&gt; [ "Bobby", "Dell", "Lula", "Sailor",  "Santos" ]</pre>
<h4>Interface Comparable</h4>
<p>Podemos usar Colletions.sort com a lista acima porque Strings implementam Comparable. Isto é, Strings tem uma ordem natural. Para que uma classe NomeCompleto seja &#8220;Comparable&#8221;, você deve implementar:</p>
<p>int compareTo(NomeCompleto obj);</p>
<p>Exemplo:</p>
<pre name="code" class="java">public class NomeCompleto implements Comparable&lt;NomeCompleto&gt; {
  ...
  public int compareTo(NomeCompleto o) {
    int compare = this.sobrenome.compareTo(o.sobrenome)
    if (compare != 0)
      return compare;
      else return this.nome.compareTo(o.nome);
  }
}</pre>
<p>Usando a nova classe Comparable NomeCompleto:</p>
<pre name="code" class="java">List&lt;NomeCompleto&gt; nomes = new ArrayList&lt;NomeCompleto&gt;();
nomes.add(new NomeCompleto("Nicolas", "Cage"));
nomes.add(new NomeCompleto("Laura", "Dern"));
nomes.add(new NomeCompleto("Harry", "Stanton"));
nomes.add(new NomeCompleto("Diane", "Ladd"));
nomes.add(new NomeCompleto("William", "Morgan"));
nomes.add(new NomeCompleto("Dirty", "Glover"));
nomes.add(new NomeCompleto("Johnny", "Cage"));
nomes.add(new NomeCompleto("Metal", "Cage"));
System.out.println(nomes);
Collections.sort(nomes);
System.out.println(nomes);
// =&gt; [Johnny Cage, Metal Cage, Nicolas Cage, Laura Dern, Crispin Glover,
// Diane Ladd, William Morgan, Harry Stanton]</pre>
<h4>Objetos Comparadores (Comparator)</h4>
<p>Para criar mais de um método de ordenação você deve definir classes Comparadoras. A classe comparadora simplesmente é uma classe com a implementação da função compateTo entre dois objetos:</p>
<p>int compare(Foo o1, Foo o2);</p>
<p>Exemplo de Comparador, ordenando primeiro nome primeiro:</p>
<pre name="code" class="java">public class PrimeiroNomePrimeiro implements
    Comparator&lt;NomeCompleto&gt; {
    public int compare(Nome n1, Nome n2) {
      int ret = n1.nome.compareTo(n2.nome);
      if (ret != 0)
        return ret;
        else return n1.sobrenome.compareTo(n2.sobrenome);
    }
}</pre>
<p>Isso deverá ser feito em arquivo separado do NomeCompleto.java: PrimeiroNomePrimeiro.java</p>
<p>Para usar o Comparador:</p>
<pre name="code" class="java">List&lt;NomeCompleto&gt; nomes = new ArrayList&lt;NomeCompleto&gt;();
...
Comparator&lt;NomeCompleto&gt; primeiroNome = new PrimeiroNomePrimeiro();
Collections.sort(nomes, primeiroNome);
System.out.println(nomes);
// =&gt; [Crispin Glover, Diane Ladd, Harry Stanton, Johnny
// Cage, Laura Dern, Metal Cage, Nicolas Cage, William
// Morgan]</pre>
<p>Outra maneira de ordenar é usando TreeSet. Isso faz a ordenação de maneira automática, sem precisar chamar a função sort. Para funcionar os objetos da TreeSet devem ser &#8220;Comparable&#8221; ou você deve definir uma classe Comparator.</p>
<pre name="code" class="java">SortedSet&lt;NomeCompleto&gt; nomes = new TreeSet&lt;NomeCompleto&gt;(new PrimeiroNomePrimeiro());
nomes.add(new NomeCompleto("Laura", "Dern"));
nomes.add(new NomeCompleto("Harry", "Stanton"));
nomes.add(new NomeCompleto("Diane", "Ladd"));
System.out.println(nomes);
// =&gt; [Diane Ladd, Harry Stanton, Laura Dern]</pre>
<h4>Aprofundando</h4>
<p>Procurar e estudar na documentação do java as classes apresentadas nesta aula: (veja java.util.*) em <a href="http://java.sun.com/j2se/1.5.0/docs/api">http://java.sun.com/j2se/1.5.0/docs/api</a></p>
<p>Durante os próximos estudos de java é essencial manter este endereço aberto em uma janela do navegador, de modo a tirar dúvidas a respeito do funcionamento de alguma classe java.</p>
<h4>Na Seqüência</h4>
<ul>
<li>dia 29 de janeiro: 	Exceções e outros truques</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4>
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/" rel="bookmark" title="22 de janeiro de 2008">Aula 12: Coleções, Hashing e Comparadores</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/" rel="bookmark" title="12 de dezembro de 2007">Aula 10: Java Essencial</a></li>
<li><a href="http://www.tecnoclasta.com/2008/01/29/aula-13-excecoes-e-tratamento-de-erros/" rel="bookmark" title="29 de janeiro de 2008">Aula 13: Exceções e tratamento de erros</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/" rel="bookmark" title="18 de dezembro de 2007">Aula 11: Classes, Interfaces e Polimorfismo</a></li>
<li><a href="http://www.tecnoclasta.com/2009/06/08/como-lidar-com-datas-e-horas-em-java/" rel="bookmark" title="8 de junho de 2009">Como lidar com Datas e Horas em Java</a></li>
</ul>
<p><!-- Similar Posts took 16.737 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2008%2F01%2F22%2Faula-12-colecoes-hashing-e-comparadores%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Como aprender sozinho</title>
		<link>http://www.tecnoclasta.com/2007/12/18/como-aprender-sozinho/</link>
		<comments>http://www.tecnoclasta.com/2007/12/18/como-aprender-sozinho/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 13:24:34 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Pensamentos]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/12/18/como-aprender-sozinho/</guid>
		<description><![CDATA[Verifiquei pelas estatísticas que muitos dos alunos do Curso de programação para Web em Java tem desistido de continuar o curso. Para estimular aqueles que tem dificuldades para levar um estudo auto ditada resolvei escrever algumas dicas a respeito. Porem encontrei na net um artigo bem interessante sobre isso. Aproveitem: Autodidatismo direto do Sarcófago. Artigos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Fcomo-aprender-sozinho%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Fcomo-aprender-sozinho%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Verifiquei pelas estatísticas que muitos dos alunos do Curso de programação para Web em Java tem desistido de continuar o curso. Para estimular aqueles que tem dificuldades para levar um estudo auto ditada resolvei escrever algumas dicas a respeito. Porem encontrei na net um artigo bem interessante sobre isso. Aproveitem:</p>
<p><a href="http://osarcofago.blogspot.com/2007/10/autodidatismo.html ">Autodidatismo direto do Sarcófago.<br />
</a><br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/12/18/como-aprender-sozinho/" rel="bookmark" title="18 de dezembro de 2007">Como aprender sozinho</a></li>
<li><a href="http://www.tecnoclasta.com/2008/06/23/guia-do-gmail/" rel="bookmark" title="23 de junho de 2008">Guia do Gmail</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/13/encerrando-o-curso-de-programacao-para-web-em-java/" rel="bookmark" title="13 de março de 2008">Encerrando o Curso de Programação para Web em Java.</a></li>
<li><a href="http://www.tecnoclasta.com/2009/08/31/nova-missao-do-onibus-espacial-sts128/" rel="bookmark" title="31 de agosto de 2009">Nova Missão do Ônibus Espacial &#8211; STS128</a></li>
<li><a href="http://www.tecnoclasta.com/2007/05/17/techbits/" rel="bookmark" title="17 de maio de 2007">Techbits</a></li>
</ul>
<p><!-- Similar Posts took 7.257 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Fcomo-aprender-sozinho%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/12/18/como-aprender-sozinho/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aula 11: Classes, Interfaces e Polimorfismo</title>
		<link>http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/</link>
		<comments>http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 11:58:27 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Hoje iremos aprofundar alguns conceitos de orientação a objeto . Classes e Interfaces, Conceitos Vamos começar com uma revisão de alguns conceitos já passados na última [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Faula-11-classes-interfaces-e-polimorfismo%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Faula-11-classes-interfaces-e-polimorfismo%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Hoje iremos aprofundar alguns conceitos de orientação a objeto .</p>
<h4>Classes e Interfaces, Conceitos</h4>
<p>Vamos começar com uma revisão de alguns conceitos já passados na última aula:</p>
<ul>
<li>Classe: um modelo para um Objeto</li>
<li>Interface: uma especificação</li>
<li>Instância: um objeto de uma Classe ou Interface fisicamente representado na 	memória</li>
<li>Membros de uma Classe:
<ul>
<li>Método: um conjunto sequencial de instruções</li>
<li>Campo: variável associada com um objeto particular</li>
<li>Campo estático: variável compartilada entre todos os objetos de uma classe.</li>
</ul>
</li>
</ul>
<h4>Tipos de Dados</h4>
<p>Existem dois tipos de dados em Java, os tipos primitivos e os tipos objetos.</p>
<h4>Objetos</h4>
<p>Usar a palavra chave “new” para criar um objeto. Este comando irá reservar espaço para um novo objeto na memória, chamar o construtor do objeto e retornar o endereço para o novo objeto.</p>
<h4>Modelo de definição de uma Classe:</h4>
<pre name="code" class="java">[acesso] [abstract/final] class NomeDaClasse
                        [extends NomeClassePai]
                        [implements NomeDaInterface...] {
                  //construtores
                  //métodos membros
                  //campos membros
}</pre>
<h4>Exemplo de Sintaxe</h4>
<pre name="code" class="java">public class ContaBancaria {
	...
}</pre>
<h4>Membros das Classes</h4>
<p>Ao escrever uma classe nós podemos definir os seguintes membros:</p>
<ul>
<li>Construtores</li>
<li>Métodos e campos</li>
<li>Métodos e campos estáticos</li>
<li>Classes alinhadas</li>
</ul>
<p>Vamos detalhar cada um dos membros, começando pelos Construtores.</p>
<h4>Construtores</h4>
<p>São os métodos chamados automaticamente na criação dos objetos. Deve ter o mesmo nome da classe que a possue. Tem o objetivo de realizar a inicialização de um objeto da classe.</p>
<h4>Modelo de Construtor</h4>
<pre name="code" class="java">[acesso] NomedaClasse ([argumentos...]) {
   //corpo do construtor
}</pre>
<h4>Exemplo de Sintaxe Construtor</h4>
<pre name="code" class="java">public class ContaBancaria {
  public ContaBancaria(){ // veja que o nome do construtor é o mesmo da classe
		saldo=0;
  }
}</pre>
<h4>Exemplo de Sintaxe de Múltiplos Construtores</h4>
<pre name="code" class="java">public class ContaBancaria {
	public ContaBancaria(){
		saldo=0;
	}
	public ContaBancaria(int saldoInicial){
		saldo=saldoInicial;
	}
}</pre>
<h4>Métodos</h4>
<p>Métodos são usados para realizar funções modificando o estado dos objetos. Podem ter vários parâmetros, e retornar um único valor. Nos casos que não retornam valor deve ser utilizado a parlavra chave void.</p>
<h4>Modelo de Método</h4>
<pre name="code" class="java">[acesso] tipoRetorno nomeDoMétodo ([argumentos...]) {
    //corpo do método
}</pre>
<h4>Exemplo de Método</h4>
<pre name="code" class="java">public class ContaBancaria {
	public int getSaldo(){
		return saldo;
	}
}</pre>
<h4>Sobrecarga de métodos</h4>
<p>Uma classe pode possuir dois métodos com mesmo nome, desde que os seus argumentos sejam diferentes.</p>
<p>Por exemplo:</p>
<pre name="code" class="java">	int getSaldo() {...}
	int getSaldo(String tipo) {...}</pre>
<p>Java reconhece qual método deverá executar verificando quantos e que tipos de parâmetros são apresentados na chamada.</p>
<h5>Exemplo:</h5>
<pre name="code" class="java">int x=minhaClasse.getSaldo(“total”); //chamará o segundo método.</pre>
<h4>Campos</h4>
<p>Um campo é como uma variável e armazena um estado do objeto. É sempre relacionado a um tipo de dado que determina o que ele pode armazenar.</p>
<h4>Modelo de Campo</h4>
<pre name="code" class="java">[acesso] tipoDeDado nomeCampo [= valor];</pre>
<h4>Exemplos de Campos</h4>
<pre name="code" class="java">public class ContaBancaria {
	public int saldo; // &lt;&lt; campo
	public Date ultimaTransacao; // &lt;&lt; campo
	public List transacoes; // &lt;&lt; campo
}</pre>
<h4>Juntando tudo</h4>
<pre name="code" class="java">public class ContaBancaria {
  private int saldo; // campo
  public ContaBancaria() {  //construtor
        saldo= 0;

  }
  public void retirada(int valor) {  //método
        saldo = saldo – valor;
  }
  public void deposito (int valor) {  //método
        	saldo = saldo + valor;
  }
}</pre>
<h4>Controle de Acesso</h4>
<p>Para controlar o acesso aos dados membros temos 4 tipos de acesso direrentes que determinam que classes tem acesso:</p>
<ul>
<li>public – qualquer outra classe</li>
<li>protected &#8211; somente subclasses</li>
<li>(default) – somente classes no mesmo pacote (package)</li>
<li>private – somente acessível por métodos da mesma classe</li>
</ul>
<p>Estes níveis de acesso são usados para garantir a abstração e encapsulamento dos objetos.</p>
<h4>Herança</h4>
<p>É o mecanismo que permite uma classe herdar funcionalidades de outra classe, permitindo abstração de dados e procedimentos e diminuindo a complexidade de grandes sistemas de dados.</p>
<p>Usamos herança quando duas idéias tem diferentes comportamentos mas com funcionalidades sobrepostas:</p>
<blockquote><p>ContaBancaria =&gt; ContaCorrente<br />
ContaBancaria =&gt; ContaPoupanca</p></blockquote>
<h4>Interfaces</h4>
<p>Uma interface é uma especificação de uma classe. Declara-se métodos, mas não os define. Não tem contrutores. O objetivo é expecificar um padrão de uso (interface) de um conjunto de classes diferentes.</p>
<h4>Modelo de Interfaces</h4>
<pre name="code" class="java">[acesso] interface NomeDaInterface
    [extends ListaDeNomeDeInterface...] {
      //declaração de métodos
}</pre>
<h4>Exemplo de Interface</h4>
<pre name="code" class="java">public interface ContaBancaria {
  public void retirada (int valor);  //nenhum método é definido na interface, somende declarado

  public void deposito (int valor);
  public int getSaldo ();
}</pre>
<h4>Como utilizar uma Interface?</h4>
<p>Uma vez definido uma interface, podemos escrever classes, ou mesmo outras interfaces que implementam (implement) ou extendam (extends) esta interface.</p>
<p>Quando uma classe implementa uma interface, esta classe deve possuir em seu corpo cada um dos métodos declarados desta interface. Se uma classe implementa mais de uma interface, ela deve possuir cada uma dos métodos de cada uma das interfaces que implementa.</p>
<h4>Exemplo usando a Interface</h4>
<pre name="code" class="java">public class ContaPoupanca implements ContaBancaria {
    private int saldo;
    public ContaPoupanca (int saldoinicial) {
         saldo= saldoinicial;
    }
    public void somaJuros(int juros){    //função particular de ContaPoupanca
	saldo=saldo+(saldo*(juros)/100);
    }
    //implementando métodos da interface ContaBancaria:
    public void retirada (int valor) {
         saldo= saldo – valor;
    }
    public void deposito (int valor) {
         saldo = saldo + valor;
    }
    public int getSaldo () {
         return saldo;
    }
}</pre>
<h4>Classes Abstratas</h4>
<p>São uma mistura de interfaces e classes, podendo definir métodos e possuir campos. Porém podem apresentar métodos somente declarados, e não definidos.</p>
<p>A idéia é capturar o estado de uma idéia e também sua funcionalidade.</p>
<h4>Exemplo de Classe Abstrata</h4>
<pre name="code" class="java">public abstract class ContaBancaria {
   private int saldo; // campo
   public void retirada(int valor); //função não definida pela classe abstrata, porque difere de tipo de conta bancária para outra.
   public void deposito (int valor) {
        	saldo = saldo + valor;
   }
}</pre>
<h4>Exemplo extendendo uma Classe Abstrata</h4>
<pre name="code" class="java">public class ContaCorrente extends ContaBancaria {
	public ContaCorrente(){
		saldo=0;
	}
	public void retirada(int valor){
		if((saldo-valor)&lt;0) {
			throw new RuntimeException (“Insuficiencia de fundos”);
		} else {
			saldo=saldo-valor;
		}
	}
}</pre>
<h4>Exemplo de outro tipo de Conta Bancaria:</h4>
<pre name="code" class="java">public class ContaCorrenteEspecial extends ContaBancaria {
	private limiteChequeEspecial;
	public ContaCorrenteEspecial(){
		saldo=0;
		limiteChequeEspecial=1000;
	}
	public void retirada(int valor){
		if((saldo-valor)&lt;limiteChequeEspecial) {
 			throw new RuntimeException (“Estourado Limite Cheque Especial”);
		} else {
			saldo=saldo-valor;
		}
	}
}</pre>
<h4>Polimorfismo</h4>
<p>Consiste na capacidade de objetos de tipos diferentes responder a métodos de mesmo nome e tipo. Isso acontece quando usamos herança. A máquina virtual java automaticamente determina qual das funções devem ser executadas.</p>
<h4>A classe Object</h4>
<p>Quando uma classe não extende nenhuma outra classe, implicitamente ela extende a classe java.lang.Object. Esta é uma classe da biblioteca java que contém um conjunto de métodos que assim ficam disponíveis para qualquer classe que você definir. os principais métodos da classe Object são: clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString e wait.</p>
<h4>Sobreposição de métodos (overriding)</h4>
<p>Se uma classe A extende uma classe B, então B é a classe pai (superclass) de A. E, a classe A é uma classe filha (subclass) de B. Quando a classe pai possui um método definido, a classe filha pode ter um método com mesmo nome e tipo para modificar o comportamento do método da classe pai. Isso chama-se sobreposição (overriding).</p>
<h4>Modificando um método da Superclass</h4>
<p>A classe Object possui um método chamado equals que verifica se dois objetos são o mesmo, isto é, se duas variáveis estão apontando para o mesmo objeto. (revisem a última aula se não entenderam)</p>
<p>Porém em alguns tipos de objetos a noção de igualdade dá-se de maneira totalmente distinta. No nosso exemplo de conta bancária, igualdade poderia dizer que duas contas possuem o mesmo saldo. Graças ao polimorfismo e sobreposição é possível mudar o método equals para realizar exatamente esta verificação.</p>
<h4>Usando o método equals padrão</h4>
<pre name="code" class="java">ContaCorrente c1 = new ContaCorrente(100);
ContaCorrente c2 = new ContaCorrente(100);
c1.equals(c1); // verdadeiro
c2.equals(c2); // verdadeiro
c1.equals(c2); // falso, como são dois objetos a função equals retorna falso.</pre>
<h4>Modificando nossa função “equals”, usando overriding:</h4>
<pre name="code" class="java">public class ContaCorrente extends ContaBancaria {
	...
	public boolean equals (Object aux){
		if(aux instanceof ContaCorrente){ //verifica se tipo de dado do parâmetro está correto
			ContaCorrente aux2 = (ContaBancaria) aux;
			return saldo == aux2.saldo; //retorna true se saldo igual
		} else {
			return false; //se tipo incorreto não é igual
		}
	}
	...
}</pre>
<h4>Usando nova função “equals”</h4>
<pre name="code" class="java">ContaCorrente c1 = new ContaCorrente(100);
ContaCorrente c2 = new ContaCorrente(100);
c1.equals(c1); // verdadeiro
c2.equals(c2); // verdadeiro
c1.equals(c2); // verdadeiro, pois agora o que se compara é o saldo, não a posição do objeto</pre>
<h4>Usando variáveis do tipo Superclass</h4>
<p>Variáveis de um tipo podem armazenar dados de tipos subclasses</p>
<pre name="code" class="java">Object o1 = new ContaCorrente(100); //Object é superclass de qualquer classe
Object o2 = new ContaCorrente(100);</pre>
<p>Object é o tipo em tempo de Compilação (compile-time) e ContaCorrente é o tipo em tempo de execução (runtime).</p>
<h4>Chamada de métodos em tempo de execução</h4>
<p>Quando chamamos um método por uma variável do tipo superclass mas com um objeto subclass armazenado, o método executado será o do subclass. No nosso exemplo, chamar o método o1.equals(o2), iria chamar a função “equals” definida em ContaCorrente.</p>
<p>Isso acontece porque Java escolhe o método a ser chamado em tempo de execução e não em tempo de compilação.</p>
<h4>Exemplo usando ContaCorrente e ContaCorrenteEspecial</h4>
<pre name="code" class="java">ContaBancaria c1 = new ContaCorrente(10);
ContaBancaria c2 = new ContaCorrenteEspecial(10);
c1.retirada(12); //chamará ContaCorrente.retirada(int)  e causará uma exceção por insuficiência de saldo
c2.retirada(12); //chamará ContaCorrenteEspecial.retirada(int) e não apresentará problemas.</pre>
<p>As vantagem de uso de tipos abstratos como demonstrado aqui é que os detalhes de implementação são mais simples de modificar sem mudanças nas classes que usam estes tipos abstratos.</p>
<p>Nas próxima aula iremos lidar com coleções e listas para fixar exatamente estes conceitos. Porém isso vai ser somente em 22 de janeiro, pois estou entrando em férias, e me reservei no direito de aproveitar os 20 primeiros dias do ano sem nenhuma preocupação. Estarei me casando no dia 12 de janeiro, e só vou voltar a este site quando voltar a trabalhar também na faculdade e na Sabesp.</p>
<p>Para quem acompanha os artigos astronômicos, só irei postar se for algo realmente extraordinário. Um abraço e boas férias.</p>
<h4>Na Seqüência</h4>
<ul>
<li>dia 25 de dezembro: folga é Natal. Entraremos em recesso com o curso, estaremos de volta dia 22 de janeiro, ao final de minhas merecidas férias.</li>
<li>dia 22 de janeiro: Coleções, Hashing e Comparadores.</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4>
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/" rel="bookmark" title="18 de dezembro de 2007">Aula 11: Classes, Interfaces e Polimorfismo</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/" rel="bookmark" title="12 de dezembro de 2007">Aula 10: Java Essencial</a></li>
<li><a href="http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/" rel="bookmark" title="22 de janeiro de 2008">Aula 12: Coleções, Hashing e Comparadores</a></li>
<li><a href="http://www.tecnoclasta.com/2008/03/07/aula-17-hibernate-e-camada-model/" rel="bookmark" title="7 de março de 2008">Aula 17: Hibernate e Camada Model</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/" rel="bookmark" title="19 de fevereiro de 2008">Aula 15: Oracle e Hibernate, fazendo uma busca</a></li>
</ul>
<p><!-- Similar Posts took 22.925 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F18%2Faula-11-classes-interfaces-e-polimorfismo%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Aula 10: Java Essencial</title>
		<link>http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/</link>
		<comments>http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 11:59:16 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a décima aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Na última aula fizemos uma introdução ao ambiente Java, incluindo a instalação do ambiente de desenvolvimento NetBeans. Hoje, vamos fazer uma viagem sobre a linguagem vendo [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F12%2Faula-10-java-essencial%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F12%2Faula-10-java-essencial%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a décima aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Na última aula fizemos uma introdução ao ambiente Java, incluindo a instalação do ambiente de desenvolvimento NetBeans. Hoje, vamos fazer uma viagem sobre a linguagem vendo o que ela tem de essencial.</p>
<p>Em minha opinião esta é a mais importante aula do curso até agora.</p>
<h4>Java é uma linguagem Orientada a Objeto</h4>
<p>A programação em java consiste em manipulação e criação de objetos.</p>
<h4>Objeto</h4>
<p>Em programação, objetos são representações computacionais de entidades reais, ou abstratas. Eles representas pessoas, entidades. Ou mesmo coisas mais ou menos abstratas, como uma música, ou uma conta bancária.</p>
<p>Todos objetos tem estados: uma pessoa tem nome, idade, Rg, etc. Uma música tem título, interprete, etc. Uma conta bancária tem seu saldo, seu número de identificação, titular da conta, etc.</p>
<p>Programadores podem chamar métodos ou ações no objeto para realizar computações que podem potencialmente modificar o estado do objeto:</p>
<ul>
<li>Programador: Quantos anos você tem ? &lt;&lt;método</li>
<li>Objeto: Eu tenho 10. &lt;&lt;valor de retorno do método</li>
<li>Programador: Hoje é seu aniversário! &lt;&lt;outro método</li>
<li>Objeto: Eu tenho que somar 1 à minha idade. &lt;&lt;provocou mudança</li>
</ul>
<ul>
<li>Programador: Qual seu saldo?</li>
<li>Objeto Conta Bancária: Saldo igual a R$ 2940,00</li>
<li>Programador: Sacar 100 reais</li>
<li>Objeto: Eu tenho que atualizar o saldo para R$ 2840,00</li>
</ul>
<p>Um programa em Java:</p>
<pre class="java">package ola;
import java.util.System;
class OlaMundo {
  String minhaString;
  void vaiLa() {
    minhaString = new String("Olá, Mundo!“);
    System.out.println(minhaString);
  }
  public static void main(String[] args) {
    AloMundo meuAloMundo = new AloMundo();
    meuAloMundo.vaiLa();
  }
}</pre>
<p><!-- em>Devido às limitações do WordPress, utilizado na publicação deste curso, os código java não são formatados corretamente. Para você ver o código com mais legibilidade copie para uma janela do Netbeans e use as teclas Alt+Shift+F, fazendo o código ser identado com o padrão Java.</em --></p>
<h4>Classes</h4>
<p>Classes por sua vez são modelos para fazer Objetos. Programar em Java consiste em escrever classes. Todo o código de Java está dentro de classes.</p>
<pre class="java">class HelloWorld { //nome da classe
  ... &lt;toda a programação&gt; ...
}</pre>
<h4>Campos</h4>
<p>Campos também chamados variáveis, são usadas para armazenar o estado do Objeto.</p>
<pre class="java">class Pessoa {
  int idade; // &lt;&lt;= variável ou campo
}
&lt;classe do objeto&gt; &lt;nome da variável/campo&gt;;</pre>
<h4>Construindo Objetos</h4>
<p>Pessoa luis = new Pessoa();</p>
<p>Para a construção de um objeto usa-se o código &#8220;new&#8221; conforme o exemplo acima. Objetos são criados a partir de uma classe, são instâncias das classes. O código &#8220;new Pessoa()&#8221; cria um objeto na memória do computador, especificamente no Heap do Java.</p>
<p>No código acima <strong>luis</strong> é um ponteiro para o objeto. Isto é, o Objeto que foi criado é armazenado em uma área de memória do computador, a variável <strong>luis</strong> armazena o endereço desta posição de memória.</p>
<p>O código acima &#8220;luis = &#8221; atribui o endereço do objeto na memória para a variável <strong>luis.</strong></p>
<p>&lt;tipo&gt; &lt;nome da variável&gt; = new &lt;nome da classe&gt;();</p>
<h4>Usando objetos</h4>
<p>Depois de criado, um objeto pode ser usado assim:</p>
<pre class="java">Pessoa luis = new Pessoa();
luis.idade=33; //use "." para acessar os campos
Pessoa elaine = new Pessoa();
elaine.idade=32;
System.out.println(luis.idade); // imprime 33 na tela
System.out.println(elaine.idade); //imprime 32 na tela</pre>
<h4>Tipos Primitivos</h4>
<p>Em Java nem tudo são objetos. Algumas coisas são tão simples, que não compensa usar objetos para representá-los: boolean, byte, short, int, long, double, float, char. São respectivamente tipo lógico, número, inteiro curto, inteiro, inteiro longo, número ponto flutuante duplo, ponto flutuante simples, caracter.</p>
<dl>
<dt>boolean</dt>
<dd>Um valor verdadeiro ou falso.</dd>
<dt>byte</dt>
<dd>Valor numérico inteiro com sinal de 8 bits</dd>
<dt>short</dt>
<dd>Valor numérico inteiro com sinal de 16 bits</dd>
<dt>char</dt>
<dd>Caracter unicode de 16 bits</dd>
<dt>int</dt>
<dd>Valor numérico inteiro com sinal de 32 bits</dd>
<dt>long</dt>
<dd>Valor numérico inteiro com sinal de 64 bits</dd>
<dt>float</dt>
<dd>Valor numérico de ponto flutuante padrão IEEE754 de 32 bits</dd>
<dt>double</dt>
<dd>Valor numérico de ponto flutuante padrão IEEE754 de 64 bits</dd>
</dl>
<p>Para armazenar texto, não usamos um tipo primitivo, temos uma classe String:<br />
String nome=new String(&#8220;José das Couves&#8221;);</p>
<h4>Métodos</h4>
<p>São ações que podemos realizar sobre os objetos, que podem mudar seu estado.</p>
<p>&lt;tipo do retorno&gt; &lt;nome do método&gt;(&lt;parâmetros&gt;) {<br />
&lt;corpo do método&gt;<br />
}</p>
<p>No exemplo AloMundo no inicio da aula temos dois métodos definidos: vaiLa e main:</p>
<p>meuAloMundo.vaiLa();<br />
// use ‘.’ para acessar o método</p>
<h4>Construtores</h4>
<p>Construtores são tipos especiais de métodos que não retornam valores, usados para iniciar campos, aceitam parâmetros e tem corpo de método normal. Tem o mesmo nome da classe, inclusive iniciando com letra maiúscula:</p>
<pre class="java">class Pessoa{
  int idade;

  Pessoa(){ //início do contrutor
    idade=18; // ao criar um objeto do tipo Pessoa a idade será iniciada
                   // com 18 anos em todos os objetos;
    } //fim do construtor
}</pre>
<h4>Corpo do Método</h4>
<pre class="java">String primeiroNome(String nomeCompleto) {
  int espaco = nomeCompleto.indexOf(“ ”); //posição onde está o espaço
  String palavra = nomeCompleto.substring(0, espaco);
  return palavra;
}</pre>
<p>Pode-se definir qualquer número de parâmetros, separando por vírgula (no exemplo nomeCompleto). Pode-se declarar variáveis locais(espaco, palavra). Deve sempre retornar alguma coisa (String palavra). No caso de um método não necessitar retorno usa-se void no tipo de retorno (void=nada).</p>
<pre class="java">void seuAniversario(){ &gt;&gt;exemplo de método void para a classe Pessoa
  idade++;
}</pre>
<h4>Controle de Fluxo</h4>
<p>O comando &#8220;if&#8221; permite controle sobre ações que devem ser realizadas de acordo com as situações do programa:</p>
<pre class="java">if(luis.idade&lt;18){
  System.out.println("Proibido para menores");
} else if(luis.temCartaoCredito(){
  System.out.println("Seja bem vindo!");
} else {
  System.out.println("Sai fora, tá pensando que é de graça?");
}</pre>
<p>if(condição 1){<br />
&#8230;<br />
} else if (condição2) {<br />
&#8230;<br />
} else if (condiçãoN) {<br />
&#8230;<br />
}else { &#8230; }</p>
<h4>Condições</h4>
<p>As condições do &#8220;if&#8221; são expressões que são booleanas, valem Verdadeiro ou Falso. Para construir usar os operadores:</p>
<ul>
<li>&lt; menor</li>
<li>&gt; maior</li>
<li>== igual</li>
<li>&lt;= menor ou igual</li>
<li>&gt;= maior ou igual</li>
<li>! negação</li>
</ul>
<p>Exemplos:</p>
<pre class="java">caixa.isVazia();
caixa.numeroLivros()==0
!(caixa.numeroLivros()&gt;1) negação: número de livros na caixa <strong>NÃO</strong> é maior que 1)
caixa.numeroLivros!=MAX_NUMBER_BOOKS
caixa.numeroLivros%2==0 //verifica se o resto da divisão por 2 é zero (isso é, se o número de livros é par)</pre>
<h4>Repetição For (loops)</h4>
<p>Repete um trecho de código, controlando por uma variável:</p>
<pre class="java">for (int i = 0; i &lt; 3; i++) {
  System.out.println(i); // imprime 0 1 2
}</pre>
<p>for (&lt;inicialização&gt; ; &lt;condição&gt; ; &lt;incremento&gt;) {<br />
&#8230;. // trecho de código que repete<br />
}</p>
<p>Inicialização é executado uma única vez antes do trecho repetido. A condição é verificada após a inicialização e antes de repetir o trecho. Incremento é realizado todas as vezes após o trecho repetido.</p>
<p>Para de repetir quando a condição passa a ser falsa.</p>
<h4>Repetição While</h4>
<p>Repetição de um trecho de código enquanto (while) uma condição for verdadeira.</p>
<pre class="java">int i = 0;
while(i&lt;3) {
  System.out.println(i); //imprime 0 1 2
  i++;
}</pre>
<p>while (&lt;condição&gt;) {<br />
&#8230;<br />
}</p>
<h4>Combinando Condições</h4>
<p>Quando temos mais de uma condição para testar usamos &#8220;&amp;&amp;&#8221;: <strong>E</strong> lógico ou &#8220;||&#8221;: <strong>OU</strong> lógico.</p>
<ul>
<li>luis.idade&gt;=18 &amp;&amp; luis.temCartaoCredito()</li>
<li>alguem.nome.equals(&#8220;Luis&#8221;)||alguem.nome.equals(&#8220;Lima&#8221;)</li>
<li>(!true || false)&amp;&amp; true (resposta=false)</li>
</ul>
<h4>Matrizes ou arrays</h4>
<p>Lista de objetos identificados com um único nome, mais números de ordem.</p>
<pre class="java">String[] animais = new String[2]; // dois objetos String
animais[0] = new String("Rex");
animais[1] = "Lulu"; // forma simples de criar String
String[] animais= new String[] {"Rex","Lulu"};
System.out.println(animais.length); // 2 ítens na matriz</pre>
<h4>Objetos <span class="postbody">wrapper dos tipos Primitivos</span></h4>
<p>Os tipos primitivos em algumas situações são interessantes serem manipulados como objetos. A biblioteca Java possui classes que representam cada tipo de variável primitiva: Integer para int, Float para float, Double para double, Boolean para boolean, etc.</p>
<h4>Usando os wrappers</h4>
<pre class="java">Integer a= new Integer(3); // cria objeto Integer e inicia com valor 3;
Integer sum = a.add(5); // cria objeto Integer com o valor de a+5;</pre>
<h4>Wrappers em Arrays</h4>
<pre class="java">Integer notas= new Integer[50]; // 50 objetos Integer</pre>
<h4>Cuidado ao usar Objetos</h4>
<ul>
<li>Não tentar acessar array fora de faixa<br />
animais[5] &gt;&gt; excessão ArrayOutOfBoundsException;</li>
<li>Acessar variável sem criar objeto correspondente<br />
String[] str;<br />
str.length &gt;&gt; NullPointerException</li>
<li>Erros de interpretação de uso<br />
Integer a = new Integer(3); //a=&gt;3<br />
a.add(5); //calcular a+5, não muda valor de a=&gt;3<br />
a=a.add(5); //agora sim: a=&gt;8</li>
</ul>
<p><strong>Resumo</strong></p>
<ul>
<li>Variáveis
<ul>
<li>Variáveis apontam para objetos;</li>
<li>Variáveis apontam objetos de uma classe em particular;</li>
<li>Integer x; Declara uma variável;</li>
</ul>
</li>
<li>Objetos
<ul>
<li>Classes definem objetos</li>
<li>Objetos são instâncias de uma classe em particular;</li>
<li>new Integer(3); Constrói um objeto;</li>
</ul>
</li>
</ul>
<h4>Representação Objeto vs Variáveis</h4>
<p>Um exemplo visual de objetos e variáveis durante a execução de um programa java:</p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/12/heap.GIF" alt="Heap Java" /><br />
Temos dois objetos da classe Integer com o valor 3 armazenado. E temos 4 variáveis: num, x, y e z. As variáveis <strong>num</strong> e <strong>x</strong> apontam para o mesmo objeto. A variável z não aponta para nenhum objeto.</p>
<h4>Null</h4>
<p>Variáveis sem objetos relacionados apontam para null. null não é um objeto, é apenas uma indicação para a não existência de objeto relacionado com uma variável.</p>
<p>Utilizar uma variável com valor Null para verificar um campo de um objeto irá causar um erro (NullPointerException):</p>
<pre class="java">Pessoa joao;
joao.idade=10; // NullPointerException, não existe objeto relacionado à variável joao, portanto não existe o campo idade.</pre>
<h4>Mudando um objeto através das variáveis</h4>
<p>Para atribuir um objeto à uma variável, utilize o operador &#8220;=&#8221;. Com isso é possível fazer mais de uma variável apontar para o mesmo objeto. Este recurso pode provocar um efeito chamado mutação de objetos compartilhados:</p>
<pre class="java">public class MutationExample {
  public static void main(String[] args) {
    List&lt;String&gt; a = new ArrayList&lt;String&gt;();
    List&lt;String&gt; b;
    b= a; // b e a compartilham a lista
    a.add(“Alo, Mundo!”);
    System.out.println(b); // imprime "Alô, Mundo!"
  }
}</pre>
<p>No exemplo, a e b são variáveis apontando para a mesma lista. Usando &#8220;a.add(&#8230;&#8221; modificamos o objeto lista. Quando imprimimos &#8220;b&#8221;, a variável aponta para o mesmo objeto modificado, e portanto mostra o valor &#8220;Alô, Mundo!&#8221;.</p>
<h4>Campos e Métodos Estáticos e Não estáticos</h4>
<p>Campos e métodos também são chamados membros de uma classe. Por padrão são não estáticos.</p>
<p>Membros estáticos são aqueles que são compartilhados entre cada Instância/Objeto da classe.</p>
<p>Um campo estático, compartilha seu valor entre cada objeto da classe.</p>
<h4>Campos não Estáticos</h4>
<pre class="java">public class Livro {
  public int livroCounter = 0;
  public Livro() {
    livroCounter++;
  }
  public static void main(String[] args) {
    new Livro(); new Livro();
    Livro biblia = new Livro();
    System.out.println(biblia.livroCounter); // Imprime 1
  }
}</pre>
<h4>Campos Estáticos</h4>
<pre class="java">public class Livro {
  public static int livroCounter = 0; // &lt;&lt;== campo estático
  public Livro() {
    livroCounter++;
  }
  public static void main(String[] args) {
    new Livro(); new Livro(); new Livro();
    System.out.println(Livro.livroCounter); // Imprime “3”: observe Livro se refere à classe
  }
}</pre>
<p>Campos Estáticos devem ser chamados a partir do nome da Classe. São únicos para todos os objetos da classe.</p>
<h4>Métodos Não Estáticos</h4>
<pre class="java">public class livro {
  private boolean lido = false;
  public void leiaLivro() {
    lido = true;
  }
  public static void main(String[] args) {
    Livro livro = new Livro();
    livro.leiaLivro(); // Invocado através do objeto
  }
}</pre>
<h4>Métodos Estáticos</h4>
<pre class="java">public class Livro {
  private boolean lido = false;
  public static void leiaLivro(Livro livro) {     // &lt;&lt;== metodo estático
    livro.lido = true;
  }
  public static void main(String[] args) {
    Livro livro = new Livro();
    Livro.leiaLivro(livro); // método invocado através da classe
    // “livro.leiaLivro(livro);” válido mas desaconselhado!
  }
}</pre>
<p>Métodos estáticos são chamados através da classe, e só tem acesso a dados estáticos.</p>
<h4>Objetos passados por referência</h4>
<p>Parâmetros de métodos podem ser por referência ou valor. Objetos por padrão são passados por referência. Isso é, mudanças no objeto dentro da função se propagam para fora da mesma.</p>
<pre class="java">public static &lt;T&gt; void removePrimeiro(List&lt;T&gt; lista) {
  lista.remove(0);
}
public static void main(String[] args) {
  List&lt;String&gt; minhaLista = new ArrayList&lt;String&gt;();
  minhaLista.add(“Gato”);
  minhaLista.add(“Cachorro”);
  removePrimeiro(minhaLista);
  System.out.println(minhaLista); // imprime [Cachorro]
}</pre>
<p>Tanto a variável &#8220;minhaLista&#8221; no método &#8220;main&#8221; e a variável &#8220;lista&#8221; no método &#8220;removePrimeiro&#8221; se referem ao mesmo objeto na memória (veja a e b em &#8220;Mudando um objeto através das variáveis&#8221; acima)</p>
<h4>Escopo</h4>
<p>Escopo de variáveis está relacionado à que partes do programa podem acessar uma variável. Dependendo de onde a variável está definida seu escopo muda.</p>
<p>As Chaves {&#8230;} definem uma área de escopo. Quando uma variável é definida dentro de uma área de escopo, é somente visível dentro desta área. Ao final da execução de uma área de escopo, as variáveis internas são automaticamente destruídas.</p>
<p>O escopo dos campos das classes são todos os métodos da classe. Isso é, um campo de um objeto da classe é acessível por todos os métodos daquele objeto.</p>
<p>Os parâmetros de um método, funcionam exatamente como uma variável do método. Existe até o fim da execução do método.</p>
<h4>Exemplos de Escopo</h4>
<p><img src="http://10.89.12.173/tecnoclasta/wp-content/uploads/2007/12/escopo.gif" alt="Exemplo de Escopo" /></p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/12/escopo1.GIF" alt="Exemplo de Escopo 1" /></p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/12/escopo2.gif" alt="Exemplo de Escopo 2" /></p>
<p><img src="http://10.89.12.173/tecnoclasta/wp-content/uploads/2007/12/escopo2.gif" alt="Exemplo de Escopo 2" /></p>
<h4>Alguns toques:</h4>
<ul>
<li>Atribução: variáveis apontam objetos. Cuidado com ponteiros nulos;</li>
<li>Static: não invocar métodos estáticos pelos objetos</li>
<li>Passagem por referência: faça uma cópia se quizer se prevenir de uma mudança acidental;</li>
<li>Escopo: minimize o escopo das variáveis o mais possível. Não faça tudo global</li>
</ul>
<p>Como você pode ver, esta é a aula mais pesada do curso. Não deixe as dúvidas acumularem. Faça os exercícios. <a href="http://www.tecnoclasta.com/forum">Tire suas dúvidas no Fórum</a>, é para isso que está disponível. Não se acanhe. O curso só melhora com a participação de vocês.</p>
<h4>Aprofundando</h4>
<ul>
<li>Procure no <a href="http://java.sun.com/docs/books/tutorial/index.html">Java Tutorial da Sun</a>, os tópicos abordados nesta aula.</li>
<li>Faça um estudo de <a href="http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html">operadores Java</a>.</li>
<li>Faça um estudo da classe java.lang.Math.</li>
<li>Faça um estudo da classe java.lang.String.</li>
<li>Qualquer dúvida vá ao fórum.</li>
</ul>
<h4>Exercícios</h4>
<ul>
<li>Faça um programa para mostrar os números pares de 1 a até 100;</li>
<li>Faça um método que verifique se um número é primo; (chamado isPrimo)</li>
<li>Faça um programa para mostrar os números primos de 1 a 50;</li>
<li>Transforme o método isPrimo em um método estático;</li>
<li>Refaça o programa para usar o método estático;</li>
<li>Faça uma função que verifique os números primos de uma lista e exclua todos os números não primos da mesma.</li>
</ul>
<h4>Na Seqüência</h4>
<ul>
<li>dia 18 de dezembro: Classes, Interfaces e Polimorfismo.</li>
<li>dia 25 de dezembro: folga é Natal. Entraremos em recesso com o curso, estaremos de volta dia 22 de janeiro, ao final de minhas férias.</li>
<li>dia 22 de janeiro: Coleções, Hashing e Comparadores.</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4>
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/" rel="bookmark" title="12 de dezembro de 2007">Aula 10: Java Essencial</a></li>
<li><a href="http://www.tecnoclasta.com/2009/06/08/como-lidar-com-datas-e-horas-em-java/" rel="bookmark" title="8 de junho de 2009">Como lidar com Datas e Horas em Java</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/" rel="bookmark" title="18 de dezembro de 2007">Aula 11: Classes, Interfaces e Polimorfismo</a></li>
<li><a href="http://www.tecnoclasta.com/2008/01/22/aula-12-colecoes-hashing-e-comparadores/" rel="bookmark" title="22 de janeiro de 2008">Aula 12: Coleções, Hashing e Comparadores</a></li>
<li><a href="http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/" rel="bookmark" title="4 de dezembro de 2007">Aula 9: Introdução a Java</a></li>
</ul>
<p><!-- Similar Posts took 31.501 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F12%2Faula-10-java-essencial%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/12/12/aula-10-java-essencial/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Problemas de Logística: décima aula na quarta-feira</title>
		<link>http://www.tecnoclasta.com/2007/12/11/problemas-de-logistica-decima-aula-na-quarta-feira/</link>
		<comments>http://www.tecnoclasta.com/2007/12/11/problemas-de-logistica-decima-aula-na-quarta-feira/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 20:06:14 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Metadados]]></category>
		<category><![CDATA[Programação para Internet]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/12/11/problemas-de-logistica-decima-aula-na-quarta-feira/</guid>
		<description><![CDATA[Desde o lançamento do curso de programação para Web, esta será a primeira vez que não poderemos publicar a aula de hoje nesta terça-feira, como de costume. A aula já está pronta para publicação, porém devido a problemas de logística, só iremos publicá-la amanhã ainda pela manhã. Peço desculpas para os alunos que estão esperando, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F11%2Fproblemas-de-logistica-decima-aula-na-quarta-feira%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F11%2Fproblemas-de-logistica-decima-aula-na-quarta-feira%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Desde o lançamento do curso de programação para Web, esta será a primeira vez que não poderemos publicar a aula de hoje nesta terça-feira, como de costume.</p>
<p>A aula já está pronta para publicação, porém devido a problemas de logística, só iremos publicá-la amanhã ainda pela manhã.</p>
<p>Peço desculpas para os alunos que estão esperando, mas peço também compreenção. Afinal, se até os engenheiros da Nasa <a href="http://www.tecnoclasta.com/2007/12/06/lancamento-da-atlantis-ao-vivo/">podem adiar algo planejado</a>, por que não posso eu? <img src='http://www.tecnoclasta.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Brincadeiras a parte, amanhã nos veremos. Prepare uma boa dose de café, a aula está bem pesada e longa.<br />
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/12/11/problemas-de-logistica-decima-aula-na-quarta-feira/" rel="bookmark" title="11 de dezembro de 2007">Problemas de Logística: décima aula na quarta-feira</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/14/atraso-na-aula-do-curso-java-e-novidades/" rel="bookmark" title="14 de fevereiro de 2008">Atraso na Aula do Curso Java e novidades</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/18/o-curso-web-esta-indo-de-vento-em-popa/" rel="bookmark" title="18 de outubro de 2007">O Curso Web está indo de &#8220;Vento em Popa&#8221;</a></li>
<li><a href="http://www.tecnoclasta.com/2008/01/21/voltando-de-ferias/" rel="bookmark" title="21 de janeiro de 2008">Voltando de férias</a></li>
<li><a href="http://www.tecnoclasta.com/2007/10/21/destruindo-carros-e-motos-12-videos-detonando/" rel="bookmark" title="21 de outubro de 2007">Destruindo Carros e motos! 12 vídeos detonando.</a></li>
</ul>
<p><!-- Similar Posts took 7.008 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F11%2Fproblemas-de-logistica-decima-aula-na-quarta-feira%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/12/11/problemas-de-logistica-decima-aula-na-quarta-feira/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aula 9: Introdução a Java</title>
		<link>http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/</link>
		<comments>http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 17:34:20 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>
		<category><![CDATA[cpwj]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a nona aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Acabou a parte mais fácil do curso, vamos agora começar a programar. Mas antes disso uma introdução teórica de Java é interessante. Vamos a ela: Java [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F04%2Faula-9-introducao-a-java%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F04%2Faula-9-introducao-a-java%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a nona aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Acabou a parte mais fácil do curso, vamos agora começar a programar. Mas antes disso uma introdução teórica de Java é interessante. Vamos a ela:</p>
<p>Java foi iniciado pela Sun no ano de 1990. James Gosling coordenou a equipe que a desenvolveu inicialmente. No início dos trabalhos o objetivo era desenvolver software para uso em eletrônicos de consumo.<br />
Antes do lançamento os projetistas descobriram que Java era ótimo para a Internet. Tiveram a idéia de utilizar um recurso chamado Applet Java, que permitia que programas funcionassem inseridos (Embed) em páginas Web. Lançada em 1995, rapidamente a linguagem ganhou força como a linguagem para uso com a Internet.</p>
<p>Embora o uso de Applets parecesse interessante, a banda larga não era tão difundida como é hoje, e os links lentos impediam a carga dos programas com uma velocidade aceitável. Hoje em dia, estes Applets são usados para validação de senhas em alguns bancos. Veja que a segurança é um dos pontos extremamente fortes do ambiente Java.</p>
<p>Java acabou se transformando na linguagem mais badalada com a introdução do Jsp-Java Server Page, e dos frameworks como Struts, Hibernate e outros. e do J2ee. Isso permitiu que Java fosse realmente utilizado pelas grandes corporações desenvolver softwares de peso nesta linguagem que inicialmente era despretensiosa.</p>
<p>O principal diferencial de Java para as outras linguagens é sua independência de plataforma, embora seja compilada. Utilizando uma máquina virtual diferente em cada plataforma onde funciona, os programas em si depois de compilados podem ser transportados de um ambiente para outro sem modificações. E para ambientes diferentes eu quero dizer:</p>
<ul>
<li> Processadores diferentes: x86, Sparcs, PowerPC, etc</li>
<li> Sistemas Operacionais diferentes: Windows, Linux, MacOs, Solaris, etc</li>
</ul>
<p>Assim podemos desenvolver um programa para Windows que funciona em Linux, MacOs, etc.</p>
<p>Mas outras características importantes ainda estão presentes:</p>
<ul>
<li> Orientação a Objeto</li>
<li> Alto nível</li>
<li> Tipos de dados Estáticos</li>
<li> Multithreaded</li>
<li> Extensível</li>
<li> Bem estruturada</li>
<li> Acesso a banco de dados</li>
</ul>
<p>Em Java escrevemos o código em um editor de texto sem formatação, como o bloco de notas do Windows e salvamos o arquivo com a extenção *.java. Usamos o compilador <em>javac</em> para obter o programa executável *.class. Os arquivos .class não possuem código executável (bytecode) para o processador do ambiente de desenvolvimento, como acontece com os arquivos executáveis de outras linguagens. Os códigos são bytecodes para uma Máquina Virtual Java (JVM). Para executá-lo usamos o lançador de programas <em>java</em> que aciona a Máquina Virtual para executar o programa.<br />
O JVM por sua vez traduz os bytecodes java para o processador específico onde está sendo executado o programa.</p>
<p>A plataforma Java inclui além da Linguagem de Programação e da Java Virtual Machine JVM, a API – Biblioteca de Classes.<br />
Esta biblioteca possui um grande conjunto de Classes que implementam várias ferramentas necessárias para os programadores. A maior parte das implementação do Java estão na biblioteca.<br />
O aprendizado da linguagem Java é extremamente rápida, mas devido à amplitude da biblioteca, é necessário muita pesquisa para não tentar reinventar a roda a cada programa desenvolvido.</p>
<p>Na próxima aula iremos começar realmente a programar em Java, escrevendo muito código.</p>
<p>Antes de terminar esta aula no entanto <a href="http://www.tecnoclasta.com/jsp-tudo/">instale o seu ambiente de desenvolvimento</a> Netbeans que eu recomendo para as aulas seguintes. É necessário uma máquina razoável (&gt;1Ghz) e 512Mb de memória para ficar confortável. Porém já vi funcionando com menos.</p>
<p>E vamos fazer um teste para ver se está funcionando:</p>
<ul>
<li>Abrir o Netbeans e acionar o menu Arquivo/Novo Projeto;</li>
<li>Uma janela chamada &#8220;Novo Projeto&#8221; abrirá. No canto esquerdo tem a identificação do passo em que estamos;</li>
<li>No passo 1: Selecionar Geral / Aplicação Java , clicar no botão Próximo ;</li>
<li>Passo 2: Definir o nome da aplicação. Use &#8220;AppAloMundo&#8221;. (maiúscula e minúscula é importante em Java, nunca se esqueça disso). Defina a pasta onde vai salvar a aplicação e o nome da classe principal: &#8220;appalomundo.AloMundo&#8221; e clique em finalizar; Faça exatamente como eu estou pedindo a primeira vez, depois se quiser repetir é por sua conta;</li>
<li>Automaticamente o Netbeans irá criar os diretórios necessários e arquivos para sua aplicação;</li>
</ul>
<p>Com o projeto pronto para uso, modificar o código de AloMundo.java para:</p>
<pre name="code" class="java">public class AloMundo {
         public static void main(String[] argv){
               AloMundo objeto=new AloMundo();
         }

         /** Creates a new instance of AloMundo */
         public AloMundo() {
               System.out.println("Alô mundo!");
         }
}</pre>
<p>Salve o arquivo e execute a classe com a tecla &lt;F6&gt; ou com o menu Executar/Executar Projeto Principal.</p>
<p>O resultado, se tudo der certo, será uma aba conforme a imagem abaixo:</p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/12/netbeans1.png" alt="Netbeans Hello World" /></p>
<p>Veja após a saída &#8220;run:&#8221; o resultado da execução do seu programa. Simplesmente Alô Mundo!</p>
<p>Não deixe para depois, antes da próxima aula consiga com todas as suas energias chegar a este ponto de funcionamento do Netbeans (ou de sua ferramenta escolhida). A próxima aula iremos fazer muitos testes e será altamente recomendado que esteja tudo de acordo.</p>
<h4>Na Seqüência</h4>
<ul>
<li> dia 11 de dezembro: todos os fundamentos, rápido e direto!</li>
<li> dia 18 de dezembro: orientação ao objeto.</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<p>Como o curso terminou a primeira fase, gostaria de saber quem ainda esta acompanhando a aulas. Em uma espécie de chamada deixem um recado no comentário desta mensagem. Agradeço de antemão.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4>
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/" rel="bookmark" title="4 de dezembro de 2007">Aula 9: Introdução a Java</a></li>
<li><a href="http://www.tecnoclasta.com/2008/04/16/aspnet-video-aulas-aula-3-hello-world-aspnet/" rel="bookmark" title="16 de abril de 2008">Asp.net Vídeo Aulas | Aula 3: Hello World Asp.Net</a></li>
<li><a href="http://www.tecnoclasta.com/2008/09/25/android-sdk-disponivel-para-download/" rel="bookmark" title="25 de setembro de 2008">Android SDK disponível para Download</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/14/aula-14-o-modelo-mvc/" rel="bookmark" title="14 de fevereiro de 2008">Aula 14: O modelo MVC</a></li>
<li><a href="http://www.tecnoclasta.com/2008/02/19/aula-15-oracle-e-hibernate-fazendo-uma-busca/" rel="bookmark" title="19 de fevereiro de 2008">Aula 15: Oracle e Hibernate, fazendo uma busca</a></li>
</ul>
<p><!-- Similar Posts took 23.470 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F12%2F04%2Faula-9-introducao-a-java%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/12/04/aula-9-introducao-a-java/feed/</wfw:commentRss>
		<slash:comments>83</slash:comments>
		</item>
		<item>
		<title>Oitava Aula: Diagramação Css</title>
		<link>http://www.tecnoclasta.com/2007/11/27/oitava-aula-diagramacao-css/</link>
		<comments>http://www.tecnoclasta.com/2007/11/27/oitava-aula-diagramacao-css/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 20:40:29 +0000</pubDate>
		<dc:creator>Prof. Luis Eduardo</dc:creator>
				<category><![CDATA[Aula CPWJ]]></category>
		<category><![CDATA[Programação para Internet]]></category>
		<category><![CDATA[cpwj]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.tecnoclasta.com/2007/11/27/oitava-aula-diagramacao-css/</guid>
		<description><![CDATA[Sejam bem vindos, esta é a oitava aula de Programação Web em Java, para saber mais sobre o curso, começe em Curso de Programação Web em Java &#8211; CPWJ. Na última aula estudamos como lidar com blocos e trechos xHtml e com bordas, margens e preenchimento. Hoje iremos ver o uso de background, ou pano [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F11%2F27%2Foitava-aula-diagramacao-css%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F11%2F27%2Foitava-aula-diagramacao-css%2F&amp;source=tecnoclasta&amp;style=normal&amp;service=is.gd&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sejam bem vindos, esta é a oitava aula de Programação Web em Java, para saber mais sobre o curso, começe em <a href="http://www.tecnoclasta.com/2007/10/01/curso-gratuito-de-programacao-para-web-em-java/">Curso de Programação Web em Java &#8211; CPWJ.</a></p>
<p>Na última aula estudamos como lidar com blocos e trechos xHtml e com bordas, margens e preenchimento. Hoje iremos ver o uso de background, ou pano de fundo e como usar tudo isso para diagramação de sua página.</p>
<h4>Background</h4>
<p>Os parâmetros background permitem definir como será o comportamento do fundo de um bloco. O fundo inclui a área de conteúdo e o preenchimento (padding). É possível definir uma cor para o fundo, ou preencher o fundo com uma figura. Esta figura pode ser repetida por toda a área ou de outras maneiras. Vamos definir um bloco para realizar os testes:</p>
<pre name="code" class="xhtml">&lt;body&gt;
&lt;p&gt;este é o bloco de teste&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>E em style definir algumas características:</p>
<pre name="code"  class="xhtml">&lt;style type="text/css"&gt;
p {
  padding: 40px;
  margin: 50px;
  heigth: 200px;
  width: 300px; }
&lt;/style&gt;</pre>
<p>Pronto assim teremos uma caixa para aplicar os padrões de fundo. Vamos testar primeiro a cor de fundo:</p>
<pre name="code"  class="css">p{
  background-color: #ccc;  /* cor de fundo cinza */
}</pre>
<p>Nada mais simples. Agora vamos usar uma figura de fundo. Arrume uma imagem *.gif ou *.jpg e copie para o mesmo diretório do arquivo Css. É possível aplicar um padrão repetido por todo o bloco usando:</p>
<pre name="code"  class="css">p{
background-image: url(“nome do arquivo.jpg”);
}</pre>
<p>Se quizer controlar como será a repetição:</p>
<pre name="code"  class="css">background-repeat: no-repeat;  /* a imagem somente uma vez */
background-repeat: repeat-y;  /* a imagem repete na vertical */
background-repeat: repeat-x;  /* a imagem repete na horizontal */
background-repeat: repeat;  /* a imagem repete na vertical e horizontal (padrão) */</pre>
<p>Um efeito interessante é manter o fundo fixo quando rolamos a página:</p>
<pre name="code"  class="css">background-attachment: fixed;
background-attachment: scroll; /* rola de forma padrão */</pre>
<p>Quando não repetimos a imagem por todo o fundo, podemos posicionar o local onde a imagem irá se apresentar:</p>
<pre name="code"  class="css">background-position: x-pos y-pos ; x-% y-% ; top left ; top center ; top right ; center left ;
center center ; center right ; bottom left ; bottom center ; bottom right ;</pre>
<h4>Exemplos</h4>
<p>Para mostrar uma imagem de fundo exatamente no meio do bloco de modo:</p>
<pre name="code"  class="css"> p{
  background-image: url(“nomearquivo.gif”);
  background-repeat: no-repeat;
  background-position: center center;
}</pre>
<p>Como os outros parâmetros podemos escrever um grupo de opções de uma vêz só:</p>
<pre name="code"  class="css"> p{
  background: url(“nomearquivo.gif”) no-repeat center center fixed;
}</pre>
<p>As opções podem vir em qualquer ordem e pode-se omitir qualquer uma delas.</p>
<h4>Parâmetro Float</h4>
<p>Os blocos &#8216;div&#8217; se comportam exatamente como os parágrafos &#8216;p&#8217;. Quando colocamos um parágrafo na página e definimos uma largura menor que a largura da página é evidente que sobrará espaço a direita do bloco. Veja a figura abaixo:</p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/11/blocos1.png" alt="bloco1" /></p>
<p>Digamos que o bloco em azul claro é o fundo do navegador, e os blocos amarelo e verde são dois parágrafos. Usamos Css para definir o parágrafo amarelo e o bloco verde com largura 100px:</p>
<pre name="code"  class="css">#paragrafoamarelo, #paragrafoverde { width:100px; }</pre>
<p>Mesmo existindo espaço para os dois parágrafos ficarem lado a lado, como são blocos eles terminam com quebra de linha e o bloco verde continua abaixo.<br />
O parâmetro float permite que um parágrafo simplesmente não quebre a linha no final. O comportamento é de flutuação. O bloco pode ser colocado a esquerda e o restante vai contornar conforme a figura:</p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/11/blocos2.png" alt="bloco2" /></p>
<p>Aqui o bloco amarelo possui os seguintes parâmetros:</p>
<pre name="code"  class="css">#paragrafoamarelo{
   width: 100px;
   float: left; /* flutuando a esquerda */
}
/* e o verde: */
#paragrafoverde{
width:100%; /* parágrafo verde ocupando toda a largura da página */
}</pre>
<p>Para colocar os dois parágrafos um ao lado do outro:</p>
<pre name="code"  class="css">#paragrafoamarelo{
  width: 100px;
  float: left; /* flutuando a esquerda */
}
/* e o verde: */
#paragrafoverde{
   width:100px;
   float:left; /* flutuando a esquerda */
}</pre>
<h4>Diagramação com Css</h4>
<p>Vamos falar um pouco sobre diagramação com Css. Como exemplo vamos tomar o código xHtml proposto na última aula com algumas modificações:</p>
<pre name="code"  class="html">…
&lt;body&gt;
&lt;div id=”tudo”&gt;

&lt;div id=”titulopagina”&gt;
&lt;h1&gt;Título da Página&lt;/h1&gt;
&lt;h2&gt;Descrição da página parte do título&lt;/h2&gt;
&lt;p&gt;Autor: Luís Eduardo. Também parte do título&lt;/p&gt;
&lt;/div&gt;  &lt;!-- fechando titulopagina --&gt;

 &lt;div id=”menu”&gt;
&lt;h2&gt;Menu de opções:&lt;/h2&gt;
&lt;ul &gt;
&lt;li class=”impar”&gt;Opção 1&lt;/li&gt;
&lt;li&gt;Opção 2&lt;/li&gt;
&lt;li class=”impar”&gt;Opção 3&lt;/li&gt;
&lt;li&gt;Opção 4&lt;/li&gt;
&lt;li class=”impar”&gt;Opção 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;  &lt;!-- fechando menu --&gt;

&lt;div id=”conteudo”&gt;
&lt;h2&gt;Conteúdo principal da página&lt;/h2&gt;
…
&lt;/div&gt; &lt;!-- fechando conteúdo --&gt;

 &lt;div id=”rodape”&gt;
&lt;h2&gt;Feito por Luís Eduardo&lt;/h2&gt;
…
&lt;/div&gt; &lt;!-- fechando rodapé --&gt;
&lt;/div&gt; &lt;!-- fechando tudo --&gt;
&lt;/body&gt;
<!-- fechando rodapé -->
<!-- fechando tudo --></pre>
<p>E vamos planejar um modelo de diagramação desejado:</p>
<p><img src="http://www.tecnoclasta.com/wp-content/uploads/2007/11/blocos3.png" alt="bloco3" /></p>
<p>Como já expliquei várias vezes, o conteúdo do curso é uma apresentação sobre os assuntos. Material detalhado está na web, e já indiquei vários lugares. Vamos fazer esta diagramação acima explicando cada detalhe e depois é por conta de vocês.</p>
<p>Vamos considerar algumas escolhas:</p>
<ul>
<li> A largura total da página será fixa e com 758px. (exato para não aparecer a barra de rolagem inferior em tela com  resolução 800&#215;600)</li>
<li> A altura dependerá do conteúdo.</li>
<li> A barra lateral em amarelo terá 250px</li>
<li> O título com altura de 200px;</li>
<li> O rodapé terá altura 40px;</li>
</ul>
<p>Vamos lá Css com as medidas:</p>
<pre name="code"  class="css">#tudo {
  width : 758px;
  background-color: #ffcccc;
}
#titulopagina {
  height : 200px;
  background-color: #00ff00;
}
#menu {
  width : 250px;
  margin: 2px;
  background-color:yellow;
}
#conteudo {
  width : 498px; /* 758px- 250px -10px (margens dos blocos) */
  margin: 2px;
  background-color: orange;
}
#rodape {
  height : 40px;
  background-color: red;
}</pre>
<p>Isso fará com que todos os blocos estejam na medida correta, porém um abaixo do outro. Para acertar os blocos no lugar iremos acrescentar o float no conteúdo e no menu:</p>
<pre name="code"  class="css">#menu { ...
  float:left;
  ...
} /* e  */
#conteudo {...
  float:right;
  ...
}</pre>
<p>Isso colocará os blocos menu e conteúdo lado a lado. Porém o comportamento do rodapé ainda será errado. Teste no Firefox e no Iexplorer e veja por si mesmo. Para corrigir isso utilize o parâmetro Clear, que proíbe qualquer conteúdo ao lado de um bloco:</p>
<pre name="code"  class="css">#rodape {...
  clear: both; /*proíbe conteúdo a direita e a esquerda do rodapé, fazendo ele ir para baixo */
  ...
}</pre>
<p>Ainda temos alguns probleminhas como ajustes de padding dos blocos e as cores de fundo que não se espandem para baixo no menu e conteúdo, eliminar os pontinhos no menu, centralizar o layout, etc.</p>
<pre name="code"  class="css">body {
  margin : 0px 0px;
  text-align:center;
}
#tudo {
  text-align : left;
  ...
}
#menu *, #conteudo * {
  padding: 0 6px;
}
#menu ul li {
  list-style-type:none;
}</pre>
<p>Acabou a primeira parte do curso gente, cansei de falar de html, css.  Agora fiquem com os especialistas desta área: o Diego Eis do <a href="http://www.tableless.com.br">http://www.tableless.com.br</a> e Maurício Samy do <a href="http://www.maujor.com">http://www.maujor.com</a>. E claro, os cursos web mais completos (infelizmente em inglês) em <a href="http://w3schools.com/">http://w3schools.com/</a>.</p>
<p>Na próxima aula iremos falar de Java. Uma aula bem teórica, mas é importante saber com o que estaremos lidando.</p>
<h4>Aprofundando</h4>
<p>Estude alguns outros modelos de layout em:</p>
<ul>
<li><a href="http://www.maujor.com/tutorial/lay2col-faux-colunm.php"> http://www.maujor.com/tutorial/lay2col-faux-colunm.php</a></li>
<li><a href="http://www.maujor.com/tutorial/qqer-ordem-3colunas.php"> http://www.maujor.com/tutorial/qqer-ordem-3colunas.php</a></li>
<li><a href="http://tableless.com.br/artigos/tutorial/"> http://tableless.com.br/artigos/tutorial/</a></li>
</ul>
<h4>Na Seqüência</h4>
<ul>
<li> dia 4 de dezembro: Vamos falar de Java, aula introdutória.</li>
<li> dia 11 de dezembro: todos os fundamentos, rápido e direto!</li>
<li> dia 18 de dezembro: orientação ao objeto.</li>
</ul>
<p>Dúvidas? <a href="http://www.tecnoclasta.com/forum">vá para o fórum</a>.</p>
<h4>Procure os mais baratos <a href="http://busca.buscape.com.br/cprocura?produto=livro+web&amp;lkout=1&amp;site_origem=1387579">Livros sobre a Web</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+java&amp;lkout=1&amp;site_origem=1387579">Livros sobre Java</a>, <a href="http://busca.buscape.com.br/cprocura?produto=livro+html&amp;lkout=1&amp;site_origem=1387579">Livros HTML</a> ou <a href="http://busca.buscape.com.br/cprocura?produto=livro+css&amp;lkout=1&amp;site_origem=1387579">Livros CSS</a> nas melhores lojas do Brasil.</h4>
<h3>Artigos Similares:</h3>
<ul class="similar-posts">
<li><a href="http://www.tecnoclasta.com/2007/11/27/oitava-aula-diagramacao-css/" rel="bookmark" title="27 de novembro de 2007">Oitava Aula: Diagramação Css</a></li>
<li><a href="http://www.tecnoclasta.com/2007/11/20/setima-aula-blocos-trechos-e-pouca-diagramacao/" rel="bookmark" title="20 de novembro de 2007">Sétima Aula: Blocos, Trechos e pouca Diagramação</a></li>
<li><a href="http://www.tecnoclasta.com/2007/11/13/sexta-aula-texto-fontes-e-seletores-css/" rel="bookmark" title="13 de novembro de 2007">Sexta Aula: texto, fontes e seletores Css.</a></li>
<li><a href="http://www.tecnoclasta.com/2008/05/07/aspnet-aulas-aula-5/" rel="bookmark" title="7 de maio de 2008">Asp.net Aulas | Aula 5: xHtml e Css</a></li>
<li><a href="http://www.tecnoclasta.com/2007/11/06/quinta-aula-introducao-a-css/" rel="bookmark" title="6 de novembro de 2007">Quinta aula: Introdução a Css</a></li>
</ul>
<p><!-- Similar Posts took 12.885 ms --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.tecnoclasta.com%2F2007%2F11%2F27%2Foitava-aula-diagramacao-css%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.tecnoclasta.com/2007/11/27/oitava-aula-diagramacao-css/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

