Boa prática de programação

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

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

O que tem de errado com enums? Depois, pra que vc precisa de tantas constantes assim?

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

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.

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.

Olá!

Bom pelo que vi não é uma boa prática mesmo…

Abraços

O “constant interface anti-pattern”, que o VinyGodoi citou, diz que usar interfaces apenas para guardas constantes é ruim por que permite casos como esse:

[code]public interface Constantes {
public static final int MINHA_CONSTANTE = 1;
}

public class MinhaClasseQualquer implements Constantes {
…??
}[/code]
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:

[code]public final class Constantes {
public static final int MINHA_CONSTANTE = 1;

 private Constantes() { }

}
[/code]
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. :stuck_out_tongue:

Olá!

É parece que com enums fica bem mais elegante… eu fiz aqui no meu projeto e resolveu sem problemas :smiley:

Abraços

[quote=ZehOliveira]
Não tenho certeza, mas acho que isso é dica do livro Effective Java.[/quote]

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

[quote=ViniGodoy]
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[/quote]
Agora eu fiquei com um nó na cabeça, sem lembrar qual a referência daquela dica. :?