Dúvida com os métodos get() e set() [RESOLVIDO]  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
oddy.silva
JavaEvangelist
[Avatar]

Membro desde: 24/11/2008 11:42:10
Mensagens: 352
Localização: Itu
Offline

Pessoal, eu estava estudando encapsulamento no meu livro, o "Use a Cabeça! Java", quando cheguei até a parte que fala dos métodos get() e size(). Eu entendi que get() pega um argumento passado a ele e o método set configura esse falor. Seguindo nessa linha de raciocínio, o primeiro a funcionar é get(), para depois set() entrar. Porém, no exemplo do livro, eu tive a sensação de que está ao contrário. Parece que set() entra primeiro para depois get(). Eu vou colocar abaixo o código do livro e onde pintou a dúvida para vocês darem uma olhada:



A crica que ficou na minha cabeça é em relação a ordem em que cada método deve entrar. Se alguém puder explicar detalhadamente, passo-a-passo, como os métodos get() e set() acima estão se comportando, inclusive a ordem em que cada um entra em ação, eu agradeço. um abraço a todos.

This message was edited 1 time. Last update was at 07/01/2009 11:32:09


Odair
Gestão em T.I
FATEC - ITU
"Quem quer fazer alguma coisa, encontra um meio"

Quer ser um programador veloz? Então compre um par de tênis a jato.
[Email]
furacao123
GUJ Ranger
[Avatar]

Membro desde: 24/01/2008 22:05:47
Mensagens: 794
Offline



esta correto voce instanciou 2 objetos o one e o two da classe GoodDog

"setou" os valores para esses objetos e logo abaixo usando o get vc imprimiu

pq vc axa q deveria ser o contrario??

isso serve para encapsular sua aplicaçao tente fazer 2 classes separadas a GoodDog e outra GoodDogTesteDrive separadamente ae usando o get, set e pensando como se tivesse trabalhando com banco de dados, vc vai intender melhor pq do get e set.

This message was edited 1 time. Last update was at 07/01/2009 10:44:05


Q8200 | Intel DG35EC | 4GB Kingston 800 |HD Seagate 250 GB SATA | HD Seagate 160 GB SATA | Monitor LG 22'' | Fonte AKASA 350W | GeForce 9600 GT
[Email] [Yahoo!] [MSN]
abelgomes
Virtual Machine Man
[Avatar]

Membro desde: 12/06/2008 17:08:23
Mensagens: 706
Localização: Manaus-AM
Offline

nao importa a ordem....se no seu contrutor tiver inicializando o atributo sizer com 60 entao vc so precisa dar um get...ai vai de caso para caso....

entao não fica com esse grilo na cabeça nao e continua lendo o livro la na frente vc vai sacar isso....

por exemplo se vc desse getSize antes de dar um set ele ia dar nullpointerexception pq nao tinha na da lá

...the only easy day was yesterday...
[Email] [MSN]
Lucas Lacerda Gertel
JavaBaby
[Avatar]

Membro desde: 06/11/2007 10:11:42
Mensagens: 85
Localização: São Paulo
Offline

Então meu velho.
Na verdade não existe uma ordem obrigatória para chamada destes métodos.
O set() você define o valor do atributo e o get() você recupera.

No caso do teu objeto GoodDog, ele primeiro define o valor 70, pois se ele utilizasse o getSize ele viria como null pois não tem um valor definido na classe.
O get() recupera o valor do atributo e o set() define.

Imagine que você não sabe se já existe um valor definido e você precisa definir um caso não exista...
Ai você chamaria primeiro o get().


Acho que é isso!
Abraços,
[Email] [WWW] [MSN] [ICQ]
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

1º - Você cria um objeto do tipo GoodDog chamado 'one'. A JVM chama o construtor padrão, ou seja o valor de size é o padrão (zero).

2º - Você DEFINE o atributo 'size' de 'one' através do método 'setSize(int)'.

3º - Cria outro objeto do tipo GoodDog chamado 'two'.

4º - Altera seu tamanho para 8 através de setSize(int).

5º - Você RESGATA e imprime os valores em 'size' de ambos os objetos, através do método 'getSize()'.

6º - Manda ambos os cachorros latirem através do método 'bark()'. Esse método faz a verificação do tamanho do cão para definir o tipo de latido.


Entendeu agora?

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

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
[Email] [WWW] [MSN]
cris.t
JavaTeenager
[Avatar]

