28 de agosto de 2016

Encapsular é o ato de esconder detalhes da implementação, dados e estruturas internas de um objeto específico, dessa forma, é restringido o que um módulo tornará disponível aos seus clientes para tornar os módulos da aplicação o mais independentes possível. O simples ato de inserir itens dentro de uma classe é encapsular, mas, para tornar esse módulo mais independente e privilegiar o raciocínio modular, é necessário restringir o acesso aos seus dados. Restrição de acesso é o ato de utilizar modificadores de acesso nos atributos que concedam diferentes permissões sobre a forma como eles podem ser acessados com o intuito de abstrair os dados. Quando os atributos estão utilizando modificadores de acesso, o acesso a eles é restringido de diferentes formas. Se um atributo for private, o acesso a ele é feito somente pelos métodos da classe. Se ele for protected, seu acesso pode ser feito somente pelos componentes do pacote. É interessante ressaltar que o atributo private fornece a forma de encapsulação mais restrita. A encapsulação dos dados e a restrição do acesso a eles estão diretamente relacionados ao quesito de independência entre módulos. Essa prática também é chamada de abstração de dados. Com ela, é possível ter acesso aos métodos sem necessidade de conhecer como os mesmos foram implementados. Dessa forma podemos restringir o acesso aos dados, e privilegiar a modularidade.

Essa proteção é interessante, pois, caso o programador utilize um atributo público public string x, ele deixa livre o acesso e a modificação direta daquele atributo por outras classes. Essa prática dificulta o raciocínio modular à medida que fica difícil controlar em quais pontos do aplicativo aquele atributo pode ter sido acessado diretamente. É sempre importante deixar os atributos privados para que eles sejam acessados somente por meio dos métodos que foram criados para a sua manipulação.

Vamos imaginar uma classe Conta que pertence a um sistema bancário, conforme a representação da implementação a seguir. Caso o atributo saldo fosse public, ele poderia ser acessado por qualquer outra classe do sistema. Como em vez de um modificador public saldo ele possui o modificador private, ele só pode ser alterado pelos métodos sacar e depositar presentes na classe.

public class Conta {
   
    private String nome;
    private int conta;
    private double saldo;
   
    public Conta(String nome, int conta, double saldo){
       
        this.nome = nome;
        this.conta = conta;
        this.saldo = saldo;       
    }
   
    public void sacar(double valor){
       
        if(saldo >= valor){           
            saldo -= valor;
        }
        else{
            System.out.println("Saldo insuficiente.");
        }
    }
   
    public void depositar(double valor){
       
        saldo += valor;
        System.out.println("Depositado: " + valor);
        System.out.println("Novo saldo: " + saldo);
       
    }
   
    public void extrato(){
       
        System.out.println("EXTRATO:");
        System.out.println("Nome: " + nome);
        System.out.println("Conta: " + conta);
        System.out.println("Saldo: " + saldo);
    }
}

Restrição de acesso também pode ser imposta a métodos de um módulo. Da mesma forma que ocorre com as variáveis, funções private são acessadas somente dentro da classe a qual pertencem e funções protected podem ser acessadas de qualquer módulo do pacote e por métodos de subclasses.

Pretende-se obter com a encapsulação dos dados e a restrição ao acesso, módulos mais isolados, que ao serem modificados, não prejudiquem o funcionamento de outros módulos. Assim, quando um módulo necessitar de alteração, minimiza-se a necessidade de alterar outros.

0 comentários:

Postar um comentário

Comentários:

Perfil

Formada em Sistemas de Informação e pós-graduada em Engenharia de Software.

Facebook

Views