Encapsulamento

Olá pessoal estou estudando sobre o encapsulamento…
Mas nao consegui pegar a logica do negocio ainda… :oops:

Gostaria de uma ajuda ou um tutorial bem didatico para compreender…
Alguem saberia?

Obrigado galera!

Já viu essa?
http://www.caelum.com.br/caelum/curso-11.jsp

Não sei se ela explica com clareza esse assunto :roll:

Vou tentar explicar, lá vai.
Encapsular seria a maneira de programar visando o futuro, ou seja, produzir códigos que sejam fáceis de modificar e de dar manutenções. Torna seu código flexível e com alta legibilidade. Em resumo é colocar a coisa certa no lugar certo e acrescentar níveis de acesso para que ninguém mexa onde não deve. Diminuindo portanto, o acoplamento de um código pois garante que o mesmo não tenha códigos soltos e repetidos por toda a aplicação. Bom, penso ser isso :oops:

ex sem encapsulamento.:

// class Conta nua como veio ao mundo
class Conta {

  double valor 0.00; 
  String numeroConta "";

}

class Banco {

  Conta minhaConta = new Conta();

  minhaConta.valor = 1000.00; //adiciona valor diretamente no atributo do objeto
  minhaConta.numeroConta =  "1112";

}
//classe sem escrupulos de um hacker nub..rs
class ClasseDoMal {

  Banco meuBanco = new Banco();
  Conta contaFantasma = new Conta();
  contaFantasma.valor = meuBanco.minhaConta.valor; //passa todo o valor da conta sem pedir autorização
  meuBanco.minhaConta.valor  = -2000 //e poe um debito de2000 para o dono da conta 1112

}
/**
* Isso é só um exemplo
*/

O que acontece ninguem garante que a conta ira ser acessada da forma certa pois os atributos estão abertos para acesso.
se a class Conta estivesse encapsulada não teria como outras classes acessarem os atributos de forma maldosa ou sem restrição. no nosso exemplo uma 3ºclasse acessa conta e copia o valor da conta e põe um um valor negativo da conta. Será que era pra fazer isso?

ex com encapsulamento:

[code]class Conta {

private double valor 0.00;
private String numeroConta “”;

public String saldo(){
sysout("conta : " +numeroConta + " Saldo : "+ valor );
}
public double retiraValor(double retira){
if(retira > valor) {
sysout(“Valor maior que o disponível”);
return 0;
} else {
sysout("Valor valor retirado: " + retira);
valor = valor-retira;
sysout("Novo Saldo: " + valor);
return retirado;
}
}
public void depositaValor(double deposito){
valor = valor+deposito;
}
}[/code]

com isso vc encapsulou os atributos da conta e para acessas o valor todo mundo terá que acessar o métodos saldo/retiraValor/depositaValor para manipular a conta e como o sene falou “…Em resumo é colocar a coisa certa no lugar certo e acrescentar níveis de acesso para que ninguém mexa onde não deve. …”

Até

eu escrevi um artigo sobre orientação a objetos, e tentei ser o mais claro possível.
tem um tópico falando sobre encapsulamento, e até agora, segundo algumas pessoas que afirmaram ter lido, está fácil de entender.

acesse


ah, por favor, deixe um comentário dizendo o que achou.

abraços