<?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>blog.caelum.com.br &#187; composição</title>
	<atom:link href="http://blog.caelum.com.br/tag/composicao/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:04:59 +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>Effective Java: segunda edição</title>
		<link>http://blog.caelum.com.br/effective-java-segunda-edicao/</link>
		<comments>http://blog.caelum.com.br/effective-java-segunda-edicao/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 11:56:29 +0000</pubDate>
		<dc:creator>Paulo Silveira</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[composição]]></category>
		<category><![CDATA[effective java]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[fj-16]]></category>
		<category><![CDATA[herança]]></category>
		<category><![CDATA[imutabilidade]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[orientação a objetos]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2008/07/25/effective-java-segunda-edicao/</guid>
		<description><![CDATA[Como sabemos, a segunda edição do Effective Java foi publicada. O autor é Joshua Bloch, um dos principais responsáveis pelo generics do Java, e atualmente chief java architect no Google. Esse livro é dividido em 78 itens, cada um com cerca de 3 páginas, atacando um ponto específico do java e orientação a objetos, explicando <a href="http://blog.caelum.com.br/effective-java-segunda-edicao/#more-237'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Como sabemos, a segunda edição do <a href="http://java.sun.com/docs/books/effective/">Effective Java</a> foi publicada. O autor é <a href="http://en.wikipedia.org/wiki/Joshua_Bloch">Joshua Bloch</a>, um dos principais responsáveis pelo generics do Java, e atualmente chief java architect no Google. Esse livro é dividido em 78 itens, cada um com cerca de 3 páginas, atacando um ponto específico do java e orientação a objetos, explicando uma boa ou má prática. Simplesmente incrível, durante a leitura você sempre reconhece muita coisa que já aprendeu durante sua experiência de desenvolvimento. </p>
<p>Essa nova edição está estendida e revista, para cobrir as grandes mudanças do Java 5. Esse, juntamente com <a href="http://blog.caelum.com.br/livros-escolhendo-a-trindade-do-desenvolvedor-java/">outros dois livros</a> (e atualmente incluiríamos também o <a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month">The Mythical Man-month</a>), são de extrema importância para todo desenvolvedor na nossa opinião.</p>
<p>O <a href="http://www.boaglio.com/">Fernando Boaglio</a> tem <a href="http://www.boaglio.com/index.php/2007/10/01/effective-java-depois-de-6-anos/">um resumo</a> em seu blog, sobre todos os itens dessa nova versão. A <a href="http://www.java.blogger.com.br/">Vanessa Sabino</a> publicou anos atrás um resumo completo sobre a primeira edição, que você pode conferir na coluna da direita do seu blog. </p>
<p>O Fernando também <a href="http://www.guj.com.br/posts/list/90779.java">postou no GUJ</a> um link para <a href="http://www.infoq.com/articles/bloch-effective-java-2e">uma excelente entrevista do Joshua Bloch</a>, onde ele tenta resumir as más práticas, o java inefetivo: <strong>otimização prematura</strong>, e <strong>escrever o próprio código quando bibliotecas boas já existem</strong>. Além disso, Joshua Bloch é categório sobre a grande importância dos testes unitários: &#8220;<em>Unit testing is key. And writing your tests first is a great thing.</em>&#8221;</p>
<p>Lendo essa nova edição e relembrando muito da edição anterior, escolhi aqui quatro itens que considero vitais, e vou falar sucintamente sobre cada um deles. Curiosamente todos os selecionados aqui já existiam na edição anterior, e estão mais relacionados a design que a idiomismos da linguagem, mas isso não tira a  importância dos outros aqui não citados. Esses itens são muito debatidos no capítulo de Tópicos em Orientação a Objetos no nosso <a href="http://www.caelum.com.br/curso/fj-91-arquitetura-design-projetos-java/">trienamento de Design e Arquitetura de projetos Java</a>. Vamos a eles:</p>
<p><strong>Item 15: Minimize mutabilidade</strong></p>
<p>Classes imutáveis possuem uma série de vantagens: fáceis de manter, não possuem efeitos colaterais e acima de tudo são thread safe. Uma classe deve ser imutável a não ser que você tenha muito bons motivos para isso. Mesmo se não for possível tornar sua classe imutável, minimize a quantidade de métodos que alteram o estado do objeto. Um objeto previsível é muito mais simples de manter. Joshua Bloch cita <code>String</code>, <code>BigInteger</code> e diz que <code>java.util.Date</code> e <code>java.awt.Point</code> deveriam ter sido criadas imutáveis! Muitas APIs novas abusam da imutabilidade, como a Joda Time, classes wrapper, Money and Time do Eric Evans, etc. Aliás, é com o slogan da imutabilidade que linguagens como <a href="http://clojure.org/">clojure</a> e <a href="http://www.erlang.org/">erlang</a> tem chamado tanta atenção. Leia também <a href="http://blog.lucindo.com.br/2008/05/22/state-youre-doing-it-wrong/">essa citação</a> no blog do Renato Lucindo.</p>
<p><strong>Item 16: Favoreça composição em vez de herança</strong></p>
<p>Esse é um tópico que já foi <a href="http://blog.caelum.com.br/como-nao-aprender-orientacao-a-objetos-heranca/">discutido anteriormente nesse post</a>. O fato é o seguinte: é muito fácil usar herança de maneira errada, como é o caso de <code>Stack extends Vector</code> e <code>Properties extends Hashtable</code>. Mesmo quando usada corretamente, herança pode causar efeitos colaterais com muita facilidade, sendo que utilizar interfaces e composição pode substitui-la por completo, com o pequeno acréscimo de algumas linhas de delegação. Esse item também é citado no livro <em>Design Patterns</em> como um dos dois princípios básicos do bom design orientado a objetos.</p>
<p><strong>Item 47: Conheça e use as bibliotecas!</strong></p>
<p>Você conhece a <code>ArrayDeque</code> do java 6? Sabia que a <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html">java.util.Scanner</a> pode ler facilmente arquivos com formatos caseiros, e já trazer para você <code>double</code>s, <code>String</code>s e até mesmo <code>BigDecimal</code>s? Que JAXB e JAXWS podem agora ser usados apenas com Java SE? Sabia que a <code>Collections</code> possui hoje métodos para calcular a frequência de um elemento e inverter a ordem de um <code>Comparator</code>?. Conhecer bem a biblioteca padrão do Java pode te salvar de escrever muito código já existente, testado e de qualidade. <code>java.io</code>, <code>java.lang</code> e <code>java.util</code> são APIs que funcionam como base para todo desenvolvedor e merecem um estudo aprofundado.</p>
<p><strong>Item 52: Refira a objetos pelas suas interfaces</strong><br />
Sem dúvida uma boa prática mais que necessária. Através dela conseguimos diminuir muito o acoplamento entre classes, deixando apenas uma fina camada entre elas: as interfaces. Sempre usar <code>InputStream</code> em vez de se acoplar em <code>FileInputStream</code>, sempre usar <code>List</code> em vez de se acoplar a <code>ArrayList</code>. Muitas vezes podemos ir mais longe, nesse último caso <code>Collection</code> pode ser o suficiente, ou até mesmo <code>Iterable</code>! Algumas pessoas levam isso tão a sério que nunca criam uma única classe concreta que não implemente uma interface. Esse item também é citado no livro <em>Design Patterns</em>, e é o outro princípio básico do bom design orientado a objetos desta forma: &#8220;<em>Programe voltado a interface, e não a implementação</em>&#8220;.</p>
<p>Ainda existem itens fundamentais sobre Enums, Exceptions, Concorrência e Generics. Esse livro é realmente importante na sua cabeceira. Boa leitura!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/effective-java-segunda-edicao/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