Membro desde: 14/07/2008 15:00:38
Mensagens: 169
Localização: Minas
Offline

O que acontece no seu exemplo é o seguinte:
De acordo com o tamanho do Cachorro "Good Dog" e vai latir de um jeito.
então no seu metodo main vc cria dois objetos GoodDog e atribui o tamanho "size" para o dogOne com o valor 70, usando o método setSize(int size), e para o dogTwo com o valor 8.

Depois vc imprime no console os tamanhos que vc atribui para cada um acima, então vc usa o metodo getSize().

Ou seja primeiro vc usou o set para atribui um valor para o objeto, tanto que nos metodos set vc precisa passar um valor.
E para "pegar" o valor que vc atribuiu vc vai usar o get.

This message was edited 1 time. Last update was at 07/01/2009 10:53:39

[WWW] [MSN]
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

Lucas Lacerda Gertel wrote:Então meu velho.
Na verdade não existe uma ordem obrigatória para chamada destes métodos.
O set() você define o valor do atributo e o get() você recupera.

No caso do teu objeto GoodDog, ele primeiro define o valor 70, pois se ele utilizasse o getSize ele viria como null pois não tem um valor definido na classe.
O get() recupera o valor do atributo e o set() define.

Imagine que você não sabe se já existe um valor definido e você precisa definir um caso não exista...
Ai você chamaria primeiro o get().


Acho que é isso!
Abraços,

É quase isso. A sua condição nunca vai ser verdadeira, pois 'size' é um 'int' e tipos primitivos nunca são null (null é apenas para referência para objetos). O correto seria:

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

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
[Email] [WWW] [MSN]
oddy.silva
JavaEvangelist
[Avatar]

Membro desde: 24/11/2008 11:42:10
Mensagens: 352
Localização: Itu
Offline

Como eu adoro o pessoal do GUJ!!!

Primeiramente, obrigado as pessoas que estão me ajudando até este momento.

Deixa eu ver se assimilei bastante coisa até agora.
No meu exemplo, set() entra primeiro porque a priori a minha variável size possui valor null. É isso? Depois é resgatado o valor com get(). Isso mesmo? Se eu estiver errado me corrijam.

Mas se eu tivesse declarado a minha variável size e já lhe atribuido um valor? Eu poderia então usar get() primeiro, passar os argumentos para set() e então mostrar um resultado num possível System.out.println?


Abraço!!! Grato!!!

Odair
Gestão em T.I
FATEC - ITU
"Quem quer fazer alguma coisa, encontra um meio"

Quer ser um programador veloz? Então compre um par de tênis a jato.
[Email]
Lucas Lacerda Gertel
JavaBaby
[Avatar]

Membro desde: 06/11/2007 10:11:42
Mensagens: 85
Localização: São Paulo
Offline

Opa, verdade...
Não é null não cara é 0.
null seria se sua variavel fosse declarada como Integer e não int.

Tipo primitivo sux..rs.

Abrax
[Email] [WWW] [MSN] [ICQ]
oddy.silva
JavaEvangelist
[Avatar]

Membro desde: 24/11/2008 11:42:10
Mensagens: 352
Localização: Itu
Offline

É, acabei de ver esse detalhe no livro tbm. Alguém viu a minha última pergunta?

Odair
Gestão em T.I
FATEC - ITU
"Quem quer fazer alguma coisa, encontra um meio"

Quer ser um programador veloz? Então compre um par de tênis a jato.
[Email]
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

oddy.silva wrote:Como eu adoro o pessoal do GUJ!!!

Primeiramente, obrigado as pessoas que estão me ajudando até este momento.

Deixa eu ver se assimilei bastante coisa até agora.
No meu exemplo, set() entra primeiro porque a priori a minha variável size possui valor null. É isso? Depois é resgatado o valor com get(). Isso mesmo? Se eu estiver errado me corrijam.

Mas se eu tivesse declarado a minha variável size e já lhe atribuido um valor? Eu poderia então usar get() primeiro, passar os argumentos para set() e então mostrar um resultado num possível System.out.println?


Abraço!!! Grato!!!


O valor inicial de size é 0 (zero) e não null. E quanto a segunda parte, é isso mesmo. Se no construtor da classe (você já aprendeu sobre construtores?) você definir um valor padrão, você pode acessá-lo antes mesmo de usar um set.

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

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
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team