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…
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… :?:
[quote=heliob]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[/quote]
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…
[quote=heliob]ué, mas não se trata um valor antes de setar ele a algum atributo do objeto??
Abraços,
Hélio[/quote]
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…
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…
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().
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.
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.