<?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>Nuss... E Agora?!? &#187; Action Script 3.0</title>
	<atom:link href="http://www.nusseagora.blog.br/tag/action-script-3-0/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nusseagora.blog.br</link>
	<description></description>
	<lastBuildDate>Fri, 04 Feb 2011 12:56:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Portal da Adobe de desenvolvimento de jogos em Actionscript 3.0</title>
		<link>http://www.nusseagora.blog.br/portal-da-adobe-de-desenvolvimento-de-jogos-em-actionscript-3-0</link>
		<comments>http://www.nusseagora.blog.br/portal-da-adobe-de-desenvolvimento-de-jogos-em-actionscript-3-0#comments</comments>
		<pubDate>Fri, 25 Dec 2009 07:05:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Leitura recomendada]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[desenvolvimento de jogos]]></category>
		<category><![CDATA[jogo]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=871</guid>
		<description><![CDATA[O portal é o Adobe Flash Platform Game Technology Center. Ele conta com artigos, tutoriais e códigos em Actionscript 3.0, tanto no Flash quanto no Flex, além de reunir links para outros portais voltados para o desenvolvimento de jogos em SWF, me lembrando muito o que o Gamasutra é para C/C++/OpenGL. Ótimo passo da Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>O portal é o <a href="http://www.adobe.com/devnet/games/" target="_blank">Adobe Flash Platform Game Technology Center</a>. Ele conta com artigos, tutoriais e códigos em Actionscript 3.0, tanto no Flash quanto no Flex, além de reunir links para outros portais voltados para o desenvolvimento de jogos em SWF, me lembrando muito o que o Gamasutra é para C/C++/OpenGL.</p>
<p>Ótimo passo da Adobe que tem por padrão publicar artigos de altíssimo nível. O portal promete derrubar os mitos por trás da programação em actionscript e trazer uma nova era para o desenvolvimento nas ferramentas, o que torna-o extremamente recomendado tanto para quem já tem experiência quanto para quem está perdido e não sabe por onde começar.</p>
<p style="text-align: right;"><em>Valeu ao pessoal da <a href="http://www.loodo.com.br/" target="_blank">Loodo</a> pela dica no <a href="http://twitter.com/Loodo" target="_blank">twitter</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/portal-da-adobe-de-desenvolvimento-de-jogos-em-actionscript-3-0/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 3</title>
		<link>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-3</link>
		<comments>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-3#comments</comments>
		<pubDate>Tue, 22 Dec 2009 10:55:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Observer]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=866</guid>
		<description><![CDATA[Segue abaixo a 3a parte do artigo sobre o padrão de projetos Observer. Prá começar, aí está o Diagrama de Classes: Ele é simples como a estrutura do padrão: as classes que são observadoras implementam a interface IObserver, o sujeito observado implementa a ISubect que, por sua vez, tem um conjunto de IObservers. Aqui você [...]]]></description>
			<content:encoded><![CDATA[<p>Segue abaixo a 3a parte do artigo sobre o padrão de projetos Observer.</p>
<p><span id="more-866"></span>Prá começar, aí está o Diagrama de Classes:</p>
<p><img class="aligncenter size-full wp-image-867" title="diagrama-de-classe-observer" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/12/diagrama-de-classe-observer.jpg" alt="diagrama-de-classe-observer" width="400" height="582" /></p>
<p>Ele é simples como a estrutura do padrão: as classes que são observadoras implementam a interface <em>IObserver</em>, o sujeito observado implementa a <em>ISubect</em> que, por sua vez, tem um conjunto de <em>IObservers</em>.</p>
<p>Aqui você baixa o código do projeto CS3 em Actionscript 3.0  [download id="3"]</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 1</title>
		<link>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-1</link>
		<comments>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-1#comments</comments>
		<pubDate>Sun, 15 Nov 2009 23:13:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=830</guid>
		<description><![CDATA[Imagine a cena: Você resolve passear com seu filho, prometendo a ele mostrar uma surpresa no final do trajeto. Como qualquer menino inquieto que se preze, ele passa os primeiros 15 minutos do passeio perguntando “Já chegou? Já chegou? Já chegou? Já chegou? Já chegou?”. Esperto como só você seria, resolve cortar as perguntas do [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine a cena: Você resolve passear com seu filho, prometendo a ele mostrar uma surpresa no final do trajeto. Como qualquer menino inquieto que se preze, ele passa os primeiros 15 minutos do passeio perguntando <em>“Já chegou? Já chegou? Já chegou? Já chegou? Já chegou?”</em>. Esperto como só você seria, resolve cortar as perguntas do garoto com uma única resposta: <em>“Quando chegar, eu te aviso”</em>.</p>
<p>Apesar de simples, isso é tudo que você precisa saber antes de ler sobre o padrão Observer (Observador).</p>
<p><span id="more-830"></span></p>
<p>No exemplo anterior temos todas as entidades do padrão Observer bem definidas. Seu filho é o <em>Observador</em>, aquele que está ali ansioso, esperando seu aviso de quando é que a tal surpresa vai chegar. Já você é o que chamamos de <em>Sujeito Observado</em>, quem detém a informação da surpresa, a função de identificar quando ela já pode ser mostrada e avisar a seu observador que chegou a hora dele vê-la.</p>
<p>Como podemos ver, os <strong>Observadores</strong> se registram no <strong>Sujeito Observado</strong>, esperando só o momento de reagir às mudanças no <strong>Sujeito</strong>. Outro exemplo claro da lógica do padrão Observador é assinar os feeds de um site ou uma revista qualquer: todos os assinantes são avisados quando os novos artigos são publicados, bastando esperar para que isso aconteça.</p>
<p>O funcionamento do padrão é simples, mas os ganhos com ele são muito grandes. Com ele você consegue poupar o processador de inúmeras requisições frustradas (como todos os <em>“Já chegou?”</em> antes de realmente ter chegado), deixando para avisar a todos aqueles que se registraram como observadores quando o evento esperado ocorrer. Até que isso ocorra, eles ficam lá, quietinhos, sem encher o saco de ninguém...</p>
<p>O padrão é tão importante que, em muitos casos, seu uso é completamente transparente, sendo já embutido aos frameworks. No Actionscript 3.0, por exemplo, quando utilizamos um eventListerner, não estamos fazendo nada mais que utilizar o padrão. A seguinte linha...</p>
<pre class="brush:java">_botao.addEventListener(MouseEvent.CLICK, aoClicar);</pre>
<p>... na realidade, está registrando o objeto <em>_botao</em> como observador dos eventos do AS3.0. Quando o evento <em>MouseEvent.CLICK</em> ocorrer, <em>_botao</em> engatilhará o método <em>aoClicar</em>.</p>
<p><em>“Ta Tiago, mas o que os mísseis teleguiados tem a ver com isso?”</em> Como não poderia ser diferente, na próxima parte do artigo vocês terão um exemplo de como implementar o Observer, brincando com esses mísseis teleguiado. Até lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-1/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Decorando um jogo com o padrão de projetos Decorator – Parte 2</title>
		<link>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-%e2%80%93-parte-2</link>
		<comments>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-%e2%80%93-parte-2#comments</comments>
		<pubDate>Sun, 26 Jul 2009 20:52:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Decorator]]></category>
		<category><![CDATA[jogo]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=461</guid>
		<description><![CDATA[Para fechar o artigo anterior, como foi prometido, segue abaixo o diagrama do padrão de projetos Decorator. Apesar da longa explicação e do funcionamento diferente, o diagrama é bem simples: A única coisa diferente nesse diagrama é o fato de TDecoratorBonus possuir, além da herança de TArma,  o atributo _arma do tipo TArma, fazendo assim [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><script src="http://rec6.via6.com/link.php?action=widget&amp;url=http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-%25e2%2580%2593-parte-2%2F" type="text/javascript"></script></span></p>
<p style="margin-left: 70pt; text-align: justify">Para fechar o artigo anterior, como foi prometido, segue abaixo o diagrama do padrão de projetos Decorator. Apesar da longa explicação e do funcionamento diferente, o diagrama é bem simples:</p>
<p style="margin-left: 70pt; text-align: justify"><span id="more-461"></span></p>
<div id="attachment_478" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-478" title="diagramaDecorator" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/07/diagramaDecorator.jpg" alt="diagramaDecorator" width="500" height="237" /><p class="wp-caption-text">Diagrama do padrão de projetos Decorator</p></div>
<p style="text-align: left;">A única coisa diferente nesse diagrama é o fato de <em>TDecoratorBonus</em> possuir, além da herança de TArma,  o atributo <em>_arma</em> do tipo <em>TArma</em>, fazendo assim que surjam as 2 setas. Além disso, basta não se esquecer que <em>TEfeito</em> e <em>TEncantamento</em> têm, por herança de <em>TDecoratorBonus</em>, seus próprios atributos <em>_arma</em></p>
<p style="text-align: left;">O código do padrão (Action Script 3.0 com projeto Flash CS3) pode ser encontrado aqui: [download id="1"]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-%e2%80%93-parte-2/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Decorando um jogo com o padrão de projetos Decorator &#8211; Parte 1</title>
		<link>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1</link>
		<comments>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1#comments</comments>
		<pubDate>Mon, 20 Jul 2009 23:16:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Decorator]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[World of Warcraft]]></category>
		<category><![CDATA[WoW]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=403</guid>
		<description><![CDATA[Você e 4 amigos, uma esquadrilha de netherdrakes, helicópteros, grifos e hipogrifos, girando por Oshu’gun enquanto procuram o gigante comedor de dragões Durn the Hungerer. Apesar da ameaça, vocês estão confiantes em seu grupo. O entardecer de Nagrand mostra a silhueta do gigante no horizonte e vocês sabem que a hora chegou. A luta foi [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><!--rec6--></span></p>
<p style="margin-left: 70pt; text-align: justify"><em>Você e 4 amigos, uma esquadrilha de netherdrakes, helicópteros, grifos e hipogrifos, girando por Oshu’gun enquanto procuram o gigante comedor de dragões Durn the Hungerer. Apesar da ameaça, vocês estão confiantes em seu grupo. O entardecer de Nagrand mostra a silhueta do gigante no horizonte e vocês sabem que a hora chegou.</em></p>
<p><em>A luta foi perfeita: o gigante arrasou com o grupo nos 20s mais estilosos que qualquer monstro do World of Warcraft  já viu. Depois de 15min de brigas sobre quem tem a culpa, alguém descobre que o grupo não estava tão preparado assim. Todos então  resolvem melhorar seus equipamentos... Mas como?</em></p>
<p>Apresento-lhes a morte do grande gigante, o padrão Decorator.</p>
<p><span id="more-403"></span>Vários jogos permitem a seus jogadores um vasto leque de personalização. Eles permitem que configuremos os personagens para que eles sejam o mais parecido possível com a gente em muito mais que só altura e cor de cabelos. Tais jogos permitem que configuremos também a forma com que esse personagem reage ao mundo de jogo, definindo coisas como a velocidade, o tipo de magia que ele usa ou o quanto sustenta de dano. Alguns jogos permitem até que você configure os itens que eles usam. Assim é o <em>World of Warcraft</em>, a febre do momento no mundo dos RPGS massivos (os <em>MMORPGS</em>).</p>
<p>Para vencer os desafios no WoW, os jogadores podem utilizar encantamentos, gemas, itens e diversos efeitos diferentes para aumentar suas características. Se foi isso que faltou no grupo, é isso que daremos a ele.</p>
<p>Comecemos pegando uma das armas dos jogadores. Essa arma exemplo será a classe TArma abaixo:</p>
<pre class="brush:java">package Efeitos
{
	public class TArma
	{
		protected var _nome:String; // Damos um nome qualquer e …
		protected var _efeito:String; // … um efeito…

		public function TArma()
		{
			// ... mas setamos para os valores normais ...
			// ... afinal de contas, a arma não tem nada de especial ...
			// ... ainda
			this._nome = "Arma sem Bônus";
			this._efeito = "";
		}

		public function retornaNome():String
		{ return this._nome; }

		public function retornaEfeito():String
		{ return this._efeito; }
	}
}</pre>
<p>Essa arma é o que os personagens têm no momento e, como já sabemos, isso não é o suficiente. <em>Que tal incluirmos esses tais efeitos e </em><em>encantamentos? Assim estaríamos adicionando a força necessária que os personagens precisam, não Tiago? É só criar uns métodos retornaEncantamento() como você fez e pronto.</em></p>
<p>Não só poderíamos adicionar tais características como várias outras características à arma. O problema é o futuro: a cada vez que um ou vários novos bônus aparecessem no nosso jogo, fossem modificados ou simplesmente excluídos do jogo (o que acontece com muita frequência), teríamos que atualizar essa classe <em>Tarma</em>, bem como TODO O CÓDIGO fazendo as chamadas a esses bônus, no caso deles simplesmente não existirem mais . Isso a torna alvo de alterações cíclicas, o que é longe de ser legal. A idéia aqui é encapsular essas alterações, aplicando-as como um skin ou tema à arma.</p>
<p>Para conseguirmos tal estrutura, usaremos o padrão Decorator: iremos “enfeitar” a arma com quantos bônus especiais precisarmos, aproveitando que ela já possui algo engatilhado para isso (afinal de contas, o método <em>retornaEfeito()</em> não está lá à toa) . Para isso, precisamos inicialmente criar a classe TDecoratorBonus:</p>
<pre class="brush:java">package Efeitos
{
	//import Status.TStatus;

	public class TDecoratorBonus extends TArma
	{
		protected var _arma:TArma; // O Decorador possui uma instância de TArma.

		/***************************************************************
		Construtor da classe. Tem os atributos da TArma a ser decorada ...
		... por ser um tipo de arma.
		****************************************************************/
		public function TDecoratorBonus()
		{
			this._nome = "sem nome";
			this._efeito="";
		}
		/***************************************************************
		Esse método sobrescreve (overrides) o método retornaNome() da ...
		... classe TArma.
		****************************************************************/
		public override function retornaNome():String
		{ return this._nome; }
	}
}</pre>
<p>Essa classe é o coração do nosso decorador: ela é a responsável pela estrutura de encapsulamento dos diversos efeitos. A principal estrela dessa clase é, sem dúvidas, o atributo <em>protected var _arma:TArma</em>. Sua função é guardar a camada de efeitos no caso dessa camada ser envolvida por outra camada. <em>Não entendi nada, Tiago.Como assim camada envolvida por outra camada?</em> Bom, se você pensar bem, estou falando de camadas como aquelas bonecas russas chamadas <a href="http://pt.wikipedia.org/wiki/Matrioshka" target="_blank">matrioshka</a> que guardam outras bonecas idênticas dentro: essa instância seria uma "âncora" para que pudéssemos ir para a "boneca de dentro". Essa boneca de dentro, por sua vez, também tem sua boneca de dentro até o ponto em que não haja mais bonecas dentro.</p>
<p>Cada uma dessas bonecas é, no nosso exemplo, uma das camadas de bônus do padrão decorador, como a classe abaixo:</p>
<pre class="brush:java">package Efeitos
{
	public class TEfeito extends TDecoratorBonus
	{

		/***************************************************************
		Construtor da classe recebe um objeto TArma. Ele é jogado para ...
		... a instância this._arma, encapsulando assim mais um nível para ...
		... a recursividade do padrão.
		****************************************************************/
		public function TEfeito(arma:TArma)
		{
			//Os seguintes atributos vieram por herança de TDecoratorBonus;
			this._arma = arma;
			this._efeito = "+10";
		}

		/***************************************************************
		Método que sobrescreve o retornaEfeito da classe TDecoratorBonus, ...
		... chamando ele próprio na instância this._arma da classe. Dessa ...
		... forma, o método inicia uma cadeia de chamadas que termina ...
		... na classe mais interna, a que não possui uma instância de ...
		... _arma.
		****************************************************************/
		public override function retornaEfeito():String
		{
			// Por ser um padrão de recursividade, é obrigatório que...
			// ... chamemos this._arma.retornaEfeito(). Só assim o ...
			// ... método continuará chamando os efeitos encapsulados.
			return (this._efeito + " " + this._arma.retornaEfeito());
		}
	}
}</pre>
<p>Para fazer as camadas de bônus funcionarem, entra em ação uma coisa chamada <em>recursividade</em>: de forma simplificada (e, quem sabe, um dia eu escreva de forma completa), recursividade é a capacidade de um método ou função chamar a si mesma por várias vezes, retornando resultados para ela própria. Por enquanto, basta saber que o método <em>retornaEfeito() </em>é recursivo por chamae <em>retornaEfeito() </em>novamente, mas agora na camada de dentro (que, como já sabemos, é o atributo <em>this._arma</em>). A camada interna, por sua vez, chama <em>retornaEfeito() </em>de sua <em>this._arma</em>, que chama <em>retornaEfeito() </em>de sua <em>this._arma</em>, que chama <em>retornaEfeito() </em>de sua... Isso só acaba quando chegamos na arma inicial, a <em>TArma</em>, cujo método <em>retornaEfeito() </em>não chama outro <em>retornaEfeito() </em>e sim, exibe seu <em>this._efeito</em>.</p>
<p>Nesse momento, cada <em>retornaEfeito()</em> chamado retorna seu <em>this._efeito </em>para o método <em>retornaEfeito() </em>que o chamou, que concatena com seu próprio <em>this._efeito </em>e retorna para o método <em>retornaEfeito() </em>que o chamou, que concatena com seu próprio <em>this._efeito </em>e retorna para o método <em>retornaEfeito() </em>que o chamou, que concatena com seu próprio <em>this._efeito </em>e retorna... O fim desse ciclo se dá quando não houver mais retornos a chamadas a <em>retornaEfeito()</em>, o que no nosso exemplo acontece na classe <em>TMain</em> mais à frente.</p>
<p>Essa estrutura fica assim:</p>
<div id="attachment_406" class="wp-caption aligncenter" style="width: 407px"><img class="size-full wp-image-406" title="camadasDoDecorator" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/07/camadasDoDecorator.jpg" alt="Camadas" width="397" height="482" /><p class="wp-caption-text">Camadas</p></div>
<p>Com o padrão conseguimos criar uma arma genérica que possui ao seu redor várias camadas de efeitos e que funciona do exato mesmo jeito que uma arma que não possui efeito algum. Além disso, podemos ter diferentes tipos de efeitos, cada um implementado por uma classe diferente. Vou criar agora um TEncantamento:</p>
<pre class="brush:java">package Efeitos
{
	import Efeitos.TDecoratorBonus;

	public class TEncantamento extends TDecoratorBonus
	{

		public function TEncantamento(arma:TArma)
		{
			this._arma = arma;
			this._efeito = "Mongoose";
		}

		public override function retornaEfeito():String
		{
			return (this._arma.retornaEfeito() + " " + this._efeito);
		}
	}
}</pre>
<p>Por fim, basta decorarmos a arma:</p>
<pre class="brush:java">package
{
	import flash.display.MovieClip;
	import Efeitos.TDecoratorBonus;
	import Efeitos.TEncantamento;
	import Efeitos.TEfeito;
	import Efeitos.TArma;

	public class TMain extends MovieClip
	{
		public function TMain()
		{
			// Criamos uma arma qualquer ...
			var arma = new TArma();

			trace ("Antes dos efeitos"); // ... e exibimos seus bônus iniciais.
			trace ( arma.retornaEfeito() );
			trace ();
			trace("---------------------------------------");
			trace ();

			// Agora o padrão entra em ação. Criamos um efeito TEfeito que ...
			// encapsula a arma atual e é passado para ela mesma. Agora ...
			// arma tem dentro de si um TEfeito.
			// Efeito +10
			arma = new TEfeito(arma);

			// Pegamos agora a TEfeito e jogamos dentro de TEncantamento, ...
			// ... passando novamente para a arma. Agora ela tem um ...
			// TEncantamento que tem um TEfeito.
			arma = new TEncantamento(arma);

			// ... que vai dentro de mais um TEfeito ...
			arma = new TEfeito(arma);

			// ... que termina dentro de outro TEfeito
			arma = new TEfeito(arma);

			// Ao realizarmos a chamada a arma.retornaEfeito(), o próprio ...
			// ... método se encarrega de chamar retornaEfeito() das ...
			// ... instâncias encapsuladas, de forma recursiva.

			trace ( arma.retornaEfeito() );
		}
	}
}</pre>
<p>No próximo artigo eu disponibilizo o projeto (Flash CS3) e os arquivos das classes (Action Script 3.0). Falo também do diagrama de classes dessa brincadeira toda. Até lá, caso alguém tenha qualquer dúvida, basta perguntar.</p>
<p><em>No final de uma longa batalha, O gigante finalmente tomba. Seu colossal corpo vai agora servir de alimento para as criaturas que das quais sua linhagem alimentou-se durante eras. Os heróis retornam para suas montarias e tudo volta a ser tranqüilo, graças ao padrão Decorator.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-parte-1/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wiiflash: Desenvolvendo como gente grande</title>
		<link>http://www.nusseagora.blog.br/wiiflash-desenvolvendo-como-gente-grande</link>
		<comments>http://www.nusseagora.blog.br/wiiflash-desenvolvendo-como-gente-grande#comments</comments>
		<pubDate>Mon, 01 Jun 2009 10:02:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Artigos Exteriores]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[Wii]]></category>
		<category><![CDATA[Wiiflash]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=532</guid>
		<description><![CDATA[Essa é uma dica rápida para quem quer desenvolver para um videogame de última geração. No ByteArray você o WiiFlash, uma biblioteca em Action Script 3.0 que liga faz a comunicação entre seu Wiimote e o Adobe Flash, Flex ou Air. Graças à comunicação do Wiimote (e seus metaperiféricos Nunchuk, Wii Balance Board...),  basta reconhecê-lo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><!--rec6--></span></p>
<p style="margin-left: 70pt; text-align: justify">Essa é uma dica rápida para quem quer desenvolver para um videogame de última geração. No <a href="http://www.bytearray.org/" target="_blank">ByteArray</a> você o <a href="http://wiiflash.bytearray.org/" target="_blank">WiiFlash</a>, uma biblioteca em Action Script 3.0 que liga faz a comunicação entre seu Wiimote e o Adobe Flash, Flex ou Air.</p>
<p><span id="more-532"></span>Graças à comunicação do Wiimote (e seus metaperiféricos Nunchuk, Wii Balance Board...),  basta reconhecê-lo como um dispositivo Bluetooth no seu PC, rodar o WiiFlash Server e pronto, começar a desenvolver. O problema maior aqui é a documentação toda em inglês, o que pode afastar aqueles que têm dificuldades na língua... Vejam como uma ótima oportunidade para começar a estudá-la!</p>
<p><a href="http://wiiflash.bytearray.org/?page_id=50" target="_blank">Aqui</a> você baixa o Wiiflash com o código fonte, caso queira modificá-lo ou até mesmo adicionar novas funcionalidades à biblioteca.  Na <a href="http://code.google.com/p/wiiflash/">página do Google Project</a> Hosting do WiiFlash você encontra exemplos de como é simples trabalhar com o joystick. Falando nele, <a href="http://wiiflash.bytearray.org/?page_id=25" target="_blank">esse link </a>explica como fazer seu PC reconhecê-lo, podendo trabalhar com mais de 1 ao mesmo tempo.</p>
<p>Esse vídeo em inglês ensina o necessário para que você inicie seu desenvolvimento. Só fique de olho pois ele foi feito em um Mac... Ou seja: nada de Windows Explorer ou Menu Iniciar.</p>
<p>O site <a href="http://www.wiiplayable.com/" target="_blank">wiiplayable</a> possui uma grande lista de jogos em Flash que podem ser jogados diretamente pelo Wii através do Opera.</p>
<p>Abaixo, uma lista de exemplos de uso do wiiflash:</p>
<ul>
<li><a href="http://wiiflash.bytearray.org/?p=160" target="_blank">Simulação de Vôo</a></li>
<li><a href="http://wiiflash.bytearray.org/?p=182" target="_blank">Wiispray</a></li>
<li><a href="http://www.youtube.com/watch?v=tsAt2CASHUM" target="_blank">Wiirimbau</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/wiiflash-desenvolvendo-como-gente-grande/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MVC e o Linkage: O que se deve ou não fazer? (parte 3)</title>
		<link>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-3</link>
		<comments>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-3#comments</comments>
		<pubDate>Thu, 01 Nov 2007 16:40:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Linkage]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Padrões de Arquitetura]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=32</guid>
		<description><![CDATA[É gente, depois de um bom tempo enrolado com problemas e mais problemas (aparentemente, até o meu MAC foi clonado), eu consigo finalmente disponibilizá esse código (com a ajuda do Douglas, claro). É o que dizem: "antes tarde do que nunca". Falando sobre o código em si, tanto eu quanto o Mário achamos que ele [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:justify;">É gente, depois de um bom tempo enrolado com problemas e mais problemas (aparentemente, até o meu MAC foi clonado), eu consigo finalmente disponibilizá esse código (com a ajuda do Douglas, claro). É o que dizem: "antes tarde do que nunca". Falando sobre o código em si, tanto eu quanto o <a href="http://vovoviuarede.blogspot.com/">Mário</a> achamos que ele ficou um cado complexo por causa da Controladora usando o Singleton. Pensei seriamente em tirar esse Singleton, mas resolvi deixá ela assim mesmo para que vocês tenham mais um exemplo do uso do padrão num programa. Basta deixar claro que o Singleton <strong>NÃO É NECESSÁRIO</strong> para o exemplo.</p>
<p>Vocês vão notar que eu deixei até as rotinas de debug (como o trace quando se passa o cursor sobre a bola) dentro da estrutura MVC. Além disso, vão também ver que cada camada do nosso Jogo está num pacote homônimo. Conseqüentemente, a estrutura de pastas também reflete essa lógica, organizando de forma muito melhor os arquivos.</p>
<p>Os comentários não estão muito explicados, mas quem tiver ainda alguma dúvida DEVE recorrer às partes <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1/">1</a> e <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-2/">2</a> do artigo sobre o MVC, agora vendo como tudo acontece no código.</p>
<p>Bom, espero que isso ajude a vocês (especialmente ao <a href="http://www.aryel-tupinamba.com/blog/">Aryel </a>que pediu o código). Qualquer dúvida, é só comentar!<br />
Até a próxima!</div>
<div style="text-align:right;"><span style="font-size:85%;">Faça o download do código aqui![download id="4"]</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-3/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>MVC e o Linkage: O que se deve ou não fazer? (parte 2)</title>
		<link>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-2</link>
		<comments>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-2#comments</comments>
		<pubDate>Sat, 20 Oct 2007 13:52:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[O Jogo]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Problemas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Linkage]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Padrões de Arquitetura]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=31</guid>
		<description><![CDATA[Agora que todos já sabem como funciona o MVC, vou continuar com a 2a e última parte do artigo. Hoje vou mostrar os pontos positivos e negativos da implantação da arquitetura, além de finalmente mostrar o que isso tudo tem a ver com o Linkage. Pontos positivos: Abstração e desacoplamento das camadas Quando estamos programando [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><script src="http://rec6.via6.com/link.php?action=widget&amp;url=http://nusseagora.blogspot.com/2007/10/mvc-e-o-linkage-o-que-se-deve-ou-no_20.html" type="text/javascript"></script></span></p>
<p style="margin-left: 70pt; text-align: justify">Agora que todos já sabem como funciona o MVC, vou continuar com a 2a e última parte do artigo. Hoje vou mostrar os pontos positivos e negativos da implantação da arquitetura, além de finalmente mostrar o que isso tudo tem a ver com o Linkage.</p>
<p>Pontos positivos:</p>
<ul>
<li>Abstração e desacoplamento das camadas</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Quando estamos programando a interface do problema, não nos preocupamos com a programação da lógica dele, somente com o que vai e o que vem dela. Dessa forma, podemos facilmente simular todo o funcionamento da lógica do programa com uma classe de testes que simula o funcionamento da lógica. Esse é o conceito de <em>caixa preta</em>, importantíssimo para o bom funcionamento de um software.</p>
<ul>
<li>Facilidade de manutenção</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Graças a esse desacoplamento, é <strong>muito mais</strong> fácil realizar a manutenção de um programa desses. Se for um problema visual, você vai à camada responsável pelo visual do programa e pronto, corrige. Se for um problema de lógica, é na lógica que você buscará a solução. Além disso, graças ao padrão <em>Controlador</em> (<em>Controller</em>), você pode apagar <strong>toda </strong>uma janela sem perder <strong>nada</strong> de sua implementação.</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Quem está acostumado a adicionar código em um botão sabe exatamente o trabalho que isso ta poupando, mas para quem não está, aí vai um exemplo. Sabe esse Mario 2 que refizeram em 3D pro Nintendo DS? Se eles não usaram o MVC para fazer o original, perderam uma gigantesca parte da lógica do programa só por trocar a interface. Em compensação, usando o MVC de forma correta eles trocariam toda a interface sem mexer em 1 linha da lógica.</p>
<ul>
<li>Possibilidade de Expansão</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">A estrutura de camadas proposta no MVC pode (e deve) ser expandida: criar mais camadas aumenta a coesão e diminui o acoplamento, organizando melhor o seu código. No jogo, por exemplo, além da Lógica e da Interface, temos a camada de Comunicação (rede) e a camada de Armazenamento (Banco de Dados), além das camadas entre elas. Um outro jogo pode, por exemplo, ter uma camada de IA, uma camada de hardware e uma camada de comunicação com outro jogo. O nosso, inicialmente, está assim:</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify"><img class="aligncenter size-full wp-image-910" title="piramide" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2007/10/piramide.jpg" alt="piramide" width="450" height="228" /></p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">As camadas se comunicam através de <em>Indireções</em>, como os já citados padrões <em>Controlador</em>, <em>Proxy </em>e <em>DBBroker</em>. Isso claro, pode mudar durante a análise de <em>Casos de Uso</em> mais avançados, mas inicialmente, essa é a idéia. Além disso, o funcionamento desses padrões vai ficar para futuros artigos.</p>
<ul>
<li><!--[if !supportLists]-->Facilidade de realização de testes</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Com o programa modularizado, podemos criar classes de teste que rodam nosso programa à exaustão, podendo encontrar bugs estatisticamente impossíveis de encontrarmos. Mas sabe qual é o melhor? Você pode testar isso tudo sem ter NADA de interface pronta: a lógica fica tão independente que chega a funcionar sem a interface. Então não precisamos esperar que o pessoal do desenvolvimento resolva aquele problema dos relatórios para que o pessoal do teste disseque nosso <em>Caso de Uso</em>. Maneiro, não?</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Pontos negativos:</p>
<ul>
<li><!--[if !supportLists]-->Programação complexa</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">A programação torna-se mais complexa quando aplicamos o MVC. Chamadas consecutivas e abstração do código são extremamente importantes. Além disso, uma documentação de todo o projeto é imprescindível para que as camadas sejam mapeadas e seguidas da forma correta. Além disso, teremos o...</p>
<ul>
<li><!--[if !supportLists]-->Uso extensivo de padrões de projeto</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">O MVC simples já dita o uso do padrão <em>Controller</em>. Expandindo camadas de Comunicação e Armazenamento, ainda usaremos <em>Proxies</em> como o <em>Remote Proxy</em> e <em>Database Brokers</em>. Para desacoplar essas camadas, criaremos várias classes baseadas nos padrões <em>Indireção</em> (usado para desacoplar 2 classes que não deveriam ter visibilidade entre si) e <em>Invenção Pura</em> (padrão que adiciona classes que não estão diretamente ligadas ao problema em si, mas que facilitam a solução dele). No final, a relação entre as classes é bem mais burocrática</p>
<ul>
<li><!--[if !supportLists]-->Dependência do MVC na portabilidade</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Para poder portar um código MVC de forma correta, o programa que irá recebê-lo precisa trabalhar nos moldes do MVC. Por exemplo, se estamos portando uma janela de cadastro de cliente já pronta para um programa parecido, ele tem que estar modularizado de forma a trabalhar com a classe Controladora para que a manutenção seja mínima. Isso causa uma certa dependência à estrutura.</p>
<ul>
<li><!--[if !supportLists]-->Queda de performance</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">As mensagens trocadas navegam entre camadas de forma burocrática e indireta, o que faz com que os programadores “performance acima de tudo” reclamem bastante. Por exemplo, uma chamada a uma função que seria direta numa programação estruturada torna-se uma cadeia de várias subchamadas a métodos que somente levam a chamada para a próxima camada nessa estrutura, como vocÊs viram no diagrama de seqüência lá em cima.</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">A performance perdida está longe de ser relevante, principalmente com os processadores de hoje em dia, mas mesmo assim continua sendo um ponto negativo da arquitetura.</p>
<p class="MsoNormal" style="text-align: justify"><em>“Ta, ta, eu entendi o MVC. Mas o quê que o Linkage tem à ver com isso???”</em> O linkage do Flash é uma facilidade ao trabalhar com a interface, pois permite que uma classe use os atributos do MovieClip como se fossem atributos de si mesma. A grosso modo, parece muito uma herança de atributos e métodos públicos. O maior problema é que, se não tomarmos cuidado, <strong>acabamos destruindo toda a modularidade do MVC</strong>.</p>
<p class="MsoNormal" style="text-align: justify">O linkage só deve ser usado para que as classes de interface controlem os MovieClips relacionados à elas. No nosso jogo, temos as classes <em>TCarta</em> e <em>TCartaAvatar</em>, ambas controlando uma carta em  jogo. A diferença é que, seguindo o MVC, modularizamos uma carta em 2 camadas:</p>
<ul>
<li><!--[if !supportLists]--><!--[endif]-->TCarta</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Controla a <strong>lógica</strong> da carta: os atributos, as contas, o dano que ela recebe, se ela está no <em>Deck</em>, na <em>Mão</em>, em <em>Jogo</em> ou no <em>Cemitério</em> e coisas do gênero.</p>
<ul>
<li><!--[if !supportLists]-->TCartaAvatar</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Controla todos os efeitos visuais da carta. É ela que desenha a marcação do mouse sobre a carta, quem coloca a carta em qualquer posição, que inicia/pára o arrastar, que gera os efeitos de dano e desenha na tela todos os atributos buscados de TCarta.</p>
<p class="MsoNormal" style="text-align: justify">Dessa forma, podemos trocar completamente a interface sem mexer nas classes de lógica. Trocar para Papervision 3D, a Plasticvision 4D, a Metalvision 5D ou até mesmo OpenGL ou ClosedLG, no nosso projeto, é muuuito mais simples: basta que criemos as mesmas classes de Interface, mas agora programadas com a nova interface. MOLEZA.</p>
<p class="MsoNormal" style="text-align: justify">Essa portabilidade ainda pode ser da interface para a lógica: nossas cartas são arrastadas independente da lógica, elas brilham independente dlógica, elas se movem independente da lógica. Basta chamar os métodos da classe de Interface na hora certa, seja em Action Script 3.0 ou qualquer outra linguagem que o Flash suporte mais pra frente.</p>
<p>Caso uma única classe fosse responsável por isso tudo, durante uma troca de interface ou na hora de portar um trecho do código, a manutenção seria muito mais complicada: você deveria ficar movendo/apagando métodos das classes de lógica. Isso claro, pois estou pensando numa classe bem feita, com métodos bem estruturados. Muitas vezes, o que você encontra são linhas de interface no meio da lógica. Aposto que vários de vocês já viram um “se (this.morto) rode (“AnimacaoMorto”)”. Imaginem trocar o código para o futuro suporte OpenGL nesse caso...</p>
<p class="MsoNormal" style="text-align: justify">Se vocês já pegaram o esquema do MVC e da expansão que fizemos, criando a camada de Armazenamento, já sacou que a carta também terá uma camada de armazenamento. Ela não está implementada ainda, mas seria mais ou menos assim:</p>
<ul>
<li><!--[if !supportLists]--><span><span><span> </span></span></span><!--[endif]-->TCartaDados</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Seria a classe responsável por <em>materializar </em>e<em> desmaterializar</em> a Carta. Pra quem não sabe, <em>materializar</em> é buscar os dados de um objeto no BD e criá-lo em memória e <em>desmaterializar</em> é jogar no BD, destruindo o objeto da memória. Essa classe também seria responsável por todos os outros métodos possíveis</p>
<p class="MsoNormal" style="text-align: justify">Gente, de todos os artigos que fiz até agora, esse foi de longe o que eu mais gostei de escrever. Espero, por meio desse, ajudar a derrubar essa história de que o Action Script é uma linguagem de 2<sup>a</sup> linha e que jogo em Flash é um amontoado de gambiarras. Espero também incentivar os leitores a escrever sobre qualidade de software em AS. Dá mais trabalho na hora de programar, mas esse trabalho é recompensado na hora de reutilizar o código em diversos outros projetos. Pensem nisso e até a próxima!</p>
<p>[EDIT] Não se esqueça de conferir o resto do artigo! <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1/" target="_blank">Parte 1</a> e <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-3/" target="_blank">Parte 3</a>, valeu?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-2/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MVC e o Linkage: O que se deve ou não fazer? (parte 1)</title>
		<link>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1</link>
		<comments>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1#comments</comments>
		<pubDate>Wed, 17 Oct 2007 11:32:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Action Script 3.0]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[O Jogo]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[Problemas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Linkage]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Padrões de Arquitetura]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=30</guid>
		<description><![CDATA[Eu acredito que muita gente vai me chamar de maluco depois desse artigo, mas espero que todos entendam. Pra começar, vamos falar do MVC (ou Model-View-Controller), uma arquitetura de software baseado na idéia de interações emtre camadas de alta coesão (fazem exatamente aquilo que se propõem a fazer e nada mais que isso) e baixo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><script src="http://rec6.via6.com/link.php?action=widget&amp;url=http://nusseagora.blogspot.com/2007/10/mvc-e-o-linkage-o-que-se-deve-ou-no.html" type="text/javascript"></script></span></p>
<p style="margin-left: 70pt; text-align: justify">Eu acredito que muita gente vai me chamar de maluco depois desse artigo, mas espero que todos entendam. Pra começar, vamos falar do MVC (ou <em>Model-View-Controller)</em>, uma arquitetura de software baseado na idéia de interações emtre camadas de <em>alta coesão</em> (fazem exatamente aquilo que se propõem a fazer e nada mais que isso) e <em>baixo acoplamento</em> (são o mais independentes possível entre si).</p>
<p style="text-align: justify"><em>“CALMAÊ!!!! QUE NEGÓCIO É ESSE DE ARQUITETURA??? O MVC NÃO É UM PADRÃO DE PROJETO???”</em> Pois então, como eu disse, muita gente vai me chamar de maluco... Deixa eu explicar:Eu já vi vários sites, artigos e livros chamando o MVC de várias coisas. Já vi chamando de <em>padrão de projeto</em>, com o que eu não concordo. Ele não é um <em>padrão de projeto</em> pelo fato de organizar todo um sistema, não somente um bloco ou pequeno problema. Além disso, para implementar o MVC nós precisamos utilizar <em>padrões</em>, como o <em>controlador </em>(<em>Controller</em>).</p>
<p>Pensando nisso, algumas pessoas começaram a chamá-lo de <em>meta-padrão</em>, coisa que ele não é. Um meta-padrão definiria o comportamento dos <strong>padrões</strong>, não de <strong>toda a</strong> <strong>arquitetura</strong>.</p>
<p>O MVC é isso: ele define como as classes vão se comportar, ditando quem fica onde, faz o quê e, o mais importante, o por quê disso ser assim, bem como faz uma planta de uma casa. Por isso é que, em vários locais (como aqui no <em>Nuss</em>), vocês vão encontrar o MVC como uma <strong>arquitetura de software</strong>.</p>
<p>Isso é um ponto de vista, não chega a influenciar diretamente no uso do MVC. Mas é importante explicar para que ninguém saia com “cara de LG”. Beleza? Então continuemos com o artigo.</p>
<p>Voltando às camadas, é como se você transformasse o software no corpo humano: separasse os ossos e delegasse a eles a sustentação do corpo, o sangue ficaria com o transporte de substâncias pelo organismo e o sistema neurológico se responsabilizasse pela propagação das sensações e ordens do cérebro. É claro que as funções não são bem essas, mas é assim que as coisas funcionam.</p>
<p>O MVC em nosso jogo fica assim:</p>
<p><img class="aligncenter size-full wp-image-904" title="camadas" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2007/10/camadas.jpg" alt="camadas" width="175" height="341" /></p>
<p class="MsoNormal" style="text-align: justify">Com esse diagrama eu posso falar da maior característica do MVC: <strong>Toda e qualquer camada só se comunica com as camadas imediatamente abaixo de si</strong>. Lembrando-se que, para evitar dúvidas, quanto mais próxima do usuário, mais “alta” ou “alto nível” está a camada. Nota-se que <strong>nenhuma</strong> classe da Lógica realiza chamadas à classe Controladora da mesma forma que a classe controladora <strong>não </strong>realiza chamadas à Interface. Além disso, a Interface <strong>não </strong>chama diretamente método algum da Lógica: isso é feito através da <em>classe Controladora</em>, como mostra o <em>Diagrama de Seqüência</em><!--[if gte vml 1]&amp;gt;   &amp;lt;![endif]--><!--[if !vml]--> a seguir:</p>
<p class="MsoNormal" style="text-align: center;"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2007/10/sequencia.jpg"><img class="aligncenter size-full wp-image-905" title="sequencia" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2007/10/sequencia.jpg" alt="sequencia" width="540" height="270" /></a></p>
<p class="MsoNormal" style="text-align: justify">No MVC, cada camada tem uma função específica:</p>
<p style="text-align: justify">
<ul>
<li class="MsoNormal"><em><span>Model</span></em><span> (Modelo / Lógica)</span></li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Essa é a camada de negócios, onde está toda a lógica do teu sistema. No Jogo, por exemplo, é onde estão as classes <em>TCarta</em>, <em>TPersonagem</em>, <em>TLadrilho</em> e todas as outras relacionadas ao funcionamento do núcleo do Jogo (ou <em>engine</em>, se preferir).</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">
<ul>
<li class="MsoNormal"><em>View</em> (Visão / Interface)</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">Na camada de visão você não encontra NADA além das classes de interface com o usuário. <em>TCartaAvatar</em>, <em>TPersonagemAvatar</em> e <em>TLadrilhoAvatar</em> são exemplos de classes que, no Jogo, ficam na Interface. Outras classes que estão aqui são a <em>TIdioma</em> (que controla todos os textos do programa) e a <em>TJukeBox </em>(recém implementada, que controla todos os sons do jogo)</p>
<p style="text-align: justify">
<ul>
<li class="MsoNormal">Controller (Controladora)</li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">A controladora é uma camada intermediaria entre a <em>Lógica</em> e a <em>Interface</em>, que faz somente a propagação das mensagens da interface para a lógica, visto que a lógica <strong>não pode</strong> se comunicar com a interface.</p>
<p class="MsoNormal" style="margin-left: 18pt; text-align: justify">A continuação do artigo, com os prós e contras da arquitetura, além do que o Linkage do flash tem a ver com isso vai ficar para o próximo. Então gente, até lá!</p>
<p align="right"><em>[EDIT] Seguem os links para as Partes <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-2/" target="_blank">2</a> e <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-3/" target="_blank">3</a> do artigo.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

