<?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>AgileZ &#187; simplicidade</title>
	<atom:link href="http://www.brasiltech.net/agilez/tag/simplicidade/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brasiltech.net/agilez</link>
	<description>Metodologias e técnicas aplicadas a desenvolvimento e gerenciamento</description>
	<lastBuildDate>Wed, 29 Dec 2010 23:40:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Programe para uma interface, n&#227;o para uma implementa&#231;&#227;o</title>
		<link>http://www.brasiltech.net/agilez/2009/08/09/como-programar-para-uma-interface-e-nao-para-uma-implementacao/</link>
		<comments>http://www.brasiltech.net/agilez/2009/08/09/como-programar-para-uma-interface-e-nao-para-uma-implementacao/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 00:38:32 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[simplicidade]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/08/09/como-programar-para-uma-interface-e-nao-para-uma-implementacao/</guid>
		<description><![CDATA[Um conceito simples, mas nem sempre bem entendido e aplicado. &#8216;Programar para uma interface e não para uma implementação&#8217;, você sabe o que isto significa? Apesar deste conceito ser aplicável a projetos de software, é mais antigo que ele, e é utilizado bem antes do primeiro compilador ser desenvolvido. Um exemplo bem obvio do que [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="engrenagens" border="0" alt="engrenagens" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/08/engrenagens.jpg" width="257" height="193" /></p>
<p>Um conceito simples, mas nem sempre bem entendido e aplicado. &#8216;Programar para uma interface e não para uma implementação&#8217;, você sabe o que isto significa?</p>
<p>Apesar deste conceito ser aplicável a projetos de software, é mais antigo que ele, e é utilizado bem antes do primeiro compilador ser desenvolvido. Um exemplo bem obvio do que é isto, pode ser encontrado na casa de qualquer pessoa: um interruptor de luz. &#8216;Como assim José?&#8217;.</p>
<p>Um interruptor de luz é um exemplo muito bom. Consiste em um botão, que liga e desliga a luz. Uma <strong>interface</strong> simples, que <strong>esconde</strong> os detalhes de implementação de quem vai utilizá-la. Para ligar a luz, basta apertar o botão, e para desligá-la, adivinhem? Aperte novamente. A implementação está bem <strong>encapsulada – </strong>o usuário não precisa entender nada de pólo positivo, neutro, 127v, amperagem ou resistência. Qual foi o pensamento do designer ao projetar um interruptor de luz? Com certeza foi algo parecido com: &#8216;qual o mínimo possível de informação o usuário do meu produto precisa para usá-lo?&#8217;. </p>
<p><span id="more-19"></span>  Falando em programação de software, podemos aplicar este conceito a vários pontos. Quando estamos codificando, ao criar uma nova classe, devemos sempre nos fazer a mesma pergunta que o designer do interruptor de luz fez: &#8216;quais operações e atributos eu devo tornar públicos para que o usuário possa usá-la de forma simples?&#8217; e a cada nova implementação: &#8216;será que eu preciso expor estes parâmetros? E esse novo atributo?&#8217;. Classes com menos operações e atributos públicos, geralmente são mais simples de serem utilizadas. Lembre-se sempre: outros programadores terão que interagir com as classes e bibliotecas que você desenvolveu. Mantenha a simplicidade e procure ser objetivo.
</p>
<p>Ao criar uma nova tela de cadastro, analogamente: &#8216;quais controles o usuário vai precisar para executar as operações a qual a janela se destina?&#8217;. Um erro muito comum cometido por projetistas de interfaces gráficas é transmitir a forma de funcionamento interno do algoritmo para o usuário. O clássico exemplo são as telas de cadastro. Todo mundo desenvolve, ou já desenvolveu, uma tela com os famosos botões <strong>novo, editar, cancelar, excluir </strong>e<strong> salvar</strong>, pois é a forma como o seu algoritmo funciona, e fica mais fácil publicar essa característica para o usuário. Mas, será que o usuário realmente precisa de um botão &#8216;editar&#8217; quando ele quer editar um registro? Não seria mais fácil o seu sistema detectar que alguém está tentando alterar um registro e simplesmente entrar em modo de edição, como funciona, por exemplo, um editor de texto? Um botão a menos na tela, na maioria das vezes, pode significar uma interface mais simples – que é o sonho de todo usuário.</p>
<p>Poderia citar dezenas de exemplo aqui, mas a idéia não muda. Um carro com câmbio automático é muito melhor do que um no qual você precisa apertar a embreagem para trocar de marcha. E ambos funcionam, só que o primeiro é mais simples.</p>
<p>É lógico que, ao começar a <strong>pensar </strong>dessa forma, o programador vai sentir necessidade de amparo por algumas técnicas que ele pode ainda não dominar – técnicas que serão abordadas por aqui – como padrões de projetos ou Grasp. Um caminho que provavelmente não terá volta, e fará de você um melhor projetista de software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/08/09/como-programar-para-uma-interface-e-nao-para-uma-implementacao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

