Abaixo tenho meu outro pacote service, e dentro do mesmo uma classe e um método
esse método eu passo como parâmetro o quantidade de produtos a serem vendidos,
porém preciso "dizer" a este método que aquele int estoque da classe Produto vai ser igual a ele menos a quantidade que passei como parâmetro.
Sem que o ProdutoService conheça o objeto produto em questão, não é possível.
Pense no seguinte, como um banco sabe que o João da Silva sacou R$ 200 de sua conta? Como o banco não se confunde, afinal, são muitos que se chamam João da Silva…
jkrfabio
Não sei.
Imaginava que era só importar a classe e estava tudo ok.
Poderia ser mais claro?
drsmachado
Você precisa passar o Produto que deseja vender ou uma forma de identificação, para que a classe ProdutoService tenha ação.
Seguindo com o exemplo do João da Silva e do banco. O banco sabe qual foi o João da Silva não pelo nome, mas pelos dados da conta, agência e demais detalhes, como os contidos no cartão de débito.
Neste caso, é a mesma coisa. Sem saber qual o produto (ou seja, sem ter a instância do objeto produto), você nunca vai conseguir alterar o atributo estoque.
fabiozanardi
packageservice;importmodel.Produto;publicclassProdutoService{Produtoproduto=newProduto();// instanciar um produto novo aquipublicvoidvenderProduto(intquantidade){}publicvoidvenderProduto(intquantidade){inttotal=Produto.getEstoque()-quantidade;// subtraia da quantidade em estoqueProduto.setEstoque(total);}}
drsmachado
fabiozanardi:
packageservice;importmodel.Produto;publicclassProdutoService{Produtoproduto=newProduto();// instanciar um produto novo aquipublicvoidvenderProduto(intquantidade){}publicvoidvenderProduto(intquantidade){inttotal=Produto.getEstoque()-quantidade;// subtraia da quantidade em estoqueProduto.setEstoque(total);}}
Isto não funcionaria.
Vamos supor que ele possua 2 produtos cadastrados no estoque, "a" e "b", com 3 e 10 unidades respectivamente.
De qual dos dois ele estaria fazendo a subtração, segundo o que você postou?
Ou você passa qual é o produto ou mantém a referência dele para conhecimento do teu ProdutoService, sem isso, não funciona.
jkrfabio
fabiozanardi:
packageservice;importmodel.Produto;publicclassProdutoService{Produtoproduto=newProduto();// instanciar um produto novo aquipublicvoidvenderProduto(intquantidade){}publicvoidvenderProduto(intquantidade){inttotal=Produto.getEstoque()-quantidade;// subtraia da quantidade em estoqueProduto.setEstoque(total);}}
Fábio, está dando erro.
Tenho que mudar algo também na classe Produto? Pois está pedindo para mudar o modificador do getEstoque para static
mas mudando para static gera um outro erro.
jkrfabio
Vamos supor que eu tenha somente o produto A
e que eu tivesse de estoque 10
e no método venderProduto diria a ele para descontar por exemplo vendi 5, o estoque deverá conter somente mais 5!
somente isso que quero.
sergiotaborda
jkrfabio:
Abaixo tenho meu outro pacote service, e dentro do mesmo uma classe e um método
esse método eu passo como parâmetro o quantidade de produtos a serem vendidos,
Sim, mas vc não passa qual é o produto a ser vendido. Como vc quer que o método saiba qual é o produto ? Adivinhe ?
Já lhe disseram a resposta : passe o produto no método
É claro que vai ter que obter o estoque atual de alguma forma e depois atualizar o estoque com o novo valor. Usei métodos para vc entender o algoritmo, vc implementa como quiser.
drsmachado
jkrfabio:
Vamos supor que eu tenha somente o produto A
e que eu tivesse de estoque 10
e no método venderProduto diria a ele para descontar por exemplo vendi 5, o estoque deverá conter somente mais 5!
somente isso que quero.
Na verdade, o que você quer é uma resposta pronta.
Esqueça isso, não se iluda, tampouco faça os foristas perderem tempo.
Mostre o que fez, qual a dúvida e aprenda que perguntar é esperar respostas, não que façam o que você quer.
fabiozanardi
eu apenas dei um exemplo de como acessar o get e o set do produto que ele não estava sabendo fazer, obvio que somente assim nada iria funcionar.
alberthy
Se você pegar qualquer apostila na internet com relação a Java Básico, você irá encontra algo a respeito.
Aposto que é trabalho de faculdade!
Abraço!
jkrfabio
Pessoal consegui resolver com a ajuda de vocês! Acrescentei um método para imprimir os estoques.
packageservice;importmodel.Produto;publicclassProdutoService{publicvoidvenderProduto(){Produtob=newProduto();b.setEstoque(10);b.setqtdVenda(2);b.setnovoEstoque((b.getEstoque()-b.getqtdVenda()));}publicvoidimprimirEstoques(Produtob){System.out.println("Estoque atual "+b.getEstoque());System.out.println("Estoque após venda "+b.getnovoEstoque());}}
Até aí tudo ok, porém tenho uma outra classe somente com o Main em que eu deveria dizer para ele inicar o venderProduto e abaixo imprimirEstoques
mais ou menos assim:
Obviamente isto não está funcionando, poderiam dizer o que está faltando? Tento passar Produto b como parâmetro mas ele não aceita.
n1ls0n
jkrfabio:
Pessoal consegui resolver com a ajuda de vocês! Acrescentei um método para imprimir os estoques.
packageservice;importmodel.Produto;publicclassProdutoService{publicvoidvenderProduto(){Produtob=newProduto();b.setEstoque(10);b.setqtdVenda(2);b.setnovoEstoque((b.getEstoque()-b.getqtdVenda()));}publicvoidimprimirEstoques(Produtob){System.out.println("Estoque atual "+b.getEstoque());System.out.println("Estoque após venda "+b.getnovoEstoque());}}
Até aí tudo ok, porém tenho uma outra classe somente com o Main em que eu deveria dizer para ele inicar o venderProduto e abaixo imprimirEstoques
mais ou menos assim:
Obviamente isto não está funcionando, poderiam dizer o que está faltando? Tento passar Produto b como parâmetro mas ele não aceita.
No caso você terá que instanciar a classe que pretende usar os métodos ou coloca estes métodos como "static" e chamá-los diretamente com a classe.
sergiotaborda
Na boa. Vc tem problemas sérios de conceito de como funciona um sistema OO. Vc quer vender produtos sem os identificar ?
O que lhe dissemos é que o método vender tem que receber o produto. Não é o método que decide o produto a ser vendido.
O codigo ficaria mais ou menos assim:
packageservice;importmodel.Produto;publicclassProdutoService{// o estoque não fica no produto. é um contador à parte.// aqui estou usando um mapa, mas num sistema real teriamos uma entidade Estoque e um banco de dados.// vamos supor que este mapa foi iniciado com 100 quantidades para cada produtoprivateMap<Produto,Integer>estoque=newHashMap<Produto,Integer>();publicvoidvende(intquantidade,Produtoproduto){IntegerquantidadeAtual=estoque.get(produto);IntegerquantidadeFinal=quantidadeAtual-quantidade;estoque.put(produto,quantidadeFinal);System.out.println("Estoque atual "+quantidadeAtual);System.out.println("Estoque após venda "+quantidadeFinal);}}publicclassInterfacePrincipal{publicstaticvoidmain(String[]args){// vc precisa do service, primeiroProdutoServiceservice=newProdutoService();// precisa identificar o produto. Aqui estou usando um string de nome, mas no mundo real seria o id do bancoProdutolaranjas=newProduto("laranjas");// invoca o serviço para realizar a venda.service.vende(8,laranjas);// e agora com bananasProdutobananas=newProduto("bananas");service.vende(5,bananas);}}
veja que a informação de quanto é vendido e qual o produto vem de fora do servico. Por isso que ele se chama serviço , ele serve a alguém. No caso o método main.
O serviço não pode decidir o produto, como no seu codigo onde o serviço da new no produto. Isso não faz sentido.
Espero que com este exemplo entenda melhor como funciona o fluxo e como se usam os objetos.