| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:01:20
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:07:17
|
alanbrasil1984
JavaEvangelist
![[Avatar]](/images/avatar/81836b7cd16991abb7febfd7832927fd.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:11:45
|
AlanLojudice
JavaChild
![[Avatar]](/images/avatar/1344a3156923aad025c100d7f845865e.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:14:04
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:30:47
|
Javabuntu
GUJ Master
![[Avatar]](/images/avatar/00053f5e11d1fe4e49a221165b39abc9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:34:02
|
Javabuntu
GUJ Master
![[Avatar]](/images/avatar/00053f5e11d1fe4e49a221165b39abc9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:34:21
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:44:19
|
Javabuntu
GUJ Master
![[Avatar]](/images/avatar/00053f5e11d1fe4e49a221165b39abc9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 13:54:16
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 15:09:21
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 15:23:15
|
Laércio Queiroz
Thread.start()
![[Avatar]](/images/avatar/842ef8f949db333c767fe209f9277459.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 15:38:38
|
rfgallon
JavaChild
![[Avatar]](/images/avatar/cc2b1ba0368ccd98d5bed7e2e97b4bb0.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/03/2008 15:43:44
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
|
|