<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>MiddleHeaven</title>
	<atom:link href="http://middleheaven.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://middleheaven.wordpress.com</link>
	<description>A sua próxima plataforma de aplicação Java</description>
	<lastBuildDate>Tue, 18 Oct 2011 12:26:52 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='middleheaven.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>MiddleHeaven</title>
		<link>http://middleheaven.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://middleheaven.wordpress.com/osd.xml" title="MiddleHeaven" />
	<atom:link rel='hub' href='http://middleheaven.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Seguindo em frente</title>
		<link>http://middleheaven.wordpress.com/2009/10/23/seguindo-em-frente/</link>
		<comments>http://middleheaven.wordpress.com/2009/10/23/seguindo-em-frente/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 11:50:33 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[MiddleHeaven]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[http]]></category>

		<guid isPermaLink="false">http://middleheaven.wordpress.com/?p=128</guid>
		<description><![CDATA[Como já devem saber o MiddleHeaven está sendo utilizado para suportar o site www.javabuilding.com o que significa que funciona O mecanismo de processamento de requisições HTTP é abstraido das classes de servlets e utilizado por um mecanismo baseado em ação.  Devido à injeção de dependência e injeção de parâmetros apenas precisamos escrever uma classe que atua como controlador/presenter e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=128&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Como já devem saber o MiddleHeaven está sendo utilizado para suportar o site www.javabuilding.com o que significa que funciona <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O mecanismo de processamento de requisições HTTP é abstraido das classes de servlets e utilizado por um mecanismo baseado em ação.  Devido à injeção de dependência e injeção de parâmetros apenas precisamos escrever uma classe que atua como controlador/presenter e configurar quais url ela irá responder.  Todas as configurações são feitas em código. A razão para isto é que são configurações dos mecanismos que não mudarão no deploy, por isso não ha necessidade de as deixar em arquivos separados. Uma possivel futura é utilizar scripts groovy e javascript para as configurações mantendo o melhor dos dois mundos.</p>
<p>O foco do MiddleHeaven para GUI é prover um mecanismo comum para web e desktop orientado a componentes, mas enquanto isso não fica pronto com a toolbox de processamento e o processador baseado em ações já dá para fazer alguma coisa.</p>
<p>Junto com isso temos algumas tags próprias para ajudar a criar as páginas, em particular o forEach que aceita qualquer Iterable e não apenas List.</p>
<p>Entretanto o storage toolbox continua sendo remodelado. O problema é a utilização transparente em ambiente multi-thread e a possibilidade de utilizar o hibernate por detrás dos panos. A realidade é que esse não era o objetivo inicial, mas o mecanismo genérico está atrazado. Além disso é um exercicio para o design do toolbox já que será, provavelmente, o mais usado de todos é necessário que esteja bem solto para evoluir.</p>
<p>Por fim , queria deixar um pedido de comentário sobre as toolbox existentes e quais features seriam interessantes, como por exemplo, se deveria mesmo haver suporte ao hibernate.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=128&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/10/23/seguindo-em-frente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
		<item>
		<title>No céu do meio</title>
		<link>http://middleheaven.wordpress.com/2009/08/03/no-ceu-do-meio/</link>
		<comments>http://middleheaven.wordpress.com/2009/08/03/no-ceu-do-meio/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 11:29:02 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[MiddleHeaven]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[JCompany]]></category>

		<guid isPermaLink="false">http://middleheaven.wordpress.com/?p=119</guid>
		<description><![CDATA[O projeto Middleheaven continua  a passo curtos. Muita gente tem demonstrado o seu apoio. Obrigado. A identidade do projeto talvez esteja um pouco nebulosa porque até agora o que ha para mostrar é apenas o código e um conjunto esparso de texto falando de umas coisas chamadas toolboxes. Toolboxes são como pedaços da API, como [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=119&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">O projeto Middleheaven continua  a passo curtos. Muita gente tem demonstrado o seu apoio. Obrigado.</p>
<p style="text-align:justify;">A identidade do projeto talvez esteja um pouco nebulosa porque até agora o que ha para mostrar é apenas o código e um conjunto esparso de texto falando de umas coisas chamadas <em>toolboxes</em>. Toolboxes são como pedaços da API, como no JSE temos o JCF ,  I/O e Threads que na realidade se encaixam mas as vemos como partes separadas.</p>
<p style="text-align:justify;">O projeto começou por ser apenas um repositorio de código que eu utilizava repetidamente. Coisas como copia de arquivo e utiltários vários. Depois passou a ser um framework. Um conjunto de coisas prontas, mas complexas. À medida que construia outros frameworks mais simples eu pensava em poder levá-los até ao limite e incorporá-los no framework. Hoje, o MiddleHeaven não é mais um framework e sim uma plataforma de desenvolvimento. Uma arquitetura e design padronizada com partes extensiveis e plugáveis e um conjunto de plugins e extensões já preparadas.</p>
<p style="text-align:justify;">O MiddleHeaven pode-se comparar ao Spring no espirito de facilitar a programação e conexão de partes da aplicação.  Tal como o Spring o MiddleHeaven conta com um motor de injeção automática, mas à diferença do Spring ele não tem definição baseada em XML. Na ralidade não tem porque não foi implementado. O MiddleHeaven delega essa parte a um objeto especifico que pode ser implementado de muitas formas. Por agora, anotações são a base &#8211; pode escolher entre as do próprio MiddleHeaven ou as padrão como @Resource.</p>
<p style="text-align:justify;">Ao contrário do Spring que utiliza directamente outros frameworks e não oferece nenhum encaspulamento &#8211; no sentido que você ainda tem que saber usar esse outro framework &#8211; o MiddleHeaven oferece as suas próprias estruturas e design que pode ser extentido com implementações diversas baseadas em diferentes frameworks de terceiros.  Enquanto que no Spring estes frameworks são <em>le reason de être</em> do motor de injeção, no MiddleHeaven eles são apenas detalhes de implementação que podem mudar ou ser substituidos.</p>
<p style="text-align:justify;">Um outro framework com que poderiamos traçar um comparativo é o JCompany. O JCompany é um framework proprietário com uma versão livre que vai um passo além do Spring oferecendo um certo encapsulamento em torno de APIs de terceiros visando o máximo possivel aderir a padrões de mercado. O JCompany oferece muito já pronto e está mais para aplicação costumizável do que para framework propriamente dito. Contudo o conceito por detrás é muito semelhante ao do MiddleHeaven. A grande diferença é que &#8211; além da licença &#8211; o MiddleHeaven não corre atrás dos padrões de mercado. Esse é um objetivo explicito. Os padrões serão incorporados quando necessário e normalmente por debaixo dos panos já que todo o conceito do MiddleHeaven é exatamente abstrair toda essa parafernália de padrões e tecnologias que mudam constantemente.</p>
<p style="text-align:justify;">O MiddleHeaven é fortemente baseado, não apenas em padrões , mas também em conceitos. As abstrações do MiddleHeaven tendem a ser ir o mais longe possivel para que possam ser reutilizadas o máximo possivel.  Em alguns pontos isso pode significar menor performance ou uma complexidade extra que o programador considera desnecessária, contudo, é sempre possivel não utilizar o modelo do Middleheaven ou usá-lo parcialmente. O desafio é que o programador goste de usar o modelo do MiddleHeaven porque ele é natural.</p>
<p style="text-align:justify;">Embora eu tenha começado dizendo que o MiddleHeaven está caminhando a passos curtos isso é porque estou me referindo a todas as capacidades que foram sonhadas para ele. Contudo ele já faz muita coisa. Já é possivel desenvolver uma aplicação web no estilo do Spring MVC , o ponto que falta para fechar o ciclo e poder libertar uma versão beta ( ou talvez 0.2-alfa) é a persistencia; que está sofrendo uma remodelação.  Depois vem a parte de interação com o usuário que permitirá aplanar a diferença entre o mundo web e o desktop. Esta é a funcionalidade realmente nova do MiddleHeave,n mas  para chegar lá o básico tem que estar no lugar e ser sólido.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/119/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/119/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/119/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=119&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/08/03/no-ceu-do-meio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
		<item>
		<title>Security Toolbox</title>
		<link>http://middleheaven.wordpress.com/2009/06/23/security-toolbox/</link>
		<comments>http://middleheaven.wordpress.com/2009/06/23/security-toolbox/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 01:07:24 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://middleheaven.wordpress.com/?p=112</guid>
		<description><![CDATA[A primeira release do MiddleHeaven se aproxima. Faltam apenas duas toolboxes para poder utilizar o MiddleHeaven como plataforma para aplicações web simples. Neste estágio o MiddleHeaven seria equivalente ao Spring e a outros action-driven web-controlers. Essas toolboxes são a de Storage e a de Security. A de Storage espera apenas por um lifting na questão [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=112&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A primeira release do MiddleHeaven se aproxima. Faltam apenas duas toolboxes para poder utilizar o MiddleHeaven como plataforma para aplicações web simples. Neste estágio o MiddleHeaven seria equivalente ao Spring e a outros <em>action-driven</em> <em>web-controlers</em>.</p>
<p>Essas toolboxes são a de Storage e a de Security. A de Storage espera apenas por um lifting na questão do modelo de dominio vs modelo de persistência. Por agora o esforço nisso não é muito já que estou usando o storage baseado em banco OO para os testes e desenvolvimento de protótipos. Seria possivel liberar a release apenas usando essa feature se o tempo não ajudar.</p>
<p>Agora, uma toolbox que não pode faltar é a de segurança. O MiddleHeaven terá um toolbox especifica para lidar com licenças e o mecanismo de segurança tem que ser conciso com o modelo web e o modelo dektop. A principal concorrência é o Spring Security que é muito focado na parte web e deixa um pouco a desejar na forma de delegação e o JAAS que é padrão mas não é muito util na prática porque lhe falta uma ultima milha de integração com o dominio de segurança da aplicação final.</p>
<p>Algumas ideias já estão alinhadas mas está faltando um modelo coerente para o ambiente web e desktop que facilite a implementação de features de login/logout. 99% das aplicações* provávelmente usa a dobradinha username-password , mas isso não é sufientente hoje em dia para sites. captcha é quase que obrigatório em sites publicos.</p>
<p>Tudo isto para pedir a  sua opinião sobre quais features seriam legais e mais importante quais seriam indesejáveis de lidar.  Deixe um comentário.</p>
<p><span style="color:#000000;"><em>* </em></span><span style="font-family:Comic Sans MS,Courier New,Arial;color:#000066;font-size:x-small;"><span style="color:#000000;"><em>&#8220;Oh, as pessoas inventam estatisticas para provar qualquer coisa, Kent. 14% das pessoas sabem disso.&#8221; &#8211; Homer Simpson</em></span><br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/112/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/112/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/112/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=112&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/06/23/security-toolbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
		<item>
		<title>Novo Conteudo</title>
		<link>http://middleheaven.wordpress.com/2009/05/30/novo-conteudo/</link>
		<comments>http://middleheaven.wordpress.com/2009/05/30/novo-conteudo/#comments</comments>
		<pubDate>Sat, 30 May 2009 14:18:07 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[MiddleHeaven]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Novo]]></category>
		<category><![CDATA[Release]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[diferencial]]></category>
		<category><![CDATA[conceito]]></category>

		<guid isPermaLink="false">http://middleheaven.wordpress.com/?p=106</guid>
		<description><![CDATA[O MiddleHeaven caminha a passos largos para um release que possa ser utilizado para fazer aplicações web basedas em JSP. Foi adicionada a antevisão da toolbox de bootstrap para que se entenda como o MiddleHeaven carrega e se mantem a sua aplicação isolada. Foi adicionada também a antevisão da toolbox de critérios. Quanto a mim [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=106&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O MiddleHeaven caminha a passos largos para um release que possa ser utilizado para fazer aplicações web basedas em JSP.</p>
<p>Foi adicionada a antevisão da toolbox de bootstrap para que se entenda como o MiddleHeaven carrega e se mantem a sua aplicação isolada. Foi adicionada também a antevisão da toolbox de critérios. Quanto a mim uma das preciosidades do MiddleHeaven que o diferencia de todos os outros frameworks e API por ai. Um cutucada ao Hibernate está inclusa (<em>pun intended</em>).</p>
<p>A mudança de layout é devida à falha do anterior em mostrar o menu ao lado quando na área de páginas.</p>
<p>Enquanto o MiddleHeaven não tem uma nova release, vá absorvendo todos os novos (novos?) conceitos que ele trás.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=106&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/05/30/novo-conteudo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
		<item>
		<title>Utilitários: Coleções aumentadas</title>
		<link>http://middleheaven.wordpress.com/2009/05/12/utilitarios-colecoes-aumentadas/</link>
		<comments>http://middleheaven.wordpress.com/2009/05/12/utilitarios-colecoes-aumentadas/#comments</comments>
		<pubDate>Tue, 12 May 2009 22:11:44 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[MiddleHeaven]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Fluente]]></category>
		<category><![CDATA[Avançado]]></category>

		<guid isPermaLink="false">http://middleheaven.wordpress.com/?p=76</guid>
		<description><![CDATA[A plataforma java oferece uma vasto suporte ao conceito de conjuntos (coleções e mapas), mas não tão vasto quanto poderia ser. A limitação à API de coleções atual é o uso da classe Colections para coisas avanaçadas como ordenação e a falta de suporte a Closures pelo Java. Mesmo se o Java tivesse suporte, depois [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=76&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p align="justify">A plataforma java oferece uma vasto suporte ao  	<a href="http://sergiotaborda.wordpress.com/java/colecoes-em-java/" target="_new"> conceito de conjuntos</a> (coleções e mapas), mas não tão vasto quanto  	poderia ser.</p>
<p align="justify">A limitação à API de coleções atual é o uso da classe Colections para  	coisas avanaçadas como ordenação e a falta de suporte a Closures pelo  	Java. Mesmo se o Java tivesse suporte, depois das discussões para o Java 7 &#8211; 	a closures não ha garantia de que a API de coleções seria alterada.</p>
<p align="justify">Mesmo com o suporte a coleções da plataforma falta suporte a outras estruturas  	- que não sendo coleções &#8211; estão relacionadas a teoria de conjuntos como  	intervalos.</p>
<h2>Intervalo</h2>
<p align="justify">O MiddleHeaven dá suporta a intervalos pela classe <span style="font-family:courier;">Interval</span> definida  	conjunto de elementos ordenável. Elemento ordenável é todo aquele que implements <span style="font-family:courier;">Comparable</span> ou a que se possa associar um <span style="font-family:courier;">Comparator</span>. 	Um intervalo pode ser fechado ( tem principio e fim) , aberto ( sem principio 	ou sem fim) ou vazio ( o principio e o fim são iguais).</p>
<p align="justify">A classe <span style="font-family:courier;">Interval</span> suporta várias operações que podem ser feitas  	sobre ou com intervalos, tais como interseção, união ou verificar se um elemento  	está no intervalo.</p>
<p align="justify">Era importante incluir conceito de intervalo. Isso é especialmente relevante  	o dominio de tempos e datas (<a href="../toolboxes/quantidades-e-medidas/time-toolbox/" target="_new">Time Toolbox</a>) 	onde é comum definir intervalos de tempo. O MiddleHeaven define <span style="font-family:courier;">TimeInterval</span> como uma extensão de <span style="font-family:courier;">Interval</span> aplicada a <span style="font-family:courier;">TimePoint</span> e adiciona operações relacionadas a tempo como a conversão para <span style="font-family:courier;">Period</span></p>
<h2>Range</h2>
<p align="justify">Um intervalo não é iterável porque ele pode ser aberto. Para ter um objeto semelhante a um intervalo  	mas que é iterável temos o <span style="font-family:courier;">Range</span>. O objeto <span style="font-family:courier;">Range</span> parece-se muito com um intervalo,  	mas podemos iterar os elementos através de um <span style="font-family:courier;">Incrementator</span>.   	Um incrementador permite passar de um elemento ao próximo de uma forma controlada. Por exemplo, 	para passar de 1 a 2 adicionamos 1, mas para passar de 2009-09-10 a 2009-09-11 temos que obter a proxima data. 	Não podemos simplesmente adicionar 1.</p>
<p align="justify">O incrementador é especialmente relevante para elementos de um conjunto ordenável e denso como os numeros reais, já que para estes tipos de conjunto não podemos determinar qual é o proximo elemento a partir de um elemento dado. Por exemplo, nos numeros reais, a seguir a 1 existe um numero, mas não é 2, nem 1.5, nem 1.1, nem 1.0000001 , nem &#8230; Por causa desta impossibilidade matemática, ao criar um <span style="font-family:courier;">Range</span> sobre um      conjunto denso é necessário estabelecer o passo através de um incrementador. Por exemplo de 1 em 1, poderiamos     iterar de 2 a 5 e teriamos [2, 3 ,4, 5] , mas como passo de 0.5 teriamos [2, 2.5 , 3 , 3.5 , 4 , 4.5 , 5].</p>
<h2>Caminhando sobre o conjunto</h2>
<p align="justify">A API de collections é muito boa usando o padrão Iterator ( um dos padrões GoF) mas falha usando o  	padrão Visitor (também do GoF) . O padrão visitor é muito util para fazer passar um objeto por todos  	os elementos da coleção.  Assim, a coleção recebe um objeto que visita todos os elementos para um  	determinado fim. O padrão visitor é muito util porque esconde a iteração do for ou do while e  	desta maneira deixa a coleção fazer a caminhada pelos elementos como ela quiser ( em tese da forma mais eficiente).   	O padrão Visitor é aquele que seria utilzado por closures, caso elas existissem para aplicar uma certa logica 	a cada elementos do conjunto. O MiddleHeaven suporta o conceito por detrás do padrão visitor e introduz as  	interfaces <span style="font-family:courier;">Walkable</span> e <span style="font-family:courier;">Walker</span>. Um <span style="font-family:courier;">Walkable</span> é um objeto que pode  	ser &#8220;caminhado&#8221; por um &#8220;caminhante&#8221; (<span style="font-family:courier;">Walker</span>) em analogia a que um objeto  <span style="font-family:courier;">Iterable</span> pode ser iterado 	através de um <span style="font-family:courier;">Iterator</span>.</p>
<p align="justify">A interface <span style="font-family:courier;">Walker</span> apenas define um método genérico <span style="font-family:courier;">doWith()</span> que pode ser usado  	 para qualquer coisa. Embora o método não defina um retorno explicito, é possivel implementar uma outra classe 	 que implemente esta interface e permita o acesso a um resultado através de outro objeto. 	 Esse é o caso, por exemplo, de <span style="font-family:courier;">NumberAcumulator</span> que extend <span style="font-family:courier;">Acumulator</span> e implementa <span style="font-family:courier;">Walker</span> e permite somar valores continos na coleção.</p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">1</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">2</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">NumberAcumulator&lt;Real&gt; acumulator = NumberAcumulator.instance</span> <span style="color:#000000;">()</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">3</span> <span style="color:#ffffff;"> </span><br />
<span style="color:#808080;">4</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">Range range = Range.over</span> <span style="color:#000000;">(</span> <span style="color:#000000;">Real.valueOf</span> <span style="color:#000000;">(</span> <span style="color:#990000;">1</span> <span style="color:#000000;">)</span> <span style="color:#000000;">, Real.valueOf</span> <span style="color:#000000;">(</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">,Real.ONE</span> <span style="color:#000000;">())</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">5</span> <span style="color:#ffffff;"> </span> <span style="color:#008000;">// calcula a soma de 1 até 6</span><br />
<span style="color:#808080;">6</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">range.each</span> <span style="color:#000000;">(</span> <span style="color:#000000;">acumulator</span> <span style="color:#000000;">)</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">7</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">8</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">assertEquals</span> <span style="color:#000000;">(</span> <span style="color:#000000;">Real.valueOf</span> <span style="color:#000000;">(</span> <span style="color:#990000;">21</span> <span style="color:#000000;">)</span> <span style="color:#000000;">, acumulator.getResult</span> <span style="color:#000000;">())</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">9</span> <span style="color:#ffffff;"> </span> </span></span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 1: Exemplo de uso de acumulador</td>
</tr>
</tbody>
</table>
<p align="justify">Aqui utilizámos a classe <span style="font-family:courier;">Real</span> porque <span style="font-family:courier;">NumberAcumulator</span> precisa de um objeto que implemente 	 a estrutura matemática <span style="font-family:courier;">GroupAditive</span>. <span style="font-family:courier;">Real</span> implementa uma forma especial de criar <span style="font-family:courier;">Range</span> O código ficaria assim:</p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">1</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">2</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">NumberAcumulator&lt;Real&gt; acumulator = NumberAcumulator.instance</span> <span style="color:#000000;">()</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">3</span> <span style="color:#ffffff;"> </span><br />
<span style="color:#808080;">4</span> <span style="color:#ffffff;"> </span> <span style="color:#008000;">// calcula a soma de 1 até 6</span><br />
<span style="color:#808080;">5</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">Real.ONE</span> <span style="color:#000000;">()</span> <span style="color:#000000;">.upTo</span> <span style="color:#000000;">(</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">.each</span> <span style="color:#000000;">(</span> <span style="color:#000000;">acumulator</span> <span style="color:#000000;">)</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">6</span> <span style="color:#ffffff;"> </span><br />
<span style="color:#808080;">7</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">assertEquals</span> <span style="color:#000000;">(</span> <span style="color:#000000;">Real.valueOf</span> <span style="color:#000000;">(</span> <span style="color:#990000;">21</span> <span style="color:#000000;">)</span> <span style="color:#000000;">, acumulator.getResult</span> <span style="color:#000000;">())</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">8</span> <span style="color:#ffffff;"> </span><br />
<span style="color:#808080;">9</span> <span style="color:#ffffff;"> </span> </span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 2: Simplificação para criar um Range</td>
</tr>
</tbody>
</table>
<p align="justify">Imprimir os numeros de 1 a 6 mostra um uso mais tradicional do <span style="font-family:courier;">Walker</span></p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">01</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">02</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">Range.over</span> <span style="color:#000000;">(</span> <span style="color:#990000;">1</span> <span style="color:#000000;">,</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">.each</span> <span style="color:#000000;">(</span> <span style="color:#0000c0;"> <strong>new </strong> </span> <span style="color:#000000;">Walker</span> <span style="color:#000000;">(){</span><br />
<span style="color:#808080;">03</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">04</span> <span style="color:#ffffff;"> </span> <span style="color:#0000c0;"> <strong>public </strong> </span> <span style="color:#c00000;"> <strong>void </strong> </span> <span style="color:#000000;">doWith</span> <span style="color:#000000;">(</span> <span style="color:#000000;">Integer it</span> <span style="color:#000000;">){</span><br />
<span style="color:#808080;">05</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">06</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">System.out.println</span> <span style="color:#000000;">(</span> <span style="color:#000000;">it</span> <span style="color:#000000;">)</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">07</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">08</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">}</span><br />
<span style="color:#808080;">09</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">10</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">})</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">11</span> <span style="color:#ffffff;"> </span> </span></span></span></span></span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 3: Usando Walker</td>
</tr>
</tbody>
</table>
<p>Em java puro não teria muito ganho porque este Walker é muito simples. Mas se o Walker executar operações  	 complexas (mais de 5 linhas)  escrever isso dentro de um for é  confuso.  colocando isso em uma objeto 	  é possivel definir a logia à parte e de forma genérica. Este é o objetivo, entre outros,  de trazer  	  closures para Java. Segundo as tendencias qualquer interface poderia ser substituida por uma closure.  	  Embora closures não venham na versão 7 do Java  é quase certo que virão em algum ponto.  	  Enquanto não, as classe anónimas internas terão que servir.O ganho real viria da simplificação  	  da sintaxe com o uso de Closures. Se um dia elas vierem vc poderia escrever assim:</p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">1</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">2</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">Range.over</span> <span style="color:#000000;">(</span> <span style="color:#990000;">1</span> <span style="color:#000000;">,</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">.each</span> <span style="color:#000000;">() {</span> <span style="color:#000000;">System.out.println</span> <span style="color:#000000;">(</span> <span style="color:#000000;">it</span> <span style="color:#000000;">) }</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">3</span> <span style="color:#ffffff;"> </span> </span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 4: Exemplo de como seria o uso de Closures em futuras versões do Java</td>
</tr>
</tbody>
</table>
<p align="justify">Um outro tipo de  <span style="font-family:courier;">Walker</span> importante é aquele que caminha sobre uma arvore. 	 Para este tipo de objetos o MiddleHeaven introduz a interface <span style="font-family:courier;">TreeWalkable</span> que extende  	  <span style="font-family:courier;">Walkable</span> com os métodos <span style="font-family:courier;">eachRecursive()</span> e <span style="font-family:courier;">eachParent()</span>.  	 O método <span style="font-family:courier;">eachRecursive</span> aplica o  <span style="font-family:courier;">Walker</span> ao objeto, depois aos filhos  	 e depois aos filhos dos filhos, etc..  	 O método eachParent() é aplicado ao pai do objeto corrente e depois ao desse , assim até à raiz. 	 <span style="font-family:courier;">TreeWalkable</span> é especialmente útil para estruturas como o sistema de arquivos.  	 <span style="font-family:courier;">ManagedFile</span> da <a href="../toolboxes/managed-file-toolbox/" target="_new"> Managed File Toolbox</a> implementa esta interface.</p>
<h2>Enumerable</h2>
<p align="justify">A classe utilitária <span style="font-family:courier;">Collections</span> permite utilizar vários métodos sobre objetos que estendam <span style="font-family:courier;">Collection</span> ou <span style="font-family:courier;">Map</span>. Isso é feito para que os mapas e coleções em Java não tenham que implementar um numero elevado de métodos 	 assim diminuindo a sua área de superfície. Isto é considerado uma boa prática. Contudo é estre,amente chato e ineficiente 	 já que cada implementação não pode otimizar o processo definido pelo contrato do método. Além disso a chamada dos métodos 	 é pouco encadeável o que confunde os programadores iniciantes e frustra os experientes.</p>
<p align="justify">Um outro problema com os mapas e coleções em java é a fala de uma interface comum para coleções e mapas.</p>
<p align="justify">O MiddleHeaven introduz a interface <span style="font-family:courier;">Enumerable</span> (enumerável). Esta interface serve dois propósitos: 1) o de prover uma interface 	 comum para mapas e coleções e extender o numero de métodos directamente invocáveis sobre os conjuntos.Um <span style="font-family:courier;">Enumerable</span> é uma expanção do conceito de <span style="font-family:courier;">Iterator</span>.   	 Todos os <span style="font-family:courier;">Enumerable</span> são <span style="font-family:courier;">Iterator</span> mas têm mais coisas a oferecer.</p>
<p align="justify">A maior parte dos métodos de <span style="font-family:courier;">Enumerable</span> recebem implementações de <span style="font-family:courier;">Classifier</span>.  	 Este é um objeto que dado um objeto de um tipo retorna outro objeto do mesmo ou de outro tipo.  	 Em particular pode retornar um objeto do tipo <span style="font-family:courier;">Boolean</span>. A maior parte dos métodos de  	 <span style="font-family:courier;">Enumerable</span> usam classificadores para boolean excepto <span style="font-family:courier;">map</span> que usa  	 classificadores para qualquer outro objeto. O  objeto <span style="font-family:courier;">Classifier</span> pode ser usado como  	 filtro ou como transformador. Por exemplo, usando o método <span style="font-family:courier;">find()</span> é possivel encontrar  	 um objeto que passe no teste do classificador passado como argumento. Tudo isto sem ter que escrever 	 nenhuma instrução <span style="font-family:courier;">for</span>.</p>
<p align="justify"><span style="font-family:courier;">Enumerable</span> implementa <span style="font-family:courier;">Walkable</span> e todas as operações com <span style="font-family:courier;">Classifier</span> geram novos  	 conjuntos após aplicar o classificador a todos os elementos 	 do ocnjunto. Os métodos que usam <span style="font-family:courier;">Classifier</span> implementam o padrão Visitor de forma semelhante a <span style="font-family:courier;">Walker</span>, 	 a diferença é que o resultado obtido pelo <span style="font-family:courier;">Walker</span> não é convertido para um outro conjunto, enquanto que os que usam  	 <span style="font-family:courier;">Classifier</span> são.</p>
<p align="justify">Com isto o MiddleHeaven extende as interfaces <span style="font-family:courier;">Collection</span>,<span style="font-family:courier;">Set</span>, <span style="font-family:courier;">List</span> e <span style="font-family:courier;">Map</span> implementando <span style="font-family:courier;">Enumerable</span> e mais alguns métodos interessantes. Estes conjuntos são chamados de coleções aumentadas (enhanced)  	 e implementam as interfaces <span style="font-family:courier;">EnhancedCollection</span>, <span style="font-family:courier;">EnhancedSet</span> , <span style="font-family:courier;">EnhancedList</span> e <span style="font-family:courier;">EnhancedMap</span> respectivamente.  	 Para os obter basta invocar <span style="font-family:courier;">CollectionUtils.enhance()</span>. O uso deste método é inivitável em Jaa devido ao fato 	 de não ser possivel adicionar este método nas interfaces já existentes.  	 Criar uma coleção aumentada é muito simples:</p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">1</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">2</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">List&lt;Integer&gt; lista = Arrays.asList</span> <span style="color:#000000;">(</span> <span style="color:#990000;">1</span> <span style="color:#000000;">,</span> <span style="color:#990000;">2</span> <span style="color:#000000;">,</span> <span style="color:#990000;">3</span> <span style="color:#000000;">,</span> <span style="color:#990000;">4</span> <span style="color:#000000;">,</span> <span style="color:#990000;">5</span> <span style="color:#000000;">,</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">; </span> <span style="color:#008000;">// lista na plataforma Java</span><br />
<span style="color:#808080;">3</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">4</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">EnhancedList&lt;Integer&gt; elista = CollectionUtils.enhance</span> <span style="color:#000000;">(</span> <span style="color:#000000;">lista</span> <span style="color:#000000;">)</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">5</span> <span style="color:#ffffff;"> </span><br />
<span style="color:#808080;">6</span> <span style="color:#ffffff;"> </span> </span></span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 5: Aumentando (enhancing) uma lista</td>
</tr>
</tbody>
</table>
<p align="justify"><span style="font-family:courier;">Enumerable</span> permite enumerar e iterar sobre um conjunto em uma certa ordem. Mas e que tal 	 obter um elemento aleatóriamente de uma lista ou coleção ? O MiddleHeaven inclui a interface  	 <span style="font-family:courier;">RandomEnumerable</span>. Esta interface define o método <span style="font-family:courier;">random()</span> que seleciona um elmento 	 aleatóriamente da coleção. Isso permite o sorteio de numeros em uma linha de codigo.  	 Por exemplo para sortear os numeros de um dado fariamos:</p>
<table border="0" align="center">
<tbody>
<tr align="center">
<td>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><span style="color:#808080;">1</span> <span style="color:#ffffff;"><br />
<span style="color:#808080;">2</span> <span style="color:#ffffff;"> </span> <span style="color:#000000;">Integer resultado = Range.over</span> <span style="color:#000000;">(</span> <span style="color:#990000;">1</span> <span style="color:#000000;">,</span> <span style="color:#990000;">6</span> <span style="color:#000000;">)</span> <span style="color:#000000;">.random</span> <span style="color:#000000;">()</span> <span style="color:#000000;">;</span><br />
<span style="color:#808080;">3</span> <span style="color:#ffffff;"> </span> </span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td class="legend">
<hr />Código 6: Sorteando um numero de um dado</td>
</tr>
</tbody>
</table>
<h2>Porquê</h2>
<p align="justify">Muitos já tentaram criar bibliotecas alternativas para coleções. A Apache Commons Collections existia mesmo antes 	 da API ser padrão na plataforma Java. Trabalhar com conjuntos é realmente uma facilidade que permite ao mesmo tempo 	 tipagem forte, algoritmos eficientes e simplicidade para trabalhar com muitos objetos simultaneamente. O MiddleHeaven 	 não poderia,portanto, se escusar que dar algum suporte a coleções.</p>
<p align="justify">Com o olho no Java 7 e a suposta introdução de closures, as coleções aumentadas teriam um uso mais simples e omnipresente 	 mas mesmo sem a funcionalidade de closures ha muita coisa que é mais fácil de ser feita com o uso destas coleções. 	 Por outro lado, devido à necessidade de suportar intervalos (sobretudo os de tempo) era necessário introduzir  	 classes diferentes mas de forma compatível. Mas um intervalo não é iterável, então foi criado o objeto Range.</p>
<p align="justify">Converter qualquer conjunto da plataforma padrão para a biblioteca aumentada é muito simples. Aliás , à exceção de <span style="font-family:courier;">EnhancedArrayList</span> que pode ser usada independente, aumentar uma coleção já existente é a única forma de obter uma coleção aumentada.</p>
<p align="justify"><a href="http://polldaddy.com/poll/1615736/">View This Poll</a></p>
<table style="height:24px;" border="0" width="334" align="center">
<tbody>
<tr>
<td align="center" valign="center"></td>
<td align="left" valign="top"></td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=76&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/05/12/utilitarios-colecoes-aumentadas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello World!</title>
		<link>http://middleheaven.wordpress.com/2009/04/21/hello-world/</link>
		<comments>http://middleheaven.wordpress.com/2009/04/21/hello-world/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 01:37:22 +0000</pubDate>
		<dc:creator>sergiotaborda</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MiddleHeaven]]></category>
		<category><![CDATA[Avançado]]></category>
		<category><![CDATA[Dominio]]></category>
		<category><![CDATA[Negocios]]></category>
		<category><![CDATA[Novo]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Quem segue o meu blog sabe do projeto MiddleHeaven. Este é um projeto bastante grande e complexo e que até agora ainda está apenas em uma versão pré-alfa. O projeto conta um com site estático de apoio hospedado no sourceforge e um blog em inglês para suporte. Até a presente data, embora o blog tenha [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=1&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Quem segue o <a href="http://sergiotaborda.wordpress.com" target="_blank">meu blog</a> sabe do projeto MiddleHeaven. Este é um projeto bastante grande e complexo e que até agora ainda está apenas em uma versão pré-alfa.</p>
<p style="text-align:justify;">O projeto conta um com <a href="http://middleheaven.sourceforge.net/" target="_blank">site estático de apoio hospedado no sourceforge </a>e um <a href="http://middleheavendev.blogspot.com/" target="_blank">blog em inglês</a> para suporte.</p>
<p style="text-align:justify;">Até a presente data, embora o blog tenha sido muito visitado por pessoas em todo o mundo, não está tendo a participação que desejo. Enquanto o projeto não está instalado em um servidor próprio, o blog deveria funcionar para aprender e comentar de forma semelhante a um fórum. Contudo, parece que a barreira da língua atrapalha a maioria dos interessados, que ao julgar pelas estatísticas de visita, são pessoas que utilizam o português.</p>
<p style="text-align:justify;">Assim, decidi criar este blog em português. Agora a barreira da língua deve cair. É claro que para mim também é mais rápido escrever em português  e com isso o material disponível deve também aumentar.</p>
<p style="text-align:justify;">A ideia deste de blog é levar as pessoas a entenderem a ideia por trás do projeto e levá-las a usá-lo para os seus projetos e quem sabe a participar do seu desenvolvimento.</p>
<p style="text-align:justify;"><a href="http://polldaddy.com/poll/1558208/">View This Poll</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/middleheaven.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/middleheaven.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/middleheaven.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=middleheaven.wordpress.com&amp;blog=7451890&amp;post=1&amp;subd=middleheaven&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://middleheaven.wordpress.com/2009/04/21/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/84fccde7d88e713b88daa2284669c8aa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sergiotaborda</media:title>
		</media:content>
	</item>
	</channel>
</rss>
