<?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>Daniela Araujo &#187; classes</title>
	<atom:link href="http://blog.nyan.com.br/pt/tag/classes/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nyan.com.br/pt</link>
	<description>Flash, ActionScript e eu.</description>
	<lastBuildDate>Fri, 27 Aug 2010 04:25:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Abstração?</title>
		<link>http://blog.nyan.com.br/pt/2009/04/09/abstracao/</link>
		<comments>http://blog.nyan.com.br/pt/2009/04/09/abstracao/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 02:10:41 +0000</pubDate>
		<dc:creator>Daniela</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[abstração]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[objetos complexos]]></category>
		<category><![CDATA[reuso]]></category>

		<guid isPermaLink="false">http://blog.nyan.com.br/pt/?p=230</guid>
		<description><![CDATA[Vamos seguindo com o assunto OOP. Hoje vou falar um pouquinho de abstração. Para não deixar dúvidas sobre o significado da palavra de forma geral, segue a definição do dicionário para o verbo abstrair: abstrair Conjugar do Lat. abstrahere v. tr., fazer abstracção; separar mentalmente (as qualidades ou propriedades dos seres); afastar, desprezar; v. int., considerar [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos seguindo com o assunto OOP. Hoje vou falar um pouquinho de abstração.<br />
Para não deixar dúvidas sobre o significado da palavra de forma geral, segue a definição do dicionário para o verbo abstrair:</p>
<blockquote><p><strong>abstrair</strong></p>
<p>Conjugar<br />
do Lat.  abstrahere</p>
<p>v. tr.,<br />
<span style="color: #ff00ff;"> fazer abstracção;<br />
</span><span style="color: #ff00ff;"> separar mentalmente (as qualidades ou propriedades dos seres);</span><br />
afastar, desprezar;</p>
<p>v. int.,<br />
<span style="color: #ff00ff;"> considerar isoladamente;<br />
simplificar;</span></p>
<p>v. refl.,<br />
distrair-se;<br />
alhear-se;<br />
concentrar-se, absorver-se.</p></blockquote>
<p>E o substantivo abstração:</p>
<blockquote><p><strong>abstracção</strong></p>
<p>do Lat. <em> abstractione</em></p>
<p>s. f.,<br />
<span style="color: #ff00ff;">acção de abstrair;</span><br />
<span style="color: #ff00ff;">separação mental de uma das partes de um todo;</span><br />
estado da pessoa absorta em profunda meditação, contemplação, êxtase, enlevo;<br />
distracção;<br />
<span style="color: #ff00ff;">hipótese</span>.</p></blockquote>
<p>Tudo bem, mas o que é abstração quando se fala de orientação a objetos? É exatamente o que o dicionário diz. Abstração não é algo de OOP, mas é sim uma das bases deste paradigma. E pra quem não sabe o que significa paradigma:</p>
<blockquote><p>paradigma | s. m.</p>
<p>paradigma<br />
s. m.<br />
Gram. Modelo (de conjugação ou de declinação).</p></blockquote>
<p>Sempre fui da idéia de não repetir uma palavra ou um conceito só porque é usado dessa forma e aceitar isso&#8230; Me agrada saber o que eu estou falando. Dizem que OOP é um paradigma de programação (análise e/ou projeto) que se baseia em unidades chamadas objetos. Então vamos abstrair. Ignoremos o português engomadinho. OOP é um modelo ou um jeito de se programar onde a gente trata os pedacinhos do sistema como coisas do mundo real.</p>
<p>Então aproveitando o mundo real, posso dizer que nós somos instâncias da classe Pessoa. E pessoas tem características. Como cor de olhos e cabelos. Mas do que interessa num sistema de cadastro de newsletter a cor dos cabelos do usuário? Absolutamente nada! Então esqueça isso. Se a orientação a objetos diz que devemos programar as coisas como são no mundo real, a abstração, que é uma de suas bases, diz: &#8220;<em><strong>mas não exagere, o mundo real é um sistema muito mais complexo que o seu cadastro de newsletter</strong></em>&#8220;. Devemos criar objetos. Eles devem ser &#8220;vivos&#8221;, mas precisam ser coerentes com seu universo.</p>
<p><strong>Indo além da abstração</strong>, se nessa vida posso lhe dar um conselho sobre OOP é: cuidado com objetos complexos. Normalmente eles são formados por outros objetos. E essa é a parte difícil pra quem sai de uma linguagem procedural para OOP. É ai que as vezes algumas pessoas pecam. Elas misturam tanto que uma Pessoa (do mudo real), é apenas uma pessoa e não um objeto complexo formado por  objetos menores. É como se o cérebro fizesse tudo ao invés de mandar as outras partes fazerem o trabalho delas. O objetivo não é entrar em uma aula de anatomia, então do que estou falando?</p>
<p>Lembra do cadastro de newsletter? Vamos supor que nesse caso o usuário precisa interagir com um formulário. Neste formulário temos dois campos (nome e email) e um botão (enviar), precisaremos ter uma outra telinha, que  irá mostrar a mensagem de status do envio do cadastro e precisamos dar ao usuário a oportunidade de voltar para a tela anterior. Então, o cadastro de newsletter é formado por dois objetos: formulário e tela de resposta. O formulário por sua vez é formado por 3 objetos: dois campos (instâncias de uma mesma classe) e um botão. Enquanto a tela de resposta é formada por 2 objetos: um campo de mensagem e um botão de voltar. Com isso, posso concluir que, um cadastro de newsletter é um objeto complexo, formado por 2 objetos complexos, formado por n objetos&#8230; É assim que se programa em OOP, mas por que dividr tanto? Reuso. Esta é a resposta chave. Mas eu acrescento outras coisas que vem de brinde: organização, flexibilidade e independência entre as partes.</p>
<p>Vamos tentar entender mais sobre isso&#8230; Se eu tiver um objeto do tipo <code>FormResponse</code> (me desculpem a falta de documentação, mas não queria deixar o bloco muito extenso):</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">text</span>.<span style="color: #0066CC;">TextField</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FormResponse <span style="color: #0066CC;">extends</span> <span style="color: #0066CC;">MovieClip</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> FormResponse<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">backButton</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, <span style="color: #0066CC;">this</span>.<span style="color: #006600;">handleBackButtonClick</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">message</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">messageText</span>.<span style="color: #0066CC;">text</span> = <span style="color: #0066CC;">message</span>;
			<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">true</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">hide</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handleBackButtonClick<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;backButtonClick&quot;</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Você concorda que seria muito mais simples lá na minha classe principal eu usar um objeto desses, através dos métodos <code>show</code> e <code>hide</code>, ao invés de fazer todas ou parte destas instruções repetidamente sempre que precisasse mostrar uma mensagem?</p>
<p>Se eu não escrevesse esta classe, la na minha instância principal eu teria (supondo que todos estes elementos estão adicionados no palco):</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">this</span>.<span style="color: #006600;">formResponse</span>.<span style="color: #0066CC;">visible</span> = <span style="color: #000000; font-weight: bold;">true</span>;
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">formResponse</span>.<span style="color: #006600;">messageText</span>.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">&quot;mensagem&quot;</span>;
&nbsp;
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">formResponse</span>.<span style="color: #006600;">backButton</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, handleBackButtonClick<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> handleBackButtonClick<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">// seu codigo aqui</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Mas eu posso ter apenas isso:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">this</span>.<span style="color: #006600;">formResponse</span>.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mensagem&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>E o melhor é que se eu quiser fazer uma animação para a entrada/saída, por exemplo, eu preciso apenas alterar a classe FormResponse, enquanto na versão bagunçada ali em cima eu precisaria mudar o código em todos os lugares onde ele aparece.</p>
<p>Simples, não?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nyan.com.br/pt/2009/04/09/abstracao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
