[DÚVIDA]Métodos estáticos

6 respostas
M

Olá a todos.

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?

Obrigado pela atenção.

6 Respostas

TerraSkilll

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. :grin:

Abraço.

M

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. :confused:

Lucas_Camara

Se não for um problema ter apenas um estoque na aplicação, penso que não seja um problema.

rmendes08

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

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 :slight_smile:

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:

<em>public static Boolean valueOf(boolean b) {</em>

<em>return b ? Boolean.TRUE : Boolean.FALSE;</em>

<em>}</em>
M

Creio que nesse caso vou seguir a dica do rmendes08 e tratarei como uma dependência.

Acho que se eu deixar a classe Estoque como estática o professor vai reclamar :sweat_smile:

Darei uma lida a respeito de static factory, como foi citado pelo misterize, pois parece ser uma boa solução também, porém estou meio sem tempo.

Muito obrigado a todos.

Criado 8 de julho de 2016
Ultima resposta 8 de jul. de 2016
Respostas 6
Participantes 5