Pesquisar neste blog

quarta-feira, 27 de junho de 2012

Encapsulamento em Java O.O.


Poderíamos dizer que encapsular significa, na orientação à objetos, separar um programa em partes isolando-as o máximo possível, protegendo o acesso direto aos atributos de uma classe com o objetivo de deixar o programa mais flexível e facilitar o trabalho no código.
Para isso se faz necessário o uso de modificadores de acesso mais restritivos nos atributos da classe. Esses atributos são manipulados indiretamente com o uso de métodos específicos. O padrão usado para a manipulação desses atributos são os métodos set (que define o valor do atributo) e get (que retorna o valor do atributo).

Modificadores de Acesso

Seguem abaixo os modificadores de acesso. 

Public

Deixa visível a classe ou membro para todas as outras classes, subclasses e pacotes do projeto Java.

Private

Deixa o atributo visível apenas para a classe em que o mesmo se encontra.

Protected

Deixa o atributo visível para todas as outras classes e subclasses que pertencem ao mesmo pacote. Neste caso apenas as classes do mesmo pacote tem acesso ao membro, enquanto nem mesmo pacotes de suas subclasses tem acesso.

Sem Modificador (Padrão)

Permite acesso apenas ao pacote em que o membro se encontra.

Exemplo de Código

Segue abaixo o código de um programa que guarda os dados digitados por um usuário e retorna os valores.

Pessoa.java

Nesta classe definimos os atributos como privados usando private. Depois criamos os métodos set e get para cada atributo da classe, lembrando que o primeiro nos permite definir um valor para o atributo, enquanto o segundo retorna o valor do atributo.
Da mesma forma que nos métodos construtores mais simples usados nos códigos das aulas anteriores, o método set usa o this para diferenciar o atributo de classe do parâmetro que será passado. Já o método get usa o return, que serve justamente pararetornar o valor.
Podemos também observar que no método set foi usado o void, já que o método set não retornará nenhuma valor, apenas servirá para definir um. O método get no exemplo abaixo foi construido usando String, já que o atributo usado é uma String e, por isso, retornará String.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class Pessoa {
    private String nome;
    private String telefone;
    private String endereco;
 
    public void setNome(String nome) { this.nome = nome; }
    public String getNome() { return nome; }
 
    public void setTelefone(String telefone) { this.telefone = telefone; }
    public String getTelefone() { return telefone; }
 
    public void setEndereco(String endereco) { this.endereco = endereco; }
    public String getEndereco() { return endereco; }
}

Main.java

O código abaixo, é da classe principal, que será a primeira a ser executada. Como podemos perceber, ela é feita praticamente da mesma forma que as classes principais dos exemplos mostrados nas aulas anteriores. A diferença aqui é o uso dos métodos set e get para definirmos e lermos os valores.
Começamos dando o import necessário para usarmos o JOptionPane e depois declaramos e instanciamos o objeto da classe Pessoas para podermos usar seus métodos set e get.
Podemos ver que usamos o método set da seguinte forma:
objPessoa.setNome(JOptionPane.showInputDialog("Digite o nome"));
Isso fez com que aparecesse uma caixa de diálogo (JOptionPane.showInputDialog) pedindo para o usuário digitar um nome e depois esse nome foi passado pelo método set para o atributo nome da classe Pessoa. Ou seja, o valor dentro dos parentes do método set é o que foi definido. Uma forma de passar o valor direto no código, sem a interação do usuário, seria:
objPessoa.setNome("Luciscreidsmila Marilene da Silva");
Depois usamos o método get sem parâmetros adicionais para retornar o valor. OJOptionPane.showMessageDialog mostra uma caixa de diálogo com uma mensagem específica. No código ele foi colocado com os métodos get justamente para mostrar a caixa de mensagens com os valores digitados pelo usuário.
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import javax.swing.JOptionPane;
 
public class Main {
    public static void main(String[] args) {
        Pessoa objPessoa = new Pessoa(); //declaração e instanciação de objeto
 
        objPessoa.setNome(JOptionPane.showInputDialog("Digite o nome"));
        objPessoa.setTelefone(JOptionPane.showInputDialog("Digite o telefone"));
        objPessoa.setEndereco(JOptionPane.showInputDialog("Digite o endereço"));
 
        JOptionPane.showMessageDialog(null, "Nome: " + objPessoa.getNome() +
                "\nTelefone: " + objPessoa.getTelefone() +
                "\nEndereço: " + objPessoa.getEndereco());
    }
}

Nenhum comentário: