Programação orientada a objetos e o Java (parte 5)

No artigo anterior vimos os métodos ou funções-membro e a possibilidade de um método devolver valor de retorno. Agora estudaremos um termo muito importante da programação orientada a objetos, o encapsulamento ou acessibilidade e entenderemos o porque sua utilização é tão importante. Vamos compreender o que são construtores e como funciona dentro do Java.

[ Hits: 34.571 ]

Por: Ygor Thomaz em 12/04/2004 | Blog: http://www.ygorthomaz.net/


Encapsulamento



Encapsulamento é a forma como classes, métodos e atributos podem ser vistos ou utilizados por outras classes. Este importante conceito também é conhecido dentro do mundo da orientação por objetos como acessibilidade ou data hiding (ocultação de dados). Os especificadores de acesso são responsáveis por definir o grau de encapsulamento exibido por uma classes e seus elementos.

Utilizando desta técnica podemos ter um controle maior a partes de nossas classes. Podemos, por exemplo, restringir o usuário que instância a classe, que passa apenas a conhecer o que é necessário para o uso dos objetos criados. Podemos ainda fazer com que certos atributos assumam valores restritos, mantendo-se a consistência e a integridade dos dados armazenados na classe.

Para que essas características citadas possam ser elaboradas fazemos uso dos especificadores de acesso que ocultam partes da classe. Utilizamos alguns deles rapidamente no artigo 3. As palavras reservadas aos especificadores de acesso são public, private, package e protected.

No artigo 4 utilizamos na classe Arcondicionado um atributo chamado "opcao", onde o especificador de acesso protected estava relacionado a ele no código. Agora utilizaremos o especificador private, impedindo que valores inconsistentes sejam armazenados nele, seu uso só pode ser indiretamente realizado por meio de métodos públicos pertencentes a classe. Sendo assim, garantimos a consistência desse atributo.

// Arcondicionado.java
public class Arcondicionado {
  // atributos, agora com private
  private int opcao;

  // métodos/
  public void trocarTemp(int op) {
    // verifica se a opção informada é valida
    if(op >= 0 && op <= 3) {
      opcao = op;
    }
  }
  
  public int obterTemp() {
    return opcao;
  }
}

Podemos testar esta condição instanciando um objeto Arcondicionado tentando atribuir um valor diretamente no atributo "opcao".

// ErroDeAcesso.java
public class ErroDeAcesso {
  public static void main (String args[]) {
    Arcondicionado arno = new Arcondicionado();
    System.out.println(arno.opcao);
    arno.opcao = 2;
    System.out.println(arno.opcao);
  }
}

Ao compilar o código fiquem atentos às mensagens de erros, pois elas evidenciam a restrição.

Agora podemos observar que a restrição a certas partes da classe representa uma forma de divisão de código, pois separa a interface do usuário da classe, atributos e métodos públicos de uma classe, da interface do programador da classe. Atributos e métodos protegidos que formam a interface do programador da classe só podem ser acessados por novas classes que sejam criadas por meio do mecanismo de herança. Elementos declarados como privados (private), são exclusivos da classe.

A utilização correta destas interfaces permitem:
  1. Um código mais claro, pois ficam evidentes os membros que permitem funcionalidades reais daqueles que são auxiliares.
  2. Os erros de programação diminuem pois as interfaces tornam-se mais simples.
  3. São proporcionadas facilidades para extensão, criando classes novas através de classes existentes.
  4. A facilidade de modificação aumenta, porque a classe é conhecida pela sua interface, logo modificações que não afetem a interface são transparentes para usuários da classe.

Uma observação importante, quando um especificador de acesso não é determinado o Java assume o tipo "package", que é semelhante ao public para acesso de classes que pertencem ao mesmo pacote, protegido para subclasses e privado para instâncias das subclasses.

Os especificadores de acesso "private" e "protected" podem ser equivalentes com os especificadores "package" e "public", porem isso só ocorre quando tratamos a classe e suas instâncias. Assim quando utilizamos subclasses e suas instâncias esses especificadores tem características bastantes distintas. Essa idéia ficará mais clara quando trabalharmos com herança.

Podemos resumir dizendo que a técnica de encapsulamento é capaz de separar o projeto (design) da implementação (coding).

Página anterior     Próxima página

Páginas do artigo
   1. Objetivo do artigo
   2. Encapsulamento
   3. Construtores
   4. Terminando e referências
Outros artigos deste autor

Programação orientada a objetos e o Java (parte 1)

Programação orientada a objetos e o Java (parte 2)

Programação orientada a objetos e o Java (Parte 6)

Dominando o iptables (parte 1)

Dominando o Iptables (parte 2)

Leitura recomendada

Máquina Virtual Java (Java Virtual Machine)

Jubler - Editor de legendas de filmes para Linux

Conceito OOP no Java

Abrindo aplicações Java de uma vez por todas

Montando um ambiente JAVA básico (Eclipse traduzido + JDK 1.5)

  
Comentários
[1] Comentário enviado por fabio em 12/04/2004 - 20:17h

Muito bom o artigo! Estou aprendendo Java e essa séria de artigos tem sido de grande utilidade.

[]'s

[2] Comentário enviado por gustavo_marcon em 12/04/2004 - 20:21h

Muito massa essa tua série de artigos, sugiro que continue com ela e o que vc acha de falar em outros artigos sobre interfaces gráficas?

Teus artigos estão sendo muito utéis p/ mim que estou aprendendo Java agora.

Só tenho uma perguntinha, vi q vc usou o comando javap, eu não o conhecia vc poderia me dizer p/ que ele serve?

[3] Comentário enviado por ygorth em 13/04/2004 - 14:54h

Ola,

pode ficar tranquilo gustavo eu não cosutumo deixar um desafio pela metade. Por enquanto prometo apenas terminar a serie e POO e Java depois veremos, já tinha isso em mente. (:

O javap nada mais é do que um disassembler em bytecodes e por essa caracteristicas pode ter diversos usos como o que eu fiz no artigo.

Agradeço a todos que tem comentado sobre a serie.

Abracos!

[4] Comentário enviado por ygorth em 13/04/2004 - 14:57h

Ola,

pode ficar tranquilo gustavo eu não cosutumo deixar um desafio pela metade. Por enquanto prometo apenas terminar a serie e POO e Java depois veremos, já tinha isso em mente. (:

O javap nada mais é do que um disassembler em bytecodes e por essa caracteristicas pode ter diversos usos como o que eu fiz no artigo.

Agradeço a todos que tem comentado sobre a serie.

Abracos!

[5] Comentário enviado por ygorth em 13/04/2004 - 15:01h

Ola,

pode ficar tranquilo gustavo eu não cosutumo deixar um desafio pela metade. Por enquanto prometo apenas terminar a serie e POO e Java depois veremos, já tinha isso em mente. (:

O javap nada mais é do que um disassembler em bytecodes e por essa caracteristicas pode ter diversos usos como o que eu fiz no artigo.

Agradeço a todos que tem comentado sobre a serie.

Abracos!

[6] Comentário enviado por ygorth em 13/04/2004 - 15:30h

Desculpem os comentarios repetidos ! A conexão da faculdade deixa a desejar (:


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts