<?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>Mauricio Aniche &#187; pre</title>
	<atom:link href="http://www.aniche.com.br/tag/pre/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aniche.com.br</link>
	<description>Pensamentos sobre desenvolvimento de software</description>
	<lastBuildDate>Mon, 17 Oct 2011 00:59:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PRE &#8211; Princípio da Responsabilidade Exclusiva</title>
		<link>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/</link>
		<comments>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:57:00 +0000</pubDate>
		<dc:creator>mauricioaniche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pre]]></category>
		<category><![CDATA[srp]]></category>

		<guid isPermaLink="false">/post/2009/01/28/PRE-Principio-da-Responsabilidade-Exclusiva.aspx</guid>
		<description><![CDATA[Segundo o livro Use a Cabeça: Desenvolvimento de Softwares, a definição de PRE é: Cada objeto de seu sistema deve ter uma responsabilidade exclusiva e todos os serviços do objeto devem estar orientados à execução dessa responsabilidade. Em outras palavras, uma classe deve ser responsável por uma determinada função, e só ela pode exercê-la. Uma <a href='http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p align="justify">Segundo o livro <em>Use a Cabeça: Desenvolvimento de Softwares</em>, a definição de PRE é: <em>Cada objeto de seu sistema deve ter uma <strong>responsabilidade exclusiva </strong>e todos os serviços do objeto devem estar orientados à execução dessa responsabilidade.</em> Em outras palavras, uma classe deve ser responsável por uma determinada função, e só ela pode exercê-la.</p>
<p align="justify">Uma classe <em>Carro</em>, por exemplo, deve ser unica e exclusivamente responsável por realizar funções de um carro (como medir óleo, acender farol, etc). A classe Carro não deve ser responsável por saber se lavar (essa é uma responsabilidade que poderia ser entregue a uma classe <em>LavaRapido</em>, por exemplo).</p>
<p align="justify">Conversando hoje com o <a href="http://www.muriloamendola.com.br" target="_blank">Murilo Amêndola</a>, discutimos sobre como saber quais as responsabilidades de uma classe. Concordamos que não é uma tarefa trivial e que depende de muita experiência para que todas suas classes tenham um alto nível de coesão. Lendo hoje um trecho do livro citado acima, encontrei um algoritmo muito interessante para saber se determinada responsabilidade deve ou não pertencer a determinada classe. Vou reproduzí-lo aqui:</p>
<div>
<ol>
<li>Escreva, em uma folha de papel, várias linhascomo essa: <strong>O [espaço] [espaço] sozinho.</strong> Escreva 1 linha dessa para cada método da classe que você está testando quanto ao PRE.</li>
<li>No primeiro espaço em branco de cada linha, preencha o nome da classe. No segundo espaço em branco, anote um dos métodos da classe. Faça isso para todos os métodos.</li>
<li>Leia cada linha em voz alta. Você pode até adicionar uma letra ou palavra para que a leitura fique adequada. Se a frase que você disse fez algum sentido, então esse método realmente pertence a essa classe. Se não fizer nenhum sentido, então provavalmente esse método não pertence a essa classe.</li>
</ol>
</div>
<p align="justify">Voltando ao exemplo da classe Carro:</p>
<div>
<ul>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se liga</span> sozinho. (CERTO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se desliga</span> sozinho. (CERTO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">trocaPneus</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">dirige</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se lava</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">medeOleo</span> sozinho. (CERTO)</li>
</ul>
</div>
<p align="justify">Repare que faz todo sentido o carro medir óleo sozinho, enquanto não faz sentido nenhum o carro se dirigir sozinho (esse método deveria estar em uma classe Motorista), ou se lavar sozinho (deveria ser responsabilidade da classe LavaRapido)!</p>
<p align="justify">O método liga e desliga não fazem taaanto sentido (afinal, um carro não se liga sozinho), mas nesse caso, não vejo outra alternativa (é o carro que sabe como se ligar!). Isso mostra que a regra acima é apenas uma diretriz, e por isso você deve usar de bom senso e de sua experiência.</p>
<p align="justify">O interessante é que você pode adaptar essa regra até para métodos que recebem parâmetros. Se você tiver um método troca(peça), você escreve a seguinte sentença: O <strong>carro </strong><span style="text-decoration: underline;">troca [uma]  peça</span> sozinho. No caso, também não faz muito sentido, você poderia ter uma classe Mecânico, com o método troca(peça, carro).</p>
<p align="justify">Enfim, é uma análise interesse, não acham?</p>
<p align="justify"><em>(Exemplo retirado do livro Use a Cabeça: Desenvolvimento de Softwares, capítulo 5.</em>)</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.aniche.com.br%2F2009%2F01%2Fpre-principio-da-responsabilidade-exclusiva%2F&amp;title=PRE%20%26%238211%3B%20Princ%C3%ADpio%20da%20Responsabilidade%20Exclusiva" id="wpa2a_2"><img src="http://www.aniche.com.br/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

