| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 09:45:12
|
Menkauren
Entusiasta Java
Membro desde: 30/10/2010 18:09:58
Mensagens: 24
Offline
|
Eu acho que a pergunta é até meio descabida, mas eu não estou conseguindo entender a lógica disso; seguinte:
Eu tenho uma classe escola que tem uma list contendo objetos. Eu usarei essa list em varios lugares do meu código, em outras classes, mais especificadamente em varias telas swing, aonde eu devo instanciar o objeto do tipo escola contendo a minha list para que eu possa usar nas diversas telas?
Pela lógica eu penso que não posso instanciar em cada tela um novo objeto escola, porque seria uma nova list, e não teria os mesmos objetos. Outra coisa não há herança entre minhas telas, por isso eu não herdo a list. Ou seja eu preciso criar um unico objeto do tipo escola e usa-lo por todo o meu código.
Valeu pessoal.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 10:04:33
|
renatosm
What is classpath?
![[Avatar]](/images/avatar/9494ea64a0f8b454d2a27ef115d4e01d.jpg)
Membro desde: 07/07/2010 15:33:36
Mensagens: 8
Localização: Curitiba-PR
Offline
|
Olá Menkauren,
Para acessar uma instância de uma classe de vários outras classes, é mais simples você utilizar um padrão de projeto chamado Singleton.
http://wmagician.wordpress.com/2008/01/02/padrao-singleton-em-java/
http://javafree.uol.com.br/topic-852515-Implementando-o-singleton.html
[]s
Renato
|
rsm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 13:34:40
|
Menkauren
Entusiasta Java
Membro desde: 30/10/2010 18:09:58
Mensagens: 24
Offline
|
Cara, valeu sua dica foi boa demais!!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 16:10:44
|
leonardofl
Thread.start()
![[Avatar]](/images/avatar/d0423af2f5450683bd3c62d0adc6c3c2.jpg)
Membro desde: 28/11/2009 00:46:40
Mensagens: 41
Offline
|
Pela lógica eu penso que não posso instanciar em cada tela um novo objeto escola, porque seria uma nova list, e não teria os mesmos objetos.
Errado...
Temos duas listas, objetos diferentes, que contêm o mesmo objeto (dog)
No seu caso, acho q vc vai usar isso só pra mostrar o dog na tela... então não há nem a necessidade de serem os mesmos objetos, basta que sejam "iguais" (possuem os mesmos valores em seus atributos, definido pelo método equals)
Bom, no último parágrafo fiz algumas suposições sobre seu problema, q podem estar erradas, mas talvez vc não precise compartilhar os mesmos objetos pelas telas, a menos q não possa recuperar novamente a fonte de dados q formou os objetos ou q o processamento para gerar esses objetos seja mt custoso.
|
Leonardo Leite
engenheiro de computação |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 17:15:13
|
Menkauren
Entusiasta Java
Membro desde: 30/10/2010 18:09:58
Mensagens: 24
Offline
|
Talvez mereça uma esplicação melhor:
Eu tenho uma classe Escola, essa classe tem uma lista de cursos, que é outra classe minha. Então eu imagino que tenha que criar uma instancia de escola para usar no meu cadastro de cursos, onde eu crio o curso e adiciono na lista que esta no meu objeo escola. Mas eu também tenho um cadastro de aluno onde tem uma combobox com os cursos que eu cadastrei lá no meu cadastro de curso, pelo que eu imagino para que eu possa recuperar os meus cursos cadastrados e jogar na combobox eu tenha de usar o mesmo objeto escola, por que se eu criar uma nova instancia de escola a lista vira vazia. A minha pergunta é onde criar a instancia de escola, já que nenhuma tela minha estende outra e eu preciso compartilhar a mesma lista entre elas.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 17:38:25
|
leonardofl
Thread.start()
![[Avatar]](/images/avatar/d0423af2f5450683bd3c62d0adc6c3c2.jpg)
Membro desde: 28/11/2009 00:46:40
Mensagens: 41
Offline
|
Vc não tá usando um banco de dados pra salvar tudo oq vc cadastra?
Ou se vc fecha o programa perde tudo?
Se vc salvar tudo no banco... vc recuperar tudo oq precisar a partir fo banco em casa tela
|
Leonardo Leite
engenheiro de computação |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 17:45:03
|
Menkauren
Entusiasta Java
Membro desde: 30/10/2010 18:09:58
Mensagens: 24
Offline
|
Não. É trabalho da faculdade, não pode usar banco. É uma aplicação simples, quando fecha perde tudo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 18:31:06
|
leonardofl
Thread.start()
![[Avatar]](/images/avatar/d0423af2f5450683bd3c62d0adc6c3c2.jpg)
Membro desde: 28/11/2009 00:46:40
Mensagens: 41
Offline
|
Já q é pra fazer bem simplizinho, vc pode fazer sua lista como um atributo estático de alguma classe, aí todo mundo acessa essa lista de forma estática...
|
Leonardo Leite
engenheiro de computação |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/11/2010 19:35:07
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Você pode usar o (argh) padrão Singleton. Ou pode passar sua lista por parâmetro para as várias classes que a utilizam.
A segunda opção é mais trabalhosa, mas gera menos bugs (embora numa aplicação simples dessa, dificilmente você terá problemas com o Singleton, só é bom já pegar o hábito de não usa-lo).
|
@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) 03/11/2010 08:20:28
|
Menkauren
Entusiasta Java
Membro desde: 30/10/2010 18:09:58
Mensagens: 24
Offline
|
Por exemplo:
Eu tenho minha tela principal, eu posso instanciar o objeto escola na tela principal e depois passar para as outras telas que são JInternalFrame, mas as modificações que eu fizer nesse objeto dentro das outras classes irão modificar o meu objeto criado lá na minha tela principal. Como se fosse um parametro passado por referencia.
Aqui tenho a classe aluno que foi chamada conforme o codigo acima:
A questao é:
As modificações que eu fizer dentro da minha classe Alunos não ira surtir efeito no objeto escola que foi criado lá na minha classe Principal, correto??
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2010 19:47:14
|
beowulf
Debugger
![[Avatar]](/images/avatar/d6df8e50c3cc76ab487e51448cc1c57f.jpg)
Membro desde: 31/08/2007 08:05:47
Mensagens: 73
Offline
|
ViniGodoy wrote:Você pode usar o (argh) padrão Singleton. Ou pode passar sua lista por parâmetro para as várias classes que a utilizam.
A segunda opção é mais trabalhosa, mas gera menos bugs (embora numa aplicação simples dessa, dificilmente você terá problemas com o Singleton, só é bom já pegar o hábito de não usa-lo).
Ola ViniGodoy, desculpa a pergunta, mais pq vc nao gosta do padrao Singleton?
E so uma pergunta, eu fiquei curioso.
At
|
"Qualquer um ficaria triste, desanimado ou até mesmo desmotivado! Mas por Deus este é Joseph Climber, um exemplo de que não devemos desistir tão facil" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2010 22:09:53
|
renzonuccitelli
GUJ Master
Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline
|
beowulf wrote:
ViniGodoy wrote:Você pode usar o (argh) padrão Singleton. Ou pode passar sua lista por parâmetro para as várias classes que a utilizam.
A segunda opção é mais trabalhosa, mas gera menos bugs (embora numa aplicação simples dessa, dificilmente você terá problemas com o Singleton, só é bom já pegar o hábito de não usa-lo).
Ola ViniGodoy, desculpa a pergunta, mais pq vc nao gosta do padrao Singleton?
E so uma pergunta, eu fiquei curioso.
At
A pergunta foi pra o ViniGodoy e tenho certeza que ele escreverá uma resposta bem melhor que a minha. Mas acho que ele quis passar o conceito de injeção de dependências. Esse conceito é interessante para vc fazer um código mais testável. Usar um Singleton pode tornar sua classe intestável.
Ex clássico: suponhamos que vc cria uma infra para mandar mails. Então vc cria uma interface que represente e envie mails:
Aí então vc implementa um mail real, como Singleton, que envia para um monte de pessoas:
Aí então vc cria um gestor de mail:
Legal, tudo funcionando e vc não cria vários mails reais apenas um. Mas e se vc kiser testar esse código aí? Vai enviar email pra uma porrada de gente em cada teste? e se para enviar pra tanta gente demorar uns 40 minutos? Vc vai esperar todo esse tempo só pra testar? Então o uso do Singleton de dentro da classe GestorDeMail, vc inviabilzou a realização de testes.
Aí entra a injeção de dependencias. Em vez do Gestor instaciar as classes que precisa, elas são injetadas nele. vamos refatorar. Vamos fazer com que a interface seja injetada através de um método set. Aí a gente precisa injetar a instancia da interface antes de executar. Perceba que estou utilizando a verdadeira refatoração, isto é, alterando o código de forma que ele continue fazendo a mesma coisa, e só a mesma coisa:
Agora a instancia é fornecida de fora da classe. Eu até continua injetando a dependecia através de um Singleton, mas minha classe GestorDeMail agora é testável. Isso eu considero um bom uso de Singleton, só que o pessoal não costuma ver muito isso pois em geral é usado um Conteiner para injetar dependêcias, como o Spring.
Mas cade o caso do teste que estou falando? Vamos a ele. Primeiro eu crio uma interface só para testar, que em geral é chamada de Stub, quando não executa nenhuma lógica, e Mock quando executa alguma lógica. Vou usar um Stub:
Aí então agora eu posso criar uma classe para testar o Gestor:
Perceba que agora eu consigo testar a classe, coisa que não seria possível com a primeira versão do GestorDeMail. Em geral o pessoal usa frameworks para testes e para produzir os mocks. Mas o importante é o conceito, não as ferramentas.
Espero que o exemplo clarifique as coisas.
[]s
|
Renzo Nuccitelli
Engenheiro de Computação - ITA
http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/11/2010 09:35:14
|
beowulf
Debugger
![[Avatar]](/images/avatar/d6df8e50c3cc76ab487e51448cc1c57f.jpg)
Membro desde: 31/08/2007 08:05:47
Mensagens: 73
Offline
|
renzonuccitelli wrote:
beowulf wrote:
ViniGodoy wrote:Você pode usar o (argh) padrão Singleton. Ou pode passar sua lista por parâmetro para as várias classes que a utilizam.
A segunda opção é mais trabalhosa, mas gera menos bugs (embora numa aplicação simples dessa, dificilmente você terá problemas com o Singleton, só é bom já pegar o hábito de não usa-lo).
Ola ViniGodoy, desculpa a pergunta, mais pq vc nao gosta do padrao Singleton?
E so uma pergunta, eu fiquei curioso.
At
A pergunta foi pra o ViniGodoy e tenho certeza que ele escreverá uma resposta bem melhor que a minha. Mas acho que ele quis passar o conceito de injeção de dependências. Esse conceito é interessante para vc fazer um código mais testável. Usar um Singleton pode tornar sua classe intestável.
Muito obrigado pela explicacao.
|
"Qualquer um ficaria triste, desanimado ou até mesmo desmotivado! Mas por Deus este é Joseph Climber, um exemplo de que não devemos desistir tão facil" |
|
|
 |
|
|