Getters e Setters[RESOLVIDO]

Para que eu preciso de encapsulamento?

Se isso serve só para acessar atributos privados, não seria mais fácil eu criar esses dados com uma única senha de administrador de dados?

Se eu posso resolver a privacidade com senha de acesso o que eu vou querer com get e set?

Programadores manifestem-se perante este leigo aqui…

obrigado!

Você tem um problema conceitual…
Encapsulamento (esconder implementação) é uma coisa, autenticação é outra.

Com o encapsulamento você esconde dos usuários da classe (outras classes que a usam) como as coisas funcionam por dentro. Você só deixa disponível uma interface pública para os usuários. Por exemplo, um setDataNascimento pode verificar se o valor passado por parâmetro é uma data válida e caso não seja, disparar uma exceção ou colocar o objeto em um estado válido (uma data padrão). Um método getIdade pode usar a data de nascimento para calcular a idade em anos, não existindo necessariamente um atributo idade na classe. Você pode ter diversos métodos privados dentro da classe que são usados internamente em outros métodos. Esses métodos estão encapsulados também, pois não podem ser vistos pelo usuário, sendo que o uso dos mesmos é implícito (por exemplo, dentro de um método público).

Autenticação é permitir que um usuário (do sistema) tenha acesso à funcionalidades com base nos privilégios de acesso que o mesmo tem e nada tem a ver com encapsulamento.

[]'s

Certo, quer dizer que o usuário vai ter acesso a informação que está disponivel, como no caso de “dataDeNascimento”
Já sem o get e o set, o usuário tem a acesso direto na classe, a data de nacsimento, cpf, sexo, nome…

???

Exemplo:

Eu tenho um supermercado, e quero saber a quantidade, preço, fornecedor e balanço do produto.
Este programa não precisa de get e set, pq ele vai me retornar tudo.

Exemplo com get e set:

Eu tenho um supermercado e preciso saber a quantidade do produto que está esgotando, então como terei acesso as outras informações se estão privadas?
Se eu digitar a minha senha de administrador aparece todas as informações que quero, então pra que get e set?

Tentei saber o pq de get e set, mas acho que não é convincente.

Faz sentido alguma coisa?

O ViniGodoy escreveu um post bem legal sobre encapsulamento. Eu sempre recomendo pra quem tem essa dúvida.

Dê uma lida.

[quote=adriano_seven_byte]Certo, quer dizer que o usuário vai ter acesso a informação que está disponivel, como no caso de “dataDeNascimento”
Já sem o get e o set, o usuário tem a acesso direto na classe, a data de nacsimento, cpf, sexo, nome…

???

Exemplo:

Eu tenho um supermercado, e quero saber a quantidade, preço, fornecedor e balanço do produto.
Este programa não precisa de get e set, pq ele vai me retornar tudo.

Exemplo com get e set:

Eu tenho um supermercado e preciso saber a quantidade do produto que está esgotando, então como terei acesso as outras informações se estão privadas?
Se eu digitar a minha senha de administrador aparece todas as informações que quero, então pra que get e set?

Tentei saber o pq de get e set, mas acho que não é convincente.

Faz sentido alguma coisa?[/quote]

Os seus conceitos estão muito misturados. O usuário não vê objetos.
O controle de acesso de segurança do usuário não em nada que ver com os modificadores de acesso da classe (private, public, protected). Não misture as duas coisas.

O seu problema não é com get/set é com o conceito do que realmente acontece dentro do programa e como ele é estruturado.
O get/set não é obrigatorio em java. Vc pode não usar se não quiser. Acontece apenas que se não o fizer terá muito mais trabalho usando frameworks de mercado e mantendo seu código.
Mas vc ainda está longe desta fase e precisa estuar mais. Realmente não sei lhe explicar porque a senha do administrador não tem nada que ver com get e set, mas de fato não tem.
Espero que alguém consiga iluminá-lo.

uma forma que me fez realmente entender o conceito… foi pensar da seguinte forma:

se você criar uma classe com atributos, métodos sem get set, quando outro programador, ou até mesmo você for utilizar essa classe, você terá acesso a atributos que não deveriam e não precisam ser populados ou retornados.

por exemplo: você cria uma classe de controle de voo…uma classe complexa com 30 atributos privados e muitos métodos e 5 gets/sets o restante dos atributos sem get/set…

ai você transforma essa classe em um Jar… quando outro programador for usar, ele só vai conseguir trabalhar com os métodos públicos, e não vai precisar saber como a classe funciona, ele sabe que a classe pode enviar um sinal para o avião, mas não precisa saber como ela faz isso, ou quais atributos estão envolvidos (Encapsulamento)

get/set acabou virando moda por causa dos frameworks que o tornam obrigatório, mas a idéia principal é Esconder a Complexidade Desnecessária e Manter a Padronização das classes.

Obrigado amigos Nerd’S.

Esta dúvida foi [RESOLVIDA]