<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Andre Fonseca &#187; objeto</title>
	<atom:link href="http://metronus.com/blog/tag/objeto/feed/" rel="self" type="application/rss+xml" />
	<link>http://metronus.com/blog</link>
	<description>blog sobre tecnologia, automação e idéias em geral</description>
	<lastBuildDate>Thu, 15 Jul 2010 21:51:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Objetos trocam mensagens</title>
		<link>http://metronus.com/blog/2010/01/12/objetos-trocam-mensagens/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://metronus.com/blog/2010/01/12/objetos-trocam-mensagens/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 05:14:09 +0000</pubDate>
		<dc:creator>Andre</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[agil]]></category>
		<category><![CDATA[atualidades]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[orientação]]></category>

		<guid isPermaLink="false">http://metronus.com/blog/?p=322</guid>
		<description><![CDATA[Mais uma vez, devido a uma outra troca de e-mails,  vi um outro assunto super legal que gostaria de dividir com vocês.  A um certo tempo atrás, no blog do Calcado, li um artigo sobre o fato de objetos não serem atributos + funções. Neste artigo, o Calcado, mostra que os objetos ao invés de possuírem [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmetronus.com%2Fblog%2F2010%2F01%2F12%2Fobjetos-trocam-mensagens%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmetronus.com%2Fblog%2F2010%2F01%2F12%2Fobjetos-trocam-mensagens%2F&amp;source=aoqfonseca&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Mais uma vez, devido a uma outra troca de e-mails,  vi um outro assunto super legal que gostaria de dividir com vocês.  A um certo tempo atrás, no blog do <a href="http://blog.fragmental.com.br">Calcado</a>, li um artigo sobre o fato de objetos não serem atributos + funções. Neste artigo, o <a href="http://blog.fragmental.com.br">Calcado</a>, mostra que os objetos ao invés de possuírem atributos e funções, eles na verdade possuem estados e comportamentos.  Reproduzindo um trecho do artigo :</p>
<blockquote><p>Objetos não possuem propriedades + funções, eles possuem<strong>estado + comportamento</strong>. Você provavelmente vai usar atributos (i.e. variáveis de instancia) e funções (de instancia também) para implementar isso mas é um detalhe de implementação, não algo que deva ser exposto [sic]</p></blockquote>
<p>Uma outra coisa que penso é que além disso que ele comentou, uma outra dificuldade que vejo no pessoal que está &#8220;montando&#8221; a arquitetura de sistemas, é definir como será a interação entre objetos.  Quem nunca ficou horas pensando onde colocar determinado método &#8211; &#8220;<em>o método calcular preço  é da loja ou do produto?</em>&#8220;; nome do método,  se deveria expor dados por get e set, etc .  Essa dúvidas vem da nossa visão equivocada da troca de dados entre objetos.</p>
<p><img class="alignleft" style="margin: 11px;" src="http://images.quebarato.com.br/photos/big/9/7/1B8097_1.jpg" alt="" width="229" height="185" />Se considerarmos que objetos não possuem métodos ou funções( função me parece tão modular e não OO) e sim &#8220;portas de entradas&#8221;.   Essas portas são como caixas de correio por onde enviamos e/ou recebemos mensagens com pedidos ou informações.  Para ficar mais fácil de entender,  imaginemos a situação de uma grande rede de lojas.  Esse grande rede possui diversas lojas, que possuem diversos produtos e clientes.  De cara, podemos dizer que temos 3 entidades :  Cliente, Produto e Loja.</p>
<p>Agora a pergunta: como você implementaria a lógica de obter preço &#8211; o cliente vai na loja, pega um produto e quer saber o preço.  Tenho certeza que alguns diriam que colocariam um método getPreco na classe de produto.  Outros fariam um PrecoControlador que pegaria o custo do produto e faria a operação de cálculo pegando a margem de lucro da loja, custo da loja e por seguiria&#8230;. Outros inventariam a classe preço que diante a loja e produto se calcularia&#8230;.  De novo fazendo assim ainda estamos pensando em objetos como conjunto de funções e atributos e esquecendo da troca de mensagens.</p>
<p>Uma forma que vejo mais simples e mais expressiva de fazer (logo fica mais claro para entender o sistema) seria de perguntar para a loja o preço. Sendo assim, o cliente teria um produto e perguntaria a loja o preço. A loja consulta sua tabela de preço e responde.</p>
<blockquote><p>Cliente  &#8211; pega produto &#8212;  &gt; Produto</p>
<p>Cliente &#8212; informa o produto a loja &#8211;&gt; Loja</p>
<p>Loja &#8212; consulta tabela &#8211;&gt; Tabela</p>
<p>Loja &#8212; responde ao cliente &#8211;&gt;</p></blockquote>
<p>Fica bem elegante não&#8230; Mas se ainda não conseguiu ver:</p>
<blockquote><p>class Andre  extends Cliente</p>
<p>&#8230;</p>
<p>Produto lapis = new Lapis();</p>
<p>double preco = lojaAbobrinha.qualEhOPreco(lapis);</p>
<p>..</p>
<p>Abobrinha extends Loja</p>
<p>&#8230;</p>
<p>double qualEhOPreco(Produto produto)</p>
<p>minhaTabelaPreco.qualPrecoAtual(produto);</p></blockquote>
<p>Quem for fazer a manutenção do código,  só de ler, já começa a entender oque está acontecendo e começa deduzir as demais interações.</p>
]]></content:encoded>
			<wfw:commentRss>http://metronus.com/blog/2010/01/12/objetos-trocam-mensagens/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
