<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Decorando um jogo com o padrão de projetos Decorator &#8211; Parte 1</title>
	<atom:link href="http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/feed/" rel="self" type="application/rss+xml" />
	<link>http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/</link>
	<description>Análise e Projeto de sistemas de um jeito tão fácil quanto jogar videogame</description>
	<lastBuildDate>Mon, 19 Jul 2010 19:08:40 -0300</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Tiago Frossard</title>
		<link>http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/comment-page-1/#comment-16018</link>
		<dc:creator>Tiago Frossard</dc:creator>
		<pubDate>Mon, 28 Dec 2009 02:12:51 +0000</pubDate>
		<guid isPermaLink="false">http://nusseagora.blog.br/?p=403#comment-16018</guid>
		<description>Pois então, Leonardo. Inicialmente, quero esclarecer que essa não é uma lógica minha e sim uma padrão de projetos já catalogado é utilizado há anos, como visto aqui http://nusseagora.blog.br/padroes-de-projeto-o-que-sao-e-pra-que-servem/ .

Pensando imediatamente, sua solução parece ser bem melhor. Porém, a longo prazo, se eu entendi bem, ela vai gerar problemas de manutenibilidade.

Você disse para colocarmos em um array os valores dos bônus. Isso implica na reprodução do mesmo efeito em várias armas diferentes, um +5 em cada. Porém, quando tivermos que balancear esse efeito para, por exemplo, +6, teremos que ir na mão em todos os objetos e alterar tal valor, já que ele não está centralizado em uma classe específica.

Além disso, vc diz para que um método em TArmaItem avalie os efeitos possíveis de TArmaItem. Isso também parece o mais simples a ser feito, porém torna-se complicado trabalhar com essa lógica em um jogo como o World of Warcraft (do meu exemplo) onde temos mais de 200 efeitos possíveis em um item. Teríamos um método gigantesco com um switch case que gastaria processamento e memória para descobrir, por exemplo, que somente 1 desses efeitos estava ativo no seu item. 

Também há o cenário onde tal método fosse obrigado a testar vários bônus que não fossem específicos daquela arma.

O Decorator resolve esses problemas de uma forma prática, extremamente compacta e manutenível por dar a um objeto novas responsabilidades em tempo de execução e não em tempo de desenvolvimento. O código base nunca muda, independente de quantos efeitos uma arma venha a ter, levando também em conta dela não ter efeito algum.

