| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2007 23:36:59
|
Link_pg
JavaEvangelist
![[Avatar]](/images/avatar/4cea2358d3cc5f8cd32397ca9bc51b94.jpg)
Membro desde: 28/04/2006 00:17:38
Mensagens: 413
Localização: Praia Grande / São Paulo - SP
Offline
|
Olá!
Gostaria de saber se é uma boa prática de programação criar uma interface que defina apenas constantes e fazer com que uma classe que precise compartilhar alguma constante simplesmente implemente a interface... Não lembro onde li que variáveis globais são práticas totalmente procedurais... Se são mesmo como posso compartilhar informações (constantes, no caso) que são comuns à muitas classes?
Abraços
|
Eduardo Felipe Vieira
Blog de Tecnologia!
Outro blog meu legal também mas não é de TI.
"Nós poderíamos ser muito melhores se não quiséssemos ser tão bons." |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/07/2007 23:50:34
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Acho que não é uma boa prática fazer isso.
Primeiro:se você fizer uma classe que só precise de um subconjunto das constantes definidas na interface, sua classe estaria recebendo mais constantes do que realmente precisa...
Segundo: visto que os atributos de interface já são public static final, você não precisaria de nada adicional para que as classes compartilhassem das constantes... você já poderia acessa-las diretamente através de NomeInterface.suaConstante.
Por final, acho que se vc quiser compartilhar constantes, vc pode criar uma classe abstrata que contenha todas as constantes que devem ser compartilhadas pelo sistema.
[]'s
|
- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 00:25:58
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
O que tem de errado com enums? Depois, pra que vc precisa de tantas constantes assim?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 00:35:50
|
Link_pg
JavaEvangelist
![[Avatar]](/images/avatar/4cea2358d3cc5f8cd32397ca9bc51b94.jpg)
Membro desde: 28/04/2006 00:17:38
Mensagens: 413
Localização: Praia Grande / São Paulo - SP
Offline
|
Olá!
Eu tô de férias e to fazendo um jogo de truco... quero fazer o mais OO possível, por isso essas duvídas... Quanto as constantes, eu queria definir algumas do tipo: String DELIMITADOR = " > ", int NUM_CARTAS_MAO = 3... algumas desse tipo pra não precisar ficar repetindo código e outras pra alguns switch (pra não precisar ficar escrevendo número usa a costante na hora de passar o argumento) dai pensei em centrar tudo numa interface... mas pelo que vi isso não é muito OO.
Abraços
|
Eduardo Felipe Vieira
Blog de Tecnologia!
Outro blog meu legal também mas não é de TI.
"Nós poderíamos ser muito melhores se não quiséssemos ser tão bons." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 01:23:48
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
ariáveis globais são ruins em qualquer paradigma. Não importa uma interface só apra ter constantes, use static imports ou simplesmente ConstantesParsing.DELIMITADOR mesmo.
Quantoa switches, se você quer algo OO comece esquecendo switches. Substitua-os (quase sempre) por polimorfismo.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 01:29:00
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Link_pg wrote:
Gostaria de saber se é uma boa prática de programação criar uma interface que defina apenas constantes e fazer com que uma classe que precise compartilhar alguma constante simplesmente implemente a interface...
Você acaba de descrever o "constant interface" anti-pattern.
Procure sobre esse tema no Google e você vai achar diversos sites, blogs e fóruns explicando o por que é tão ruim fazer isso.
|
@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) 05/07/2007 03:23:24
|
Link_pg
JavaEvangelist
![[Avatar]](/images/avatar/4cea2358d3cc5f8cd32397ca9bc51b94.jpg)
Membro desde: 28/04/2006 00:17:38
Mensagens: 413
Localização: Praia Grande / São Paulo - SP
Offline
|
Olá!
Bom pelo que vi não é uma boa prática mesmo...
Abraços
|
Eduardo Felipe Vieira
Blog de Tecnologia!
Outro blog meu legal também mas não é de TI.
"Nós poderíamos ser muito melhores se não quiséssemos ser tão bons." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 17:47:17
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
O "constant interface anti-pattern", que o VinyGodoi citou, diz que usar interfaces apenas para guardas constantes é ruim por que permite casos como esse:
Apesar de não ter nada de errado, fica bem estranho.
Tem vários motivos para não usar esse tipo de estratégia, como já citaram, mas se você vai mesmo usar, um jeito melhor é fazer:
Não tenho certeza, mas acho que isso é dica do livro Effective Java.
De qualquer modo, hoje em dia é melhor aprender e começar enums mesmo pra isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2007 19:15:24
|
Link_pg
JavaEvangelist
![[Avatar]](/images/avatar/4cea2358d3cc5f8cd32397ca9bc51b94.jpg)
Membro desde: 28/04/2006 00:17:38
Mensagens: 413
Localização: Praia Grande / São Paulo - SP
Offline
|
Olá!
É parece que com enums fica bem mais elegante... eu fiz aqui no meu projeto e resolveu sem problemas
Abraços
|
Eduardo Felipe Vieira
Blog de Tecnologia!
Outro blog meu legal também mas não é de TI.
"Nós poderíamos ser muito melhores se não quiséssemos ser tão bons." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2007 16:00:13
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
ZehOliveira wrote:
Não tenho certeza, mas acho que isso é dica do livro Effective Java.
E não é mesmo. A dica do Effective Java é usar enums. Lá foi descrito pela o typesafe enum pattern em java.
Quem quiser conferir, dá uma olhada no item 21:
http://developer.java.sun.com/developer/Books/effectivejava/Chapter5.pdf
|
@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) 06/07/2007 18:35:10
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
Agora eu fiquei com um nó na cabeça, sem lembrar qual a referência daquela dica.
|
|
|
 |
|
|