<?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>Paulo Canedo</title>
	<atom:link href="http://www.paulocanedo.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulocanedo.com.br</link>
	<description>Blog pessoal - TI, Java, NetBeans e Programação em geral</description>
	<lastBuildDate>Wed, 26 May 2010 16:30:10 +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>Imagem com cantos arredondados no Java</title>
		<link>http://www.paulocanedo.com.br/2010/05/26/imagem-com-cantos-arredondados-no-java/</link>
		<comments>http://www.paulocanedo.com.br/2010/05/26/imagem-com-cantos-arredondados-no-java/#comments</comments>
		<pubDate>Wed, 26 May 2010 16:30:10 +0000</pubDate>
		<dc:creator>Paulo Canedo</dc:creator>
				<category><![CDATA[Interface do Usuário]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.paulocanedo.com.br/?p=237</guid>
		<description><![CDATA[De uns tempos para cá notei uma nova onda dos desenvolvedores em arredondar os cantos da imagens para ficar mais estiloso, realmente o resultado fica bem mais agradável, então vamos ver como se faz isso em Java, vamos começar com o que mais interessa a todos, o código fonte da mágica: 0 1 2 3 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.paulocanedo.com.br/wp-content/uploads/2010/05/roundimagesample.jpg"><img class="aligncenter size-full wp-image-238" title="Imagem com canto arrendondado em Java" src="http://www.paulocanedo.com.br/wp-content/uploads/2010/05/roundimagesample.jpg" alt="Imagem com canto arredondado em Java" width="450" height="310" /></a></p>
<p>De uns tempos para cá notei uma nova onda dos desenvolvedores em arredondar os cantos da imagens para ficar mais estiloso, realmente o resultado fica bem mais agradável, então vamos ver como se faz isso em Java, vamos começar com o que mais interessa a todos, o código fonte da mágica:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> RoundImage <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">Stroke</span> stroke <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BasicStroke</span><span style="color: #009900;">&#40;</span>1.5f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> RoundImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Image</span> getRoundImage<span style="color: #009900;">&#40;</span><span style="color: #003399;">Image</span> imageSource, <span style="color: #000066; font-weight: bold;">int</span> radius<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000066; font-weight: bold;">int</span> width <span style="color: #339933;">=</span> imageSource.<span style="color: #006633;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> height <span style="color: #339933;">=</span> imageSource.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003399;">BufferedImage</span> image <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span>width, height, <span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_ARGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">RoundRectangle2D</span> rect <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RoundRectangle2D</span>.<span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, width, height, radius, radius<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003399;">Graphics2D</span> g2 <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics2D</span><span style="color: #009900;">&#41;</span> image.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
g2.<span style="color: #006633;">setRenderingHint</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_ANTIALIASING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_ANTIALIAS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
g2.<span style="color: #006633;">clip</span><span style="color: #009900;">&#40;</span>rect<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
g2.<span style="color: #006633;">drawImage</span><span style="color: #009900;">&#40;</span>imageSource, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
g2.<span style="color: #006633;">setStroke</span><span style="color: #009900;">&#40;</span>stroke<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
g2.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
g2.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>rect<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">return</span> image<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>O truque baseia-se em criar uma nova instância de BufferedImage com suporte ao canal alpha e restringir a área de trabalho do graphics para um shape do tipo RoundRectangle2D através do método clip presente na classe Graphics2D, após isso é só mandar pintar a imagem original em nossa nova imagem com suporte a alpha e restrição aos cantos para ficar arredondado.</p>
<p>Existe um probleminha, quando utilizamos o clip do objeto Graphics2D, não obtemos o recurso de antialising porque o mesmo não o fornece através do clip, então para conseguirmos o efeito de suavidade desejada nos cantos arredondados podemos fazer um workaround quase inperceptível aí, desenhe um RoundRectangle2D (sem preenchimento, lógico) usando uma cor aproximada ao background, no caso utilizei o branco por ser uma cor que se mistura facilmente com várias outras cores.</p>
<p>Abaixo segue o código fonte de um exemplo de utilização que produz a imagem de exemplo no começo do post.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> RoundImageSample <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> RoundImageSample<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003399;">ImageIcon</span> icon <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://www.paulocanedo.com.br/imagens/brasil.jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
roundImageLabel.<span style="color: #006633;">setIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span>RoundImage.<span style="color: #006633;">getRoundImage</span><span style="color: #009900;">&#40;</span>icon.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">MalformedURLException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
roundImageLabel <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
setDefaultCloseOperation<span style="color: #009900;">&#40;</span>javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">WindowConstants</span>.<span style="color: #006633;">EXIT_ON_CLOSE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
setTitle<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;RoundImage, paulocanedo.com.br&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
getContentPane<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setLayout</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> java.<span style="color: #006633;">awt</span>.<span style="color: #003399;">GridLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
roundImageLabel.<span style="color: #006633;">setHorizontalAlignment</span><span style="color: #009900;">&#40;</span>javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">SwingConstants</span>.<span style="color: #006633;">CENTER</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
getContentPane<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>roundImageLabel<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
java.<span style="color: #006633;">awt</span>.<span style="color: #003399;">Dimension</span> screenSize <span style="color: #339933;">=</span> java.<span style="color: #006633;">awt</span>.<span style="color: #003399;">Toolkit</span>.<span style="color: #006633;">getDefaultToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getScreenSize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
setBounds<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>screenSize.<span style="color: #006633;">width</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">420</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span>, <span style="color: #009900;">&#40;</span>screenSize.<span style="color: #006633;">height</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">280</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">420</span>, <span style="color: #cc66cc;">280</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
java.<span style="color: #006633;">awt</span>.<span style="color: #003399;">EventQueue</span>.<span style="color: #006633;">invokeLater</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Runnable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">new</span> RoundImageSample<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">JLabel</span> roundImageLabel<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.paulocanedo.com.br/2010/05/26/imagem-com-cantos-arredondados-no-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Alterando o Java padrão no linux Ubuntu</title>
		<link>http://www.paulocanedo.com.br/2009/11/18/alterando-o-java-padrao-no-linux-ubuntu/</link>
		<comments>http://www.paulocanedo.com.br/2009/11/18/alterando-o-java-padrao-no-linux-ubuntu/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 17:06:43 +0000</pubDate>
		<dc:creator>Paulo Canedo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.paulocanedo.com.br/?p=210</guid>
		<description><![CDATA[Uma coisa que acho muito incômoda no ubuntu é o fato de, sempre que um nova distribuição Java é instalada o Java padrão do sistema é alterado, isso acontece as vezes sem mesmo que a gente perceba, quando você quer o sun-java instalado por padrão é quase impossível não instalar um outro aplicativo que adicione [...]]]></description>
			<content:encoded><![CDATA[<p>Uma coisa que acho muito incômoda no ubuntu é o fato de, sempre que um nova distribuição Java é instalada o Java padrão do sistema é alterado, isso acontece as vezes sem mesmo que a gente perceba, quando você quer o sun-java instalado por padrão é quase impossível não instalar um outro aplicativo que adicione como dependência outro java (muitas vezes o open-jdk) e esse novo passa a assumir o papel do java padrão.</p>
<p>Para resolver isso um truque muito simples pelo terminal resolve o problema:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-alternatives <span style="color: #660033;">--config</span> java</pre></td></tr></table></div>

<p><img class="alignnone size-full wp-image-217" title="Alterando o Java padrão do Ubuntu" src="http://www.paulocanedo.com.br/wp-content/uploads/2009/11/alterando_java_padrao_ubuntu.jpg" alt="Alterando o Java padrão do Ubuntu" width="600" height="334" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulocanedo.com.br/2009/11/18/alterando-o-java-padrao-no-linux-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entendendo orientação a objetos, parte 3</title>
		<link>http://www.paulocanedo.com.br/2009/11/17/entendendo-orientacao-a-objetos-parte-1-2/</link>
		<comments>http://www.paulocanedo.com.br/2009/11/17/entendendo-orientacao-a-objetos-parte-1-2/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 20:28:17 +0000</pubDate>
		<dc:creator>Paulo Canedo</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[orientação a objetos]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.paulocanedo.com.br/?p=205</guid>
		<description><![CDATA[Estou de volta para continuar a série de artigos sobre POO. A partir de agora, começaremos a ver conceitos um pouco mais avançados. Gostaria de lembrar também, que algumas linguagens orientadas a objetos tem certas diferenças em sintaxe. Aqui vou me restringir à linguagem Java fazendo comentários com C++. Em seqüência ao último capítulo, vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Estou de volta para continuar a série de artigos sobre POO. A partir de agora, começaremos a ver conceitos um pouco mais avançados. Gostaria de lembrar também, que algumas linguagens orientadas a objetos tem certas diferenças em sintaxe. Aqui vou me restringir à linguagem Java fazendo comentários com C++.</p>
<p>Em seqüência ao último capítulo, vamos continuar a entender a herança em POO. Como foi visto anteriormente herança é a propriedade de uma classe herdar informações (ex.: atributos e métodos) de uma outra.</p>
<p>Em alguns casos, uma classe pode herdar informações de uma ou mais classes simultaneamente. Vamos supor que tenhamos as classes <em>Destruidor</em> e <em>Defensor </em>com uma terceira classe <em>Robo </em>herdando das duas anteriores, neste exemplo nosso robô assumirá as características de <em>Destruidor</em> e <em>Defensor</em> ao mesmo tempo, herdando as características de duas classes. Esta capacidade de herdar várias classes, chama-se <strong>herança múltipla</strong>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Destruidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Destruidor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> atacar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Atirar com fuzil.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Defensor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Defensor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> defender<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Defender-se com escudo.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Este código não compila!!! Apenas para fim didático */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Robo <span style="color: #000000; font-weight: bold;">extends</span> Defensor, Destruidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Robo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Robo robo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Robo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        robo.<span style="color: #006633;">atacar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        robo.<span style="color: #006633;">defender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Na linguagem C++ temos a possibilidade de herdar várias classes apenas especificando na declaração da classe, já na linguagem java não é possível fazer com que uma classe herde (estenda) mais de uma classe, então temos que contornar o problema utilizando outras técnicas em Java, vamos entender o porquê desta restrição.</p>
<p>De volta ao exemplo da classe sobre robôs, desta vez vamos supor que tenhamos as seguintes classes: <em>Prototipo</em>, <em>Destruidor </em>e <em>AutoDestruidor</em>, vamos analisar como seria o código utilizando a classe <em>Robo </em>para herdar as características das anteriores:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Prototipo <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Prototipo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> atacar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Atirar de pistola.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Destruidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Destruidor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> atacar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Atirar com fuzil.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AutoDestruidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> AutoDestruidor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> atacar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Robô bomba, explodir!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Este código não compila!!! Apenas para fim didático */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Robo <span style="color: #000000; font-weight: bold;">extends</span> Destruidor, AutoDestruidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Robo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Robo robo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Robo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        robo.<span style="color: #006633;">atacar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E agora? Se eu mandar o robô atacar, ele atira de pistola, de fuzil ou ele se detona? Esse é o conhecido <strong>problema do diamante</strong> (desenhe a modelagem UML dessas classes e entenderá o porquê deste nome). O problema do diamante é o motivo especial pelo qual a linguagem Java não trabalha diretamente com herança múltipla. O que poderíamos fazer para contornar este problema? Utilizar <strong>interfaces</strong>, desta forma sempre teremos apenas uma implementação para cada método.</p>
<p>Agora que sabemos como funciona herança, podemos conhecer o terceiro e último modificador de encapsulamento, o <strong>protected</strong>, que assume <em>private </em>ou <em>public </em>de acordo com a classe a qual está sendo acessada, com ele especificamos que um atributo (ou método) é definido como <em>private </em>para subclasses (classes filhas herdadas) e as classes do mesmo pacote, enquanto fica definida como <em>public </em>para as demais classes.</p>
<p>O modificador <strong>final </strong>serve para indicar que é proibido modificações posteriores. Pode ser usado em classe, método e atributos, uma classe com o modificador <em>final </em>não poderá ser herdada por nenhuma outra classe, nem um método poderá ser sobrescrito tampouco poderá um atributo ter seu valor modificado depois de uma atribuição inicial.</p>
<p>Já o modificador <em>static </em>define que o atributo (ou método) será de acesso da classe e não do objeto. Qual a diferença disso? Se um método pertence ao objeto, ele somente poderá ser acessado após haver uma instância alocada da classe, se temos dois objetos, <em>carroA </em>e <em>carroB</em>, da classe <em>Carro </em>a qual possui um método <em>correr</em>, se fizermos uma chamada para o método <em>correr </em>no objeto <em>carroA </em>e no <em>carroB</em>, teremos duas chamadas do método <em>correr </em>ocorrendo em posições de memória diferentes onde seu resultado vai depender das variáveis particulares de <em>carroA </em>e <em>carroB</em>. Caso o modificador <em>static </em>fosse adicionado ao método <em>correr</em>, não seria necessário alocar nenhuma instância de <em>Carro </em>para que pudéssemos fazer uma chamada ao método <em>correr</em>, este método poderia ser chamado diretamente da classe <em>Carro</em>.</p>
<p>Também podemos utilizar o modificador <em>static </em>em atributos, isto seria propício para termos uma variável a qual todos os objetos pudessem conhecer o seu valor, tal fato ocorre devido a utilização do modificador <em>static</em>, ao invés de serem alocados <em>n</em> atributos para <em>n</em> objetos, é alocado apenas 1 atributo para n objetos, onde todos os objetos têm acesso ao mesmo atributo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Carro <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> numero<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Carro<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> modelo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">modelo</span> <span style="color: #339933;">=</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> correr<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Estou correndo de %s. Fui o %dº a sair.&quot;</span>, modelo, <span style="color: #339933;">++</span>numero<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> frear<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Pisar no freio.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getModelo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getNumero<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> numero<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Carro carroA <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Carro<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ferrari&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Carro carroB <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Carro<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Porsche&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        carroA.<span style="color: #006633;">correr</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        carroB.<span style="color: #006633;">correr</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Carro.<span style="color: #006633;">frear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Execução da classe Carro.java:</p>
<pre>Estou correndo de Ferrari. Fui o 1º a sair.
Estou correndo de Porsche. Fui o 2º a sair.
Pisar no freio.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.paulocanedo.com.br/2009/11/17/entendendo-orientacao-a-objetos-parte-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