Espero que tenha endendido a vantagem do padrão. Para mais informações, não deixe de ler também o artigo sobre ele na wikipédia: http://en.wikipedia.org/wiki/Decorator_pattern</description>
		<content:encoded><![CDATA[<p>Pois então, Leonardo. Inicialmente, quero esclarecer que essa não é uma lógica minha e sim uma padrão de projetos já catalogado é utilizado há anos, como visto aqui <a href="http://nusseagora.blog.br/padroes-de-projeto-o-que-sao-e-pra-que-servem/" rel="nofollow">http://nusseagora.blog.br/padroes-de-projeto-o-que-sao-e-pra-que-servem/</a> .</p>
<p>Pensando imediatamente, sua solução parece ser bem melhor. Porém, a longo prazo, se eu entendi bem, ela vai gerar problemas de manutenibilidade.</p>
<p>Você disse para colocarmos em um array os valores dos bônus. Isso implica na reprodução do mesmo efeito em várias armas diferentes, um +5 em cada. Porém, quando tivermos que balancear esse efeito para, por exemplo, +6, teremos que ir na mão em todos os objetos e alterar tal valor, já que ele não está centralizado em uma classe específica.</p>
<p>Além disso, vc diz para que um método em TArmaItem avalie os efeitos possíveis de TArmaItem. Isso também parece o mais simples a ser feito, porém torna-se complicado trabalhar com essa lógica em um jogo como o World of Warcraft (do meu exemplo) onde temos mais de 200 efeitos possíveis em um item. Teríamos um método gigantesco com um switch case que gastaria processamento e memória para descobrir, por exemplo, que somente 1 desses efeitos estava ativo no seu item. </p>
<p>Também há o cenário onde tal método fosse obrigado a testar vários bônus que não fossem específicos daquela arma.</p>
<p>O Decorator resolve esses problemas de uma forma prática, extremamente compacta e manutenível por dar a um objeto novas responsabilidades em tempo de execução e não em tempo de desenvolvimento. O código base nunca muda, independente de quantos efeitos uma arma venha a ter, levando também em conta dela não ter efeito algum.</p>
<p>Espero que tenha endendido a vantagem do padrão. Para mais informações, não deixe de ler também o artigo sobre ele na wikipédia: <a href="http://en.wikipedia.org/wiki/Decorator_pattern" rel="nofollow">http://en.wikipedia.org/wiki/Decorator_pattern</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leonardo</title>
		<link>http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/comment-page-1/#comment-16016</link>
		<dc:creator>Leonardo</dc:creator>
		<pubDate>Sun, 27 Dec 2009 13:53:22 +0000</pubDate>
		<guid isPermaLink="false">http://nusseagora.blog.br/?p=403#comment-16016</guid>
		<description>Para ser sincero, não entendi a utilidade nem a praticidade disso tudo...
Creio que o certo seria uma classe &quot;TArmaBase&quot; e uma classe &quot;TArmaItem&quot;. O item tem referência à arma base, mais um vetor com quaisquer os efeitos que seja necessário adicionar. Uma função na classe TArmaItem avalia os efeitos (se isso for necessário).
Por exemplo, a base da arma - digamos, Espada Larga - tem 12 de força. Você recebe uma Espada Larga no jogo e um Item é adicionado ao seu inventário. Se, por exemplo, você levar a espada a um ferreiro e ele aumentar a força em 5 pontos, você adiciona o efeito &quot;força +5&quot; ao item. Para retornar a força final, você chama uma função retornaForça() que calcula a força final.
Não por menos, o artigo está muito bem escrito, parabéns. Mas sua lógica não funciona muito bem na prática...</description>
		<content:encoded><![CDATA[<p>Para ser sincero, não entendi a utilidade nem a praticidade disso tudo&#8230;<br />
Creio que o certo seria uma classe &#8220;TArmaBase&#8221; e uma classe &#8220;TArmaItem&#8221;. O item tem referência à arma base, mais um vetor com quaisquer os efeitos que seja necessário adicionar. Uma função na classe TArmaItem avalia os efeitos (se isso for necessário).<br />
Por exemplo, a base da arma &#8211; digamos, Espada Larga &#8211; tem 12 de força. Você recebe uma Espada Larga no jogo e um Item é adicionado ao seu inventário. Se, por exemplo, você levar a espada a um ferreiro e ele aumentar a força em 5 pontos, você adiciona o efeito &#8220;força +5&#8243; ao item. Para retornar a força final, você chama uma função retornaForça() que calcula a força final.<br />
Não por menos, o artigo está muito bem escrito, parabéns. Mas sua lógica não funciona muito bem na prática&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tiago Frossard</title>
		<link>http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/comment-page-1/#comment-15948</link>
		<dc:creator>Tiago Frossard</dc:creator>
		<pubDate>Sun, 11 Oct 2009 12:09:29 +0000</pubDate>
		<guid isPermaLink="false">http://nusseagora.blog.br/?p=403#comment-15948</guid>
		<description>Valeu, Mário. E vê se aparece mais vezes, teu sumido.</description>
		<content:encoded><![CDATA[<p>Valeu, Mário. E vê se aparece mais vezes, teu sumido.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mário Marinato</title>
		<link>http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/comment-page-1/#comment-15946</link>
		<dc:creator>Mário Marinato</dc:creator>
		<pubDate>Sat, 10 Oct 2009 15:32:03 +0000</pubDate>
		<guid isPermaLink="false">http://nusseagora.blog.br/?p=403#comment-15946</guid>
		<description>Excelente artigo, Frossard.  Vou recomendá-lo para os camaradas do serviço.

Parabéns.</description>
		<content:encoded><![CDATA[<p>Excelente artigo, Frossard.  Vou recomendá-lo para os camaradas do serviço.</p>
<p>Parabéns.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
