Defina a classe ProdutoPerecivel (subclasse de Produto), que deve possuir um atributo extra dataValidade. A classe ainda deve sobrepor os seguintes métodos:
retirar(), que deve ter mais um parâmetro: dataRetirada. Caso o produto já esteja armazenado a mais de dois meses, o estoque deve ser zerado, pois produtos vencidos são jogados fora. Exiba uma mensagem correspondente. adicionar(), que somente deve adicionar produtos se o estoque estiver zerado,para não misturar produtos com diferentes datas de validade.
privateDatedataValidade;publicProdutoPerecivel(Stringn,intq,doublev,Stringdata)throwsParseException{super(n,q,v);this.dataValidade=newSimpleDateFormat("dd/MM/yyyy").parse(data);}publicDategetDataValidade(){returndataValidade;}publicvoidsetDataValidade(DatedataValidade){this.dataValidade=dataValidade;}publicvoidimprimir(){imprimirProduto();System.out.println("Data de validade: "+this.dataValidade);}
}
Estou travado aqui!
Jothar_Aleksander
Uma dentre várias formas de resolver…
1 - Produto
importjava.math.BigDecimal;publicclassProduto{privatelongcodigoProduto;privateStringmarca;privateStringnomeProduto;privateintquantidade;privateBigDecimalvalorUnitario;publicProduto(){quantidade=0;}/* * Métodos do produto */publicvoidretirar(intquantidade){if(quantidade<=getQuantidade()){setQuantidade(getQuantidade()-quantidade);System.out.println("\nEstoque atualizado para "+getQuantidade()+" unidades.");}else{System.out.println("A quantidade em estoque abaixo do valor de retirada"+"Quantidade atual: "+getQuantidade());}}publicvoidadicionar(intquantidade){setQuantidade(getQuantidade()+quantidade);System.out.println("Estoque atualizado para "+getQuantidade()+" unidades.");}/* * Métodos acessores e modificadores */publicvoidsetCodigoProduto(longcodigoProduto){this.codigoProduto=codigoProduto;}publiclonggetCodigoProduto(){returncodigoProduto;}publicvoidsetMarca(Stringmarca){this.marca=marca;}publicStringgetMarca(){returnmarca;}publicvoidsetNomeProduto(StringnomeProduto){this.nomeProduto=nomeProduto;}publicStringgetNomeProduto(){returnnomeProduto;}protectedvoidsetQuantidade(intquantidade){this.quantidade=quantidade;}publicintgetQuantidade(){returnquantidade;}publicvoidsetValorUnitario(BigDecimalvalorUnitario){this.valorUnitario=valorUnitario;}publicBigDecimalgetValorUnitario(){returnvalorUnitario;}}
2 - Produto Perecível
importjava.util.Date;importjava.math.BigDecimal;publicclassProdutoPerecivelextendsProduto{privateDatedataValidade;/* * Métodos do produto */publicvoidretirar(intquantidade,StringdataRetirada){intDOIS_MESES_VENCIDO=2;/* * 1000 * 60 * 60 * 24 * 30 = [telefone removido] * seg min h dia mês */longmilissegundoMes=2592000000L;//Date dataAtual = new Date();DatedataAtual=configurarData(dataRetirada);BigDecimalintervaloEmMilissegundos=newBigDecimal(dataAtual.getTime()-getDataValidade().getTime());BigDecimalmeses=intervaloEmMilissegundos.divide(newBigDecimal(milissegundoMes),newjava.math.MathContext(10));if(quantidade<=getQuantidade()){if(meses.intValue()>=DOIS_MESES_VENCIDO){setQuantidade(0);System.out.println("Fora do prazo de vencimento. Os produtos foram descartados!");}else{setQuantidade(getQuantidade()-quantidade);System.out.println("Estoque atualizado para "+getQuantidade()+" unidades.");}}else{System.out.println("A quantidade em estoque abaixo do valor de retirada"+"Quantidade atual: "+getQuantidade());}}privateDateconfigurarData(StringdataInformada){Datedata=null;try{java.text.DateFormatdf=newjava.text.SimpleDateFormat("dd/MM/yyyy");data=df.parse(dataInformada);}catch(java.text.ParseExceptionpex){System.out.println("ERRO: conversão impossível!");}returndata;}/* * Métodos acessores e modificadores */publicvoidsetDataValidade(StringdataValidade){this.dataValidade=configurarData(dataValidade);}publicDategetDataValidade(){returndataValidade;}}
Classes e métodos pequenos e de responsabilidade bem definida, isso é sinônimo de um código que observa a Orientação à Objetos. Apesar do construtor não ser um método, isso também vale para construtores. Se você quer ‘entupir’ o construtor de coisas para ele tomar conta (encher ele de responsabilidade), fique a vontade. A lógica está posta (mas não esgotei o conteúdo, que fique bem claro). Basta adequar às suas necessidades, ou seja, agora é contigo.