encapsulamento  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
heliob
Thread.start()

Membro desde: 01/04/2006 13:45:33
Mensagens: 46
Offline

Olá, sou aprendiz de java.

Em relação a encapsulamento, pq privar os atributos? Estou lendo que se trata-se de segurança.

Digamos que eu tenha um objeto conta com atributo saldo.

Quem além do programador iria conseguir alterar o saldo??

Atenciosamente,
Hélio
[WWW] [MSN] [ICQ]
alanbrasil1984
JavaEvangelist
[Avatar]

Membro desde: 23/07/2006 00:27:57
Mensagens: 359
Localização: Rio de janeiro
Offline

Leia mais sobre isso cara ele não é totalmente privado e sim tem uma forma mais segura de ser acessa-lo.

leia um pouco mais sobre get and set.

att,

Alan Rodrigo.



Alan Rodrigo de Oliveira Souza
Fattoria Web
Em busca da SCJP.

[WWW] [MSN] [ICQ]
AlanLojudice
JavaChild
[Avatar]

Membro desde: 05/09/2007 15:46:13
Mensagens: 102
Offline

Bom Helio,

Eu acho que se usa separar variaveis para uma manutenção mais facil do software, sem que outros objetos sejam alterados.

Encapsular atributos também auxilia a garantir que o estado e o comportamento de um objeto se mantenha coeso.

Bom acho que seria mais ou menos isso...Alguem com mais experiencia pode responder melhor...estou comecando tbm.. rs

[]´s


Alan Lojudice
[Email]
heliob
Thread.start()

Membro desde: 01/04/2006 13:45:33
Mensagens: 46
Offline

Sim... eu li sobre get e set, mas não entendi o pq do trabalho de cria-los.

Minha duvida é pq definir como private, sendo quem vai usar o objeto é o proprio programador...
Pq se dar ao trabalho de criar gets e sets para alterar um valor de um atributo ao qual só o programador vai mexer...

Abraços,
Hélio
[WWW] [MSN] [ICQ]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

ao criar get e set vc garante a maneira de se setar um atributo por exemplo, para setar um int por exemplo vc passar objeto.setAtributo( 8 ).... e se o atributo fosse publico vc poderia atribuir um valor -10 por exemplo...

imagine a altura da pessoa sendo setado com -1,70....

This message was edited 1 time. Last update was at 24/03/2008 13:34:56


SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

heliob wrote:Sim... eu li sobre get e set, mas não entendi o pq do trabalho de cria-los.

Minha duvida é pq definir como private, sendo quem vai usar o objeto é o proprio programador...
Pq se dar ao trabalho de criar gets e sets para alterar um valor de um atributo ao qual só o programador vai mexer...

Abraços,
Hélio


imagine uma equipe de 5 programadores.... e eles dependem do seu código....

um outro programador pode fazer uma merda na funcionalidade porque vc simplesmente deixou ele fazer tudo e deixou tudo público.....

a culpa é tanto sua quanto dele, ele porque não sabe programador e tá fazendo gambiarra...e sua culpa porque não encapsulou e deixou público (gambiarra do mesmo jeito)... vc confiou nos outros programadores....


SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
heliob
Thread.start()

Membro desde: 01/04/2006 13:45:33
Mensagens: 46
Offline

ué, mas não se trata um valor antes de setar ele a algum atributo do objeto??

Abraços,
Hélio
[WWW] [MSN] [ICQ]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

heliob wrote:ué, mas não se trata um valor antes de setar ele a algum atributo do objeto??

Abraços,
Hélio


e se o outro programador que citei não tratar esse valor

ou se ele não previu, que isso poderia acontecer

vc vai confiar nele desse tanto

a culpa é sua e dele...entende....esse ponto que vc tem q entender.....num projeto trabalham diversas pessoas.... então vc tem tomar certas garantias...

além do que isso é padrão.... tem muitas coisas que aumentam o trabalho pra deixar dentro do padrão e ser algo proveitoso no futuro, por exemplo, comentários de código, é algo simples de fazer, tem um padrão definido pela Sun, e se futuramente seu código não tiver sido comentado, alguém for dar manutenção, sem comentário fica um cáos total...

comece a ver as coisas por esse lado... tanto de funcionalidade no momento quanto futura....

This message was edited 1 time. Last update was at 24/03/2008 13:45:07


SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
heliob
Thread.start()

Membro desde: 01/04/2006 13:45:33
Mensagens: 46
Offline

Certo, entendi... mas mais uma dúvida:
Se um terceiro instanciar um objeto de uma classe que vc criou e tentar setar algum valor através um método feito nos "padrões do encapsulamento" com um valor não condizente ao valor válido aquele atributo, não vai ocorrer a excessão de qualquer maneira??

Desculpa por eu ser chato, mas OO é punk de entender...

Vejo coisas, que a principio, são desnecessárias.

Mas tenho ciência que se existem é pq já foram testados, re-testados e hoje em dia é usado assim, baseado na premissa que foram caras super phodas que criaram esse conceito, e não a toa...

Abraços,
Hélio

Abraços,
Hélio
[WWW] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Vai ocorrer uma exceção, que vai documentar o problema.

Pior é se seu atributo aceitar silenciosamente o valor inválido e o seu sistema começar a se comportar de maneira cada vez mais estranha.

Além disso, seu método não precisa necessariamente deixar o usuário escolher o valor do atributo. Por exemplo, no caso da classe Semaforo, você pode ter o método trocaCor(), que automaticamente define a próxima cor, tornando impossível a colocação de uma cor inválida, e o método getCor().

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Laércio Queiroz
Thread.start()
[Avatar]

Membro desde: 31/07/2007 16:49:08
Mensagens: 32
Localização: Salvador - BA
Offline

Olá,

Sobre encapsulamento - na verdade information hiding - leia: http://en.wikipedia.org/wiki/Information_hiding

Sobre contratos entre os objetos e seus clientes, uma leitura sobre Design By Contract vai te esclarecer algumas dúvidas: http://en.wikipedia.org/wiki/Design_By_Contract

E uma artigo onde o Phillip Calçado fala sobre Contatos Nulos: http://www.fragmental.com.br/wiki/index.php/Contratos_Nulos


[]s

Laércio Queiroz
http://laercioqueiroz.wordpress.com
[Email] [WWW] [MSN]
rfgallon
JavaChild
[Avatar]

Membro desde: 05/06/2006 23:52:12
Mensagens: 105
Offline

Primeiro gets e sets é uma convenção chamada (JavaBeans). Dá uma olhada nisso http://java.sun.com/docs/codeconv/

Outra questão é o que já foi citado aqui, você pode ter uma equipe trabalhando no projeto ou essas tuas classes podem virar um pacote ser distribuido, ou você pode a qualquer momento fazer uma caquinha e dai já viu né, vai perder tem localizando problema, se fizer de acordo com o padrão basta fazer um debug no lugar correto que poderá identificar o mesmo.
[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

rfgallon wrote:Primeiro gets e sets é uma convenção chamada (JavaBeans). Dá uma olhada nisso http://java.sun.com/docs/codeconv/


Acho que não... os javabeans realmente convencionaram os gets e sets, mas a especificação vai muito além disso.

Agora, encapsular dados de dentro do objeto através de propriedades é um conceito antigo, já existente no Delphi, por exemplo, que fazia através de uma palavra reservada (Property). No C++, esse idioma também já foi usado também e através de métodos, tal como no Java. Embora por lá não haja uma padronização de nomes.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team