Boa prática de programação  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Link_pg
JavaEvangelist
[Avatar]

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

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%)
cv
Moderador
[Avatar]

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?
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Link_pg
JavaEvangelist
[Avatar]

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."
[Email] [WWW] [MSN]
pcalcado
Moderador
[Avatar]

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
[Email] [WWW] [Yahoo!] [MSN]
ViniGodoy
Moderador
[Avatar]

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
[WWW]
Link_pg
JavaEvangelist
[Avatar]

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

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."
[Email] [WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

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
[WWW]
ZehOliveira
GUJ Ranger

Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline

ViniGodoy wrote:
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

Agora eu fiquei com um nó na cabeça, sem lembrar qual a referência daquela dica.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team