<?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; Orientação a Objetos</title>
	<atom:link href="http://www.nusseagora.blog.br/tag/orientacao-a-objetos/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>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 2</title>
		<link>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-2</link>
		<comments>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-2#comments</comments>
		<pubDate>Sun, 29 Nov 2009 13:00:35 +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[Observer]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=839</guid>
		<description><![CDATA[Como prometido na 1ª parte do artigo sobre o padrão de projetos Observer, hoje vamos implementá-lo. O nosso escopo é bem simples: temos um jato que foge de mísseis teleguiados. Durante a perseguição, o jato deve poder mudar de direção e os mísseis devem responder a essa mudança adequadamente para não perderem seu alvo. Primeiramente, [...]]]></description>
			<content:encoded><![CDATA[<p>Como prometido na <a href="http://nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-1/" target="_self">1ª parte do artigo sobre o padrão de projetos Observer</a>, hoje vamos implementá-lo. O nosso escopo é bem simples: <strong>temos um jato que foge de mísseis teleguiados. Durante a perseguição, o jato deve poder mudar de direção e os mísseis devem responder a essa mudança adequadamente para não perderem seu alvo.</strong></p>
<p><strong><span id="more-839"></span></strong>Primeiramente, nossa implementação do Observer terá 2 interfaces:</p>
<p>-        <em>IObserver</em>, implementada por todos os observadores que devem responder às mudanças no Sujeito</p>
<p>-        <em>ISubject.</em> Implementada pelo Sujeito Observado.</p>
<p><em> </em></p>
<p>Trabalhar com essas interfaces simplifica muito a manutenção do código graças ao <a href="http://nusseagora.blog.br/principio-da-substituicao-de-liskov/" target="_blank">princípio da substituição de Liskov</a> como veremos no final do artigo. Por enquanto, continuaremos com a implementação.</p>
<p>Nossa interface <em>IObserver </em>terá somente o método <em>Atualizar(direcao:String):void. </em>Esse é o único método que todos os outros observadores do meu sistema deverão ter. <em>"E o que ele faz, Tiago?"</em> Esse é o método que atualiza a direção do Observador baseado na direção que o Sujeito Observado tomar em um dado instante.</p>
<pre class="brush:java">package Observer

{
	public interface IObserver
	{
		function Atualizar(direcao:String):void;
	}
}</pre>
<p>Nossos Sujeitos, porém, terão outras funcionalidades: <em>ISubject</em> deverá ter um método para registrar novos observadores e um outro para notificá-los sobre as mudanças de direção.</p>
<pre class="brush:java">package Observer

{
	import Observer.IObserver;

	public interface ISubject
	{
		function RegistrarObservador(observador:IObserver):void;
		function NotificarObservador():void;
	}
}</pre>
<p>Esse é nosso jato, um sujeito observado pelos mísseis teleguiados. Notem que, por ser um sujeito, ele obrigatoriamente deve implementar a interface <em>ISubject</em> que criamos e, consequentemente, também seus métodos.</p>
<pre class="brush:java">package Observer
{

	public class TJato implements ISubject
	{
		private var _observadores:Array;
		private var _direcao:String;

		public function TJato(direcao:String)
		{
		this._observadores = new Array();
		this._direcao = direcao;
		}

/***************************************************************

Adiciona um observador à coleção de observadores do sujeito  ...

... observado, para que ele possa notificá-los quando seu    ...

... estado mudar.

Por ser passado um objeto IObservador, TODA E QUALQUER...

... CLASSE pode se tornar um observador, desde que ...

... implemente a interface IObserver.

****************************************************************/

		public function RegistrarObservador(observador:IObserver):void
		{
			// Adiciono um observador à lista...
			this._observadores.push(observador);

			// ... e aviso a todo mundo quem foi registrado
			trace ("observador registrado: "+ observador);
		}

/***************************************************************

Varre a coleção de observadores, enviando à eles o novo estado.

... Utiliza a metodologia de empurrar dados observados.

****************************************************************/

		public function NotificarObservador():void
		{
			for(var i:int=0; i&lt;this._observadores.length; i++)
			this._observadores[i].Atualizar(this._direcao);
		}

/***************************************************************

Retorna a direção para onde o Jato está voando

****************************************************************/

		public function RetornarDirecao():String
		{
			return this._direcao;
		}

/***************************************************************

Modifica a direção do Jato para uma nova direção

****************************************************************/

		public function ModificarDirecao(direcao:String):void
		{
			this._direcao=direcao;
			this.NotificarObservador();
		}
	}
}</pre>
<p>O míssil terá somente esses 2 métodos. Note que eles são passivos, fazendo com que o funcionamento da classe dependenda exclusivamente do que é passado para ela.</p>
<pre class="brush:java">package Observer
{

	public class TMissil implements IObserver
	{
		private var _direcao:String;

		public function TMissil(direcao:String)
		{
			this._direcao = direcao;
		}

/***************************************************************
Atualiza a direção para onde o Míssil está indo
****************************************************************/

		public function Atualizar(direcao:String):void
		{
			this._direcao = direcao;
		}

/***************************************************************
Retorna a direção para onde o Míssil está voando
****************************************************************/

		public function RetornarDirecao():String
		{
			return this._direcao;
		}
	}
}</pre>
<p>Por fim, nossa classe principal, a TMain. Nela vamos realizar uma sequência de testes da funcionalidade do Observer.</p>
<pre class="brush:java">package
{
	import flash.display.MovieClip;
	import Observer.IObserver;
	import Observer.ISubject;
	import Observer.TJato;
	import Observer.TMissil;
	import Observer.THelicoptero;

	public class TMain extends MovieClip
	{
		private var _jato:TJato;
		private var _missil1:TMissil;
		private var _missil2:TMissil;

		private var _helicoptero:THelicoptero;

		public function TMain()
		{
			//Inicia a direção do Jato e dos mísseis
			this._jato = new TJato("CIMA");
			this._missil1 = new TMissil("BAIXO");
			this._missil2 = new TMissil("PARADO");

			//Exibe a direção dos objetos na tela
			trace( "Direção do jato: "
				  + this._jato.RetornarDirecao() );
			trace( "Direção do míssil 1: "
				  + this._missil1.RetornarDirecao() );
			trace( "Direção do míssil 2: "
				  + this._missil2.RetornarDirecao() );

			//Como os mísseis devem observar o ...
			//... comportamento do jato,...
			//... eles são registrados como...
			//... observadores do jato.

			trace("---------------------------------------------------------");

			trace ("Registrando observadores");
			this._jato.RegistrarObservador(this._missil1);
			this._jato.RegistrarObservador(this._missil2);

			trace("---------------------------------------------------------");

			trace("modificando a direção do jato prá BAIXO");

			//Altera a direção do jato...
			this._jato.ModificarDirecao("BAIXO");

			//... e exibe a direção dos objetos na tela
			trace( "Direção do jato: "
				  + this._jato.RetornarDirecao() );
			trace( "Direção do míssil 1: "
				  + this._missil1.RetornarDirecao() );
			trace( "Direção do míssil 2: "
				  + this._missil2.RetornarDirecao() );

			/*
			Caso um desenvolvedor queira estender a ...
			... funcionalidade do programa ...
			... adicionando um novo tipo de
			... observador, ele pode fazê-lo sem   ...
			... a necessidade de mexer no código atual.
			Para isso, basta ...
			... adicionar sua nova classe ...
			... (THelicoptero, nesse caso), fazê-la ...
			... implementar a interface IObserver ...
			... e adicioná-lo à lista de ...
			... chamadas de objetos de perseguição.
			Veja no exemplo abaixo:
			*/

			trace("---------------------------------------------------------");
			trace("Registrando observadores");

			//O Helicóptero entra na perseguição ...
			this._helicoptero = new THelicoptero("LESTE");
			// ... sendo registrado também como observador
			this._jato.RegistrarObservador(this._helicoptero);

			trace("---------------------------------------------------------");

			//Altera a direção do jato...
			trace("modificando a direção do jato prá CIMA");
			this._jato.ModificarDirecao("CIMA");

			//... e exibe a direção dos objetos na tela
			trace( "Direção do jato: "
				  + this._jato.RetornarDirecao() );
			trace( "Direção do míssil 1: "
				  + this._missil1.RetornarDirecao() );
			trace( "Direção do míssil 2: "
				  + this._missil2.RetornarDirecao() );
			trace( "Direção do helicóptero: "
				  + this._helicoptero.RetornarDirecao() );
		}
	}
}</pre>
<p>A saída desse código é a seguinte:</p>
<pre>Direção do jato: CIMA
Direção do míssil 1: BAIXO
Direção do míssil 2: PARADO
---------------------------------------------------------
Registrando observadores
observador registrado: [object TMissil]
observador registrado: [object TMissil]
---------------------------------------------------------
modificando a direção do jato prá BAIXO
Direção do jato: BAIXO
Direção do míssil 1: BAIXO
Direção do míssil 2: BAIXO
---------------------------------------------------------
Registrando observadores
observador registrado: [object THelicoptero]
---------------------------------------------------------
modificando a direção do jato prá CIMA
Direção do jato: CIMA
Direção do míssil 1: CIMA
Direção do míssil 2: CIMA
Direção do helicóptero: CIMA</pre>
<p><em>"Mas Tiago... Que helicóptero foi aquele ali no meio do código?" </em>Ah é... enquanto estávamos fazendo o código, um outro desenvolvedor achou que helicópteros também são maneiros em perseguições e resolveu implementar um. Notaram como foi fácil adicioná-lo? Bastou que ele implementasse a <em>IObserver</em> que o princípio de Liskov tomou conta do resto. Caso eu queria mais de um Sujeito observado, minha nova classe implementará <em>ISubject</em>. Dessa forma, <strong>adicionar observadores ou sujeitos não implica em modificação alguma no código que já estava pronto.</strong></p>
<p><em>“Outra coisa: e se um observador não quiser mais ser avisado sobre as mudanças do sujeito?”</em> Para isso, a <em>IObserver</em> deverá ter um método <em>removerObservador (observador:IObserver) : void; </em>que vai varrer a lista de observadores e retirá-lo de lá. Isso fica como exercício para quem quiser continuar estudando o padrão.</p>
<p>Na próxima - e última - parte do artigo, disponibilizarei o projeto em AS3.0 e o diagrama de Classes disso tudo ae. Então, até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/padrao-de-projetos-observer-implementando-misseis-teleguiados-parte-2/feed</wfw:commentRss>
		<slash:comments>0</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>O que raios é a UML – Parte 3</title>
		<link>http://www.nusseagora.blog.br/raios-e-uml-parte-3</link>
		<comments>http://www.nusseagora.blog.br/raios-e-uml-parte-3#comments</comments>
		<pubDate>Sun, 13 Sep 2009 01:47:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=637</guid>
		<description><![CDATA[Como pedido pelo Alexandre Ceni na 2a parte da micro-série sobre a UML, a 3a parte consiste em exemplos gráficos dos diagramas previamente citados.  Os diagramas que não fazem parte do Nuss... E agora?!? são da wikipedia. Essa página vai estar em constante modificação, pois vou substituindo os diagramas da wikipedia por aqueles que forem [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><!--rec6--></span></p>
<p style="margin-left: 70pt; text-align: justify">Como pedido pelo Alexandre Ceni na <a href="http://nusseagora.blog.br/raios-e-uml-–-parte-2/" target="_blank">2a parte da micro-série sobre a UML</a>, a 3a parte consiste em exemplos gráficos dos diagramas previamente citados.  Os diagramas que não fazem parte do Nuss... E agora?!? são da <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">wikipedia</a>. Essa página vai estar em constante modificação, pois vou substituindo os diagramas da wikipedia por aqueles que forem pintando nos artigos aqui. Não é foco do artigo  ensinar como desenvolver tais diagramas, até porque isso  é assunto para futuros artigos. Portanto, vamos a eles?</p>
<p><span id="more-637"></span></p>
<ul>
<li><strong>Diagramas Estruturais (ou de estrutura)</strong></li>
</ul>
<p><em> </em></p>
<table border="0" width="100%">
<tbody>
<tr>
<div id="attachment_64" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2008/04/padroes-de-projeto-questao-de-bom-senso2.jpg"><img class="size-thumbnail wp-image-64" title="Jogo de tabuleiro v2" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2008/04/padroes-de-projeto-questao-de-bom-senso2.thumbnail.jpg" alt="Jogo de tabuleiro v2" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Classes</p></div>
<div id="attachment_640" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/08/Pacotes.jpg"><img class="size-thumbnail wp-image-640" title="Diagrama de Pacotes" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/08/Pacotes-150x150.jpg" alt="Pacotes" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Pacotes</p></div>
<div id="attachment_692" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/EstruturaComposta.jpg"><img class="size-thumbnail wp-image-692" title="EstruturaComposta" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/EstruturaComposta-150x144.jpg" alt="Diagrama de Estrutura Composta" width="150" height="144" /></a><p class="wp-caption-text">Diagrama de Estrutura Composta</p></div></tr>
<tr>
<p><div id="attachment_689" class="wp-caption alignleft" style="width: 160px"><span style="text-decoration: underline;"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Objetos.jpg"><img class="size-thumbnail wp-image-689" title="Objetos" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Objetos-150x144.jpg" alt="Diagrama de Objetos" width="150" height="144" /></a></span><p class="wp-caption-text">Diagrama de Objetos</p></div>
<div id="attachment_691" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Componentes.jpg"><img class="size-thumbnail wp-image-691" title="Componentes" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Componentes-150x150.jpg" alt="Diagrama de Componentes" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Componentes</p></div>
<ul><span style="text-decoration: underline;"></p>
<div id="attachment_690" class="wp-caption alignleft" style="width: 160px"><span style="text-decoration: underline;"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Instalacao.jpg"><img class="size-thumbnail wp-image-690" title="Instalacao" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Instalacao-150x150.jpg" alt="Diagrama de Instalação" width="150" height="150" /></a></span><p class="wp-caption-text">Diagrama de Instalação</p></div>
<p></span></ul>
</tr>
</tbody>
</table>
<ul>
<li><strong>Diagramas Comportamentais (ou de comportamento)</strong></li>
</ul>
<table border="0" width="100%">
<tbody>
<tr>
<div id="attachment_685" class="wp-caption alignleft" style="width: 160px"><span style="text-decoration: underline;"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/CasosDeUso.jpg"><img class="size-thumbnail wp-image-685" title="CasosDeUso" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/CasosDeUso-150x139.jpg" alt="Diagrama de Casos de Uso" width="150" height="139" /></a></span><p class="wp-caption-text">Diagrama de Casos de Uso</p></div>
<div id="attachment_686" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Atividades.jpg"><img class="size-thumbnail wp-image-686" title="Atividades" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Atividades-150x150.jpg" alt="Diagrama de Atividades" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Atividades</p></div>
<div id="attachment_687" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/TransicaoDeEstados.jpg"><img class="size-thumbnail wp-image-687" title="TransicaoDeEstados" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/TransicaoDeEstados-150x150.jpg" alt="Diagrama de Transição de Estados" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Transição de Estados</p></div></tr>
</tbody>
</table>
<ul>
<li><strong>Diagramas de Interação</strong></li>
</ul>
<table border="0" width="100%">
<tbody>
<tr>
<p><div id="attachment_639" class="wp-caption alignleft" style="width: 160px"><strong><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/08/Sequencia.jpg"><img class="size-thumbnail wp-image-639" title="Sequencia" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/08/Sequencia-150x150.jpg" alt="Diagrama de Sequencia" width="150" height="150" /></a></strong><p class="wp-caption-text">Diagrama de Sequencia</p></div>
<div id="attachment_697" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Comunicacao.jpg"><img class="size-thumbnail wp-image-697" title="Comunicacao" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Comunicacao-150x150.jpg" alt="Diagrama de Comunicação" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Comunicação</p></div>
<p><div id="attachment_698" class="wp-caption alignleft" style="width: 160px"><a href="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Interacao.jpg"><img class="size-thumbnail wp-image-698" title="Interacao" src="http://nusseagora.dominiotemporario.com/wp-content/uploads/2009/09/Interacao-150x150.jpg" alt="Diagrama de Interação" width="150" height="150" /></a><p class="wp-caption-text">Diagrama de Interação</p></div></tr>
</tbody>
</table>
<p>Lembrem-se: saber entender os diagramas  é extremamente importante para o desenvolvimento de software: eles são uma forma de descrever exatamente o que você pretende e evitar problemas de comunicação entre os programadores e analistas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/raios-e-uml-parte-3/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>O que raios é a UML – Parte 2</title>
		<link>http://www.nusseagora.blog.br/raios-e-uml-%e2%80%93-parte-2</link>
		<comments>http://www.nusseagora.blog.br/raios-e-uml-%e2%80%93-parte-2#comments</comments>
		<pubDate>Sun, 23 Aug 2009 19:26:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[UML]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=581</guid>
		<description><![CDATA[Continuando a micro-série sobre a UML, é hora de falarmos sobre como utilizá-la. A UML nos disponibiliza diversas ferramentas ou artefatos para que possamos modelar as diversas partes do nosso projeto. Tais ferramentas são chamadas de “diagramas” e não passam de uma forma padronizada de desenhar determinado tipo de problema de forma a simplificar a [...]]]></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/raios-e-uml-%25e2%2580%2593-parte-2%2F" type="text/javascript"></script></span></p>
<p style="margin-left: 70pt; text-align: justify">Continuando a micro-série sobre a UML, é hora de falarmos sobre como utilizá-la. A UML nos disponibiliza diversas ferramentas ou artefatos para que possamos modelar as diversas partes do nosso projeto. Tais ferramentas são chamadas de “diagramas” e não passam de uma forma padronizada de desenhar determinado tipo de problema de forma a simplificar a forma de ver o que eles querem mostrar.</p>
<p><em>“Mas e a flexibilidade que você mencionou no <a href="http://nusseagora.blog.br/o-que-raios-e-a-uml-parte-1/" target="_blank">artigo anterior</a>?” </em>Então... ela tem a ver com a possibilidade de não utilizarmos todos os diagramas e sim aqueles que são relevantes ao nosso problema. Isso diminui muito a quantidade de trabalho e permite que nos foquemos somente no que nos é importante (lembram-se do <a href="http://nusseagora.blog.br/principio-de-pareto-como-solucionar-80-dos-problemas-mexendo-somente-em-20-das-causas/" target="_blank">princípio de pareto</a>, né?).</p>
<p><span id="more-581"></span>Esses diagramas se dividem em 3 grupos:</p>
<ul>
<li><strong>Diagramas Estruturais (ou de estrutura)</strong></li>
</ul>
<p>Mostram que coisas existem e como elas devem estar relacionadas entre si. Em um jogo, os diagramas estruturais mostrariam, por exemplo, quantos itens cabem na mochila do seu personagem, se um item pode ter ou não alguma habilidade especial ou até mesmo como é a estrutura de salvar ou carregar o progresso do jogo. Os Diagramas Estruturais se dividem em:</p>
<ul> <span style="text-decoration: underline;">Diagrama de Classes</span></ul>
<p>Com o Diagrama de Classes você define as dependências das entidades que fazem parte do seu programa. Quantos personagens estão ao mesmo tempo em uma arena ou como organiza-se o seu ranking são exemplos do uso do Diagrama de Classes.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Estrutura Composta</span></ul>
<p>Lembra quando falamos aqui em classes que contem outras classes, como um carro que tem rodas e lataria personalizáveis, ou um personagem que tem um animal de estimação? O diagrama de Estrutura Composta mostra quais relações entre essas “partes” a classe tem, como o personagem mandando seu animal atacar ou o carro ordenando as rodas que parem de girar.<em> “Ué Tiago, é igual a um Diagrama de Classes?”</em> Na realidade, é. Mas, dependendo do que se modela, pode ser visualmente mais simples.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Objetos</span></ul>
<p>Esse diagrama parece-se muito com o Diagrama de Classes, mas define quais objetos foram instanciados em um dado momento do seu programa. Pegando o exemplo anterior, um diagrama de objetos poderia, por exemplo, mostrar quais personagens estão em qual arena, com quais itens e usando quais magias.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Componentes</span></ul>
<p>Define como as coisas físicas estão organizadas no seu projeto. Por exemplo, onde e como estão guardadas os arquivos do seu código-fonte e a dependência entre eles.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Pacotes</span></ul>
<p>Um dos meus preferidos: ilustra as dependências das partes lógicas do seu programa entre si. Essas partes lógicas, em um jogo, poderiam ser “Fase 1”, “Tela de Login” ou “Tela Inicial”. É utilizado também para definir a arquitetura do seu projeto, como as <a href="http://nusseagora.blog.br/mvc-e-o-linkage-o-que-se-deve-ou-nao-fazer-parte-1/" target="_blank">camadas e o MVC</a>.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Instalação</span></ul>
<p>Sabe quando você deve instalar um DirectX qualquer para rodar um jogo? Então, esse tipo de dependência é o que os diagramas de instalação modelam. Podem ser utilizados para definir a rede onde um MMORPG roda, mostrando os servidores de jogo, de login, sites, bancos de dados e clientes de jogo.</p>
<ul>
<li><strong>Diagramas Comportamentais (ou de comportamento)</strong></li>
</ul>
<p>Diagramas Comportamentais definem o comportamento das coisas que seu projeto tem, incluindo aí a forma com que ele reage aos estímulos externos.</p>
<ul><span style="text-decoration: underline;">Diagrama de Casos de Uso</span></ul>
<p>Define a forma de interação do usuário com o seu sistema (os tais estímulos externos falados acima). Com ele você diz tudo que seu usuário pode fazer e começa a definir quais são as partes principais do seu sistema. Ele poderá salvar? Então você terá um módulo de savegame com seus próprios casos de Uso (<em>Salvar jogo</em>, <em>Escolher</em> Savegame, <em>Cancelar</em>, <em>Carregar Savegame</em>, por exemplo). Ele utilizará veículos? Então um módulo para controle de veículos será necessário.</p>
<p>Como dica, Casos de Uso iniciam com interação com periféricos. Botões, barras de rolagem, escolha de menus, utilização de teclado... isso tudo dá vida a um caso de uso.</p>
<ul><span style="text-decoration: underline;">Diagrama de Atividades</span></ul>
<p>O Diagrama de Atividades não é muito mais que o antigo “Diagrama de Blocos”. Ele indica a lógica das coisas sem entrar em detalhes de programação. Um diagrama torna muito mais visível uma lógica como a seguinte: <em>“Jogo exibe menu de modos de jogo. Jogador coloca o cursor sobre o modo desejado. Jogador clica no modo escolhido. O jogo carrega a tela inicial daquele modo escolhido, com a opção de confirmar escolha ou cancelar escolha. Se o jogador cancela a escolha do modo, ele volta ao menu principal; se confirma, o jogo carrega aquele modo.”</em></p>
<ul><span style="text-decoration: underline;">Diagrama de Transição de Estados</span></ul>
<p>Como o Mario muda de estado no decorrer de um jogo? Ele pega um cogumelo e vira <strong>Super Mario</strong>, que encosta em um inimigo e vira de novo o <strong>Mario</strong>. Só que o <strong>Mario</strong>, se encostar em um inimigo, <strong>morre</strong>. Cada um desses “tipos de Mario” é um estado. O conjunto da relação entre eles é o que chamamos de <em>Máquina de Estados</em>. O diagrama serve para desenhar o conjunto formado por essas relações.</p>
<ul>
<li><strong>Diagramas de Interação</strong></li>
</ul>
<p>Enquanto os Diagramas Estruturais dizem como as coisas são, os de interação dizem como elas se relacionam. Com eles você modela como um tiro afeta o seu alvo, como é construída uma pista de corrida ou como acessar o conteúdo de um baú de tesouro.</p>
<ul><span style="text-decoration: underline;">Diagrama de Sequencia</span></ul>
<p>O Diagrama de Sequencia mostra a interação entre as diversas classes do sistema em um eixo temporal. Com ele você diz, no exemplo da batalha, que a classe de batalha cria uma arena, cria as árvores da arena, cria o rio da arena, cria dois personagems, cria itens e passa-os para os personagens e, finalmente, coloca-os na arena, exibindo em seguida a mensagem “BATALHEM” na tela.</p>
<ul> <span style="text-decoration: underline;">Diagrama de Comunicação</span></ul>
<p>Diagramas de comunicação mostram a interação das classes do sistema como os Diagramas de Sequencia. Porém, ao invés de uma estrutura cronológica, os Diagramas de Comunicação baseiam-se em uma estrutura analítica, como índices de um livro. Antes que pergunte, sim, é praticamente a mesma coisa que o Diagrama de Sequencia, mas a organização (utilizando o exemplo anterior) ficaria algo assim:</p>
<pre>1 A classe de batalha cria uma arena
    1.1 Cria as árvores da arena
    1.2 Cria o rio da arena
2 Cria dois personagems
    2.1 Cria itens
    2.2 Passa-os para os personagens e
3 Coloca os personagens na arena
4 Exibe a mensagem “BATALHEM” na tela.</pre>
<ul><span style="text-decoration: underline;">Diagrama de Interação</span></ul>
<p>Modelamos com o Diagrama de Interação a interação entre os múltiplos Diagramas de Sequencia e de Comunicação que temos em nosso sistema.</p>
<p>Por enquanto é só. Caso alguém tenha alguma dúvida, pode comentar sobre ela. Isso pode até render uma futura parte para a série!</p>
<p style="text-align: right;"><em>Saiba mais! <a href="http://pt.wikipedia.org/wiki/UML" target="_blank">Wikipedia</a> e <a href="http://advanceduml.wordpress.com/" target="_blank">Advanced Unified Modeling Language</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/raios-e-uml-%e2%80%93-parte-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>O que raios é a UML &#8211; Parte 1</title>
		<link>http://www.nusseagora.blog.br/o-que-raios-e-a-uml-parte-1</link>
		<comments>http://www.nusseagora.blog.br/o-que-raios-e-a-uml-parte-1#comments</comments>
		<pubDate>Thu, 13 Aug 2009 01:29:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://nusseagora.blog.br/?p=546</guid>
		<description><![CDATA[“Tiago, você fala tanto sobre a UML, já falou de Casos de Uso, já mostrou diagramas e mais diagramas, mas até agora não disse: o que raios é a UML?” UML é uma sigla para Unified Modelling Language. Em português, isso pode ser traduzido como Linguagem de Modelagem Unificada. Ou, simplificando, um conjunto de padrões [...]]]></description>
			<content:encoded><![CDATA[<p><span style="float: left"><!--rec6--></span></p>
<p style="margin-left: 70pt; text-align: justify"><em>“Tiago, você fala tanto sobre a UML, já falou de <a href="http://nusseagora.blog.br/casos-de-uso-mas-hein/" target="_blank">Casos de Uso</a>, já <a href="http://nusseagora.blog.br/orientacao-a-objetos-q-raios-e-isso-parte-2/" target="_blank">mostrou diagramas</a> e <a href="http://nusseagora.blog.br/decorando-um-jogo-com-o-padrao-de-projetos-decorator-%E2%80%93-parte-2/" target="_blank">mais diagramas</a>, mas até agora não disse: o que raios é a UML?”</em></p>
<p><em> </em></p>
<p><em><span id="more-546"></span></em>UML é uma sigla para <em>Unified Modelling Language</em>. Em português, isso pode ser traduzido como <em>Linguagem de Modelagem Unificada</em>. Ou, simplificando, um conjunto de padrões de desenho para que você possa modelar um problema orientado a objetos, mostrá-lo a uma pessoa que entenda esses desenhos e ela entender aquilo da forma exata que você estava querendo que ela entendesse. Sabe quando um arquiteto faz uma planta de uma casa? Ou quando um roteirista escreve um roteiro? A idéia é exatamente a mesma, mas com os programas orientados a objetos.</p>
<p><em>“Orientado a Objetos... você já explicou isso <a href="http://nusseagora.blog.br/orientacao-a-objetos-q-raios-e-isso-parte-1/" target="_blank">aqui no nuss</a>... Isso significa que a UML serve para o desenvolvimento de programas para computador, certo?”</em> Tenho 2 respostas para tal pergunta:</p>
<ul>
<li><strong>Sim</strong>. Como dito, a UML ajuda-nos a      desenhar nossas relações orientadas a objetos. Como <strong>um programa OO</strong> <strong>é um      problema orientado a objetos</strong>, ela serve para tal.</li>
<li><strong>Não</strong>. Como dito, a UML ajuda-nos a      desenhar nossas relações orientadas a objetos. Como <strong>qualquer problema do nosso dia-a-dia pode ser organizado segundo a      ótica da Orientação a Objetos</strong>, ela serve para muito mais que só      modelar programas. Podemos, por exemplo, modelar a hierarquia de uma      empresa, com seus departamentos, as funções dos funcionários e até mesmo a      burocracia dos processos, chegando ao extremo de mapear até mesmo quem      está trabalhando demais (ou de menos).</li>
</ul>
<p><em>“Nossa, agora estou surpreso. Nunca pensei nessa possibilidade”. </em>Sim, ela existe, porém é muito pouco usada. Eu já cheguei a explicar o problema de alguns relatórios em um departamento público com diagramas UML, mas para esses fins nunca cheguei a usar muito além disso.</p>
<p><em>“Isso significa que podemos utilizá-la para desenhar nossos problemas, independente de serem programas de computador ou não. Legal. Mas ela é usada mais no desenvolvimento de programas, como jogos de computador. Certo?” </em>Exato. Com a UML, nós desenhamos todo o funcionamento do nosso, por exemplo, jogo. É com ela que eu anoto as características de um personagem, o que ele tem de itens, como são esses itens, como ele reage com o mundo de jogo, o que acontece quando ele ataca ou é atacado, quando pega um item ou passa de fase. A UML está para o programa como uma planta está para uma casa ou o roteiro está para um filme.</p>
<p><em> </em></p>
<p><em>“Aaaaahhh. Acho que agora estou entendendo. Eu desenho com a UML o meu programa antes que os programadores programem as minhas idéias, como o roteirista escreve o roteiro do filme antes dele ser gravado” </em>Novamente, <strong>Sim</strong> e <strong>Não. </strong>A UML não dita como você realiza o seu projeto, só desenha o programa. Ou seja, ela é <strong>independente da metodologia do projeto</strong>. Essa tal “metodologia do projeto” é quem dita o que e quando fazer. Tem metodologias onde fazemos a modelagem antes, outras durante ou até depois a programação. Além disso, algumas têm ciclos repetidos e incrementais durante todo o desenvolvimento, outras fazem tudo antes e, a cada problema encontrado volta-se ao início para corrigir tudo. Não existe “a melhor metodologia”: cada uma tem seus prós e contras, sendo recomendada ou não dependendo do que você pretende fazer. Como pode-se ver, a UML é só uma ferramenta para auxiliar o desenvolvimento do programa, independente de como você pretende desenvolvê-lo.</p>
<p><em>“Nossa. Legal isso. Posso fazer meu jogo com uma metodologia que eu prefira e, mesmo assim, utilizar o que você ensina aqui no Nuss...”</em> Além de ser poderosa e flexível, eu considero esse um dos maiores pontos de sucesso da UML.</p>
<p><em>“Como assim flexível, Tiago?”</em>. Isso já é assunto para a próxima parte desse artigo, onde falarei dos diversos diagramas da UML.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nusseagora.blog.br/o-que-raios-e-a-uml-parte-1/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

