<?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 &#187; Java</title>
	<atom:link href="http://www.paulocanedo.com.br/tag/java/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>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>
		<item>
		<title>Entendendo Orientação a Objetos &#8211; Parte 2</title>
		<link>http://www.paulocanedo.com.br/2009/11/17/193/</link>
		<comments>http://www.paulocanedo.com.br/2009/11/17/193/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:57:00 +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=193</guid>
		<description><![CDATA[Continuando nossa jornada no mundo da POO, vamos agora detalhar mais o conceito de classe, demonstrar exemplos específicos e iniciar a teoria sobre herança. Espero que, a partir da leitura da segunda parte deste artigo todos estejam capazes de implementar sua própria classe, então vamos ao trabalho! Primeiramente vamos entender a estrutura de uma classe, [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando nossa jornada no mundo da POO, vamos agora detalhar mais o conceito de classe, demonstrar exemplos específicos e iniciar a teoria sobre herança. Espero que, a partir da leitura da segunda parte deste artigo todos estejam capazes de implementar sua própria classe, então vamos ao trabalho!</p>
<p>Primeiramente vamos entender a estrutura de uma classe, a seguir temos um exemplo (em java) simples de uma classe <em>Relogio</em> que é capaz de imprimir um determinado horário.</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
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**  * Declaração da classe Relogio
     * @author paulocanedo */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Relogio <span style="color: #009900;">&#123;</span>
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Atributo privado do  tipo inteiro que guarda o valor do atributo hora  */</span>
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> hora<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Atributo privado do tipo inteiro que guarda o valor do atributo minuto */</span>
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> minuto<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Construtor da classe Relogio */</span>
 <span style="color: #000000; font-weight: bold;">public</span> Relogio<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: #008000; font-style: italic; font-weight: bold;">/** * Método que retorna a hora e o minuto em uma String formatada no estilo hora:min
 * @return Hora e Minuto numa String formatada */</span>
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getHoraMinuto<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> <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;%d:%d&quot;</span>, hora, minuto<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: #009900;">&#125;</span></pre></td></tr></table></div>

<p>O método <em>Relogio()</em> tem o mesmo nome da classe por ser o método construtor, ou seja, quando uma classe é instanciada, imediatamente este método é chamado. Uma classe pode ter mais de um construtor, veremos isto um pouco mais tarde.</p>
<p>Os atributos <em>hora</em> e <em>minuto</em> estão com o modificador <em>private</em>, ou seja, estes atributos estarão visíveis apenas dentro do escopo da classe <em>Relogio</em> enquanto que o método <em>getHoraMinuto</em>(), possui o modificador <em>public</em> que indica que este método pode ser acessado por qualque classe. Mas&#8230; se os atributos <em>hora</em> e <em>minuto</em> possuem o modificador <em>private</em> e a função do método <em>getHoraMinuto</em>() (com modificador <em>public</em>) é de retornar uma string formatada contendo os atributos <em>hora</em> e <em>minuto</em> então pode haver um problema ao acessar este método? A resposta é não, isto ocorre porque o método <em>getHoraMinuto</em>() está na mesma classe que os atributos <em>hora</em> e <em>minuto</em>, em fim, o método <em>getHoraMinuto</em>() coleta as informações dos atributos e entrega para qualquer classe, agindo como uma espécie de intermediador.</p>
<p>Uma boa prática de programação é deixar todos os atributos de uma classe com o modificador <em>private</em> para dar segurança ao código. É uma forma de protegê-lo contra outros mal intencionados e até mesmo de protegê-lo contra você mesmo, sim isto é verdade, um programador destrói seu próprio código caso não tenha cuidado. Esta prática de esconder as coisas dentro da classe chama-se encapsulamento.<br />
OK, mas uma hora eu vou precisar acessar um atributo através de outra classe, então para isso vamos utilizar os métodos chamados de <strong>get </strong>(pega o valor de um atributo) e <strong>set</strong> (define o valor de um atributo). Abaixo está um exemplo onde é mostrado a necessidade de trabalhar-se com get e set:</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
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**  * Declaração da classe Relogio  *
* @author paulocanedo */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Relogio <span style="color: #009900;">&#123;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Atributo privado do tipo inteiro que guarda o valor do atributo hora */</span>
 <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> hora<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Construtor da classe Relogio.
 * Atribue valor -1 ao atributo hora (indica que o valor é inválido).*/</span>
 <span style="color: #000000; font-weight: bold;">public</span> Relogio<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;">this</span>.<span style="color: #006633;">hora</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Coleta as informações do atributo hora
  * @return Caso a hora seja válida retorna a hora contida no objeto caso contrário retorna -1 indicando valor inválido da hora.
  */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getHora<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;">if</span><span style="color: #009900;">&#40;</span>hora <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> hora <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> hora<span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #008000; font-style: italic; font-weight: bold;">/** * Define o valor da hora caso esta seja válida, caso contrário define valor -1 correspondente ao valor inválido
   * @param hora Valor inteiro correspondente a hora
   */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setHora<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> hora<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>hora <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> hora <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">24</span><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;">hora</span> <span style="color: #339933;">=</span> hora<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Na declaração do método <em>setHora</em>(int), podemos notar a presença da palavra chave <strong>this</strong>. Esta palavra serve para explicitar que o acesso está sendo na própria classe a qual está trabalhando (e não a um escopo local). Na linha <em>this.hora = hora</em> indica que o atributo de classe <em>hora</em> está recebendo o valor da variável <em>hora</em> (recebida pela passagem de parâmetro). Generalizando o <strong>this</strong> obriga que o acesso seja no escopo de classe.</p>
<p>Outro problema que a POO veio resolver sobre a programação estruturada foi o conceito de reutilização de código. Uma das formas encontradas para sanar este problema é o uso de herança. Basicamente herança, computacionalmente falando, é a propriedade de uma classe herdar informações (ex.: atributos e métodos) de uma outra.</p>
<p>Mas onde usar herança? Só a experiência consegue ensinar um programador a descubrir quando usar herança, mas uma forcinha com exemplos ajuda bastante quando se está começando. Vamos supor que tenhamos que implementar uma classe para um quadrado e um retângulo. Sabemos que tanto o quadrado quanto o retângulo possuem as características de um quadrilátero, ou seja, eles herdam as características de um quadrilátero. Assim podemos ter a classe Quadrilatero sendo a classe pai e as classes Quadrado e Retangulo como suas classes filhas que herdam todas as propriedades de sua classe pai.</p>
<p>Para entender melhor o conceito de herança, tente pensar em coisas na natureza que sigam o conceito de herança, tente identificar as propriedades que podem ser herdadas de uma coisa para outra. Na próxima parte deste artigo, vou trazer um maior detalhamento sobre <strong>herança múltipla</strong>, modificadores <strong>static</strong>, <strong>final</strong> e <strong>protected</strong>, além de exemplos práticos para melhor compreensão. Obrigado a todos os leitores!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulocanedo.com.br/2009/11/17/193/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
