Estou implementando um sistema basicão de supermercado (bem básico mesmo, só pra ter noção de interação entre classes) e nesse sistema eu tenho uma classe LeitorDeProdutos que exibe o nome e preço através de uma função void exibeInfo(int codigoDoProduto). Porém, essa função precisa acessar o a classe estoque do supermercado para que faça a busca do produto através do código dele.
Surge a dúvida: É válido a criação de um método estático, que retorne um produto, na minha classe Estoque para que eu não tenha que instanciar um objeto da classe Estoque dentro da classe LeitorDeProdutos? Isso seria uma má prática?
Tudo isso só pra não precisar instanciar um objeto Estoque? É só pela comodidade ou o objeto estoque tem um custo alto para ser instanciado?
Se é só pela comodidade, por que não tornar todos os métodos estáticos em todas as classes. Asim você não precisa instanciar nada.
Abraço.
M
M.Ciro
Olá TerraSkilll!
A questão não é nem a comodidade. O problema mesmo é ter uma instância de Estoque na minha classe LeitorDeProdutos, pois eu não estou conseguindo ver isso com bons olhos (pra mim não faz muito sentido).
O Estoque já vai estar instanciado no Sistema. Eu só gostaria de conseguir buscar por um produto no Estoque sem ter que instancia-lo ou passa-lo como argumento.
Lucas_Camara1 like
Se não for um problema ter apenas um estoque na aplicação, penso que não seja um problema.
rmendes083 likes
Jovem, isso é justamente o que chamamos de dependência. Ou seja, o seu LeitorDeProdutos precisa de um objeto Estoque para funcionar, portanto o mais correto é que este LeitorDeProdutos receba um objeto do tipo Estoque em seu construtor.
M
misterzire1 like
No livro Effective Java citado abaixo , o primeiro item é sobre considerar static factory em vez de construtores .
Talvez possa ser uma solução a sua dúvida , execute uma leitura sobre o assunto
Item 1: Consider static factory methods instead of constructors The normal way for a class to allow a client to obtain an instance of itself is to provide a public constructor. There is another technique that should be a part of every programmer’s toolkit. A class can provide a public static factory method, which is simply a static method that returns an instance of the class. Here’s a simple example from Boolean (the boxed primitive class for the primitive type boolean). This method translates a boolean primitive value into a Boolean object reference: