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?
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
cv1
O que tem de errado com enums? Depois, pra que vc precisa de tantas constantes assim?
Link_pg
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
pcalcado
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.
ViniGodoy
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.
Link_pg
Olá!
Bom pelo que vi não é uma boa prática mesmo…
Abraços
Z
ZehOliveira
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:
public final class Constantes {
public static final int MINHA_CONSTANTE = 1;
private Constantes() { }
}
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. :P
Link_pg
Olá!
É parece que com enums fica bem mais elegante… eu fiz aqui no meu projeto e resolveu sem problemas
Abraços
ViniGodoy
ZehOliveira:
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.