os seguintes programas são meio extensos então desde já me perdome pelo enooorme espaço q eles vão ocupar. Entretanto é uma questão interessante que envolve conceitos clássicos e de OO, enfim, um misto curioso.
estava eu desenvolvendo um sisteminha de caixa e gerenciamento de estoque (que ele chamou de frente de loja) pro meu tio, que deveria fazer as seguintes coisinhas:
comprar
vender
registrar caixa
registrar estoque
bem simples de entender, de modo que eu decidi criar um “Objeto”, uma classe pra lidar com essas coisas.
eu decidi que iria existir uma coisa sobre a qual todo o bagulho girasse: o produto. Então, de acordo com a filosofia OO, eu estaria materializando algo do mundo real nas linhas de código (abstração, ehehehe…).
o Produto ficou assim:
public class Produto{
//O produto é a classe responsável pela modelagem dos dados. Trata-se do modelo de dados a ser estocado.
private String nome,marca,descricao,unidade,corredor;
private int quantidade,prateleira;
private double precompra, prevenda;
public Produto(String nom,String mar,String des,String uni,int qua,double preco,double preve,String cor,int pra){
//Atributos de caracterização
nome=nom; marca=mar; descricao=des;
unidade=uni; precompra=preco; prevenda=preve;
//Atributo de estocagem
quantidade=qua; corredor=cor; prateleira=pra;
}
//Montes de "gets"
public String getNome() {return nome;}
public String getMarca() {return marca;}
public String getDescricao() {return descricao;}
public String getUnidade() {return unidade;}
public int getQuantidade() {return quantidade;}
public double getPrecompra() {return precompra;}
public double getPrevenda() {return prevenda;}
public String getPosicao() {return corredor+String.valueOf(prateleira);}
public double getLucro() {return prevenda-precompra;}
//vários "sets". Todo o produto pode ser alterado.
public void setNome(String x) {nome=x;}
public void setMarca(String x) {marca=x;}
public void setDescricao(String x) {descricao=x;}
public void setUnidade(String x) {unidade=x;}
public void setQuantidade(int x) {quantidade=x;}
public void setPrecompra(double x) {precompra=x;}
public void setPrevenda(double x) {prevenda=x;}
public void setCorredor(String x) {corredor=x;}
public void setPrateleira(int x) {prateleira=x;}
public void setPosicao(String x,int y) {setCorredor(x);setPrateleira(y);}
/*Seria mesmo "get&set" uma filosofia ruim? um objeto não deve revelar seus segredos a ninguém?
isso saberemos no futuro...
Esta classe não passa de um mero tipo... Ou podemos chamá-la de Classe?
Indeferivelmente um TIPO! Ou não?*/
}
como vocês podem notar pelos coments, é neste carinha que residem minhas maiores dúvidas. e desde já eu adianto desculpas se ofendo alguém usando "get"s e "set"s na classe (será uma classe mesmo?)
o Produto possui todas as características gerais dos produtos que o tio desejava estocar, de modo que alguns detalhes, como por exemplo estocar vários produtos eu tentei resolver na classe a seguir: meu órgui e ligira, SiCaGerEs!
public class SiCaGerEs{
private Produto[]prod;
private Produto[]aux;
private String aviso;
private double caixa;
//Interfaces ditas complexas; Cheias de loops e condicionais.
public void aumentaLista(int x){
if(x>prod.length){
aux =new Produto[x];
for(int i=0;i<prod.length;i++){
aux[i]=prod[i];
}
prod=new Produto[x];
for(int i=0;i<prod.length;i++){
prod[i]=aux[i];
}
aux=null;
}
else aviso="Você não pode diminuir o tamanho da lista!";
}
public void addProduto(String nom,String mar,String des,String uni,int qua,double preco,double preve,String cor,int pra){
int x=0;
if(x==0)for(int i=0;i<prod.length;i++)if(condBusca(nom,mar,des,uni,x)==true){
aviso="O produto "+i+" já possui estas características.";
x++;
}
if(x==0)for(int i=0; i><prod.length;i++)if(prod[i]==null){
prod[i]=new Produto(nom,mar,des,uni,qua,preco,preve,cor,pra);
break;
}
else aviso="Posição livre não encontrada! Aumente a lista.";
}
public void rmProduto(String nom,String mar,String des,String uni){
for(int i=0;i<prod.length;i++)if(condBusca(nom,mar,des,uni,i)==true){
rmProduto(i);
break;
}
else aviso="Produto não encontrado!";
}
public void vendeProduto(int i,int x){
if(prod[i]!=null){
prod[i].setQuantidade(prod[i].getQuantidade()-x);
caixa=caixa+prod[i].getPrevenda();
}
else aviso="Produto não encontrado!";
}
public void vendeProduto(String nom,String mar,String des,String uni,int x){
for(int i=0;i<prod.length;i++)if(condBusca(nom,mar,des,uni,x)==true){
vendeProduto(i,x);
}
else aviso="Produto não encontrado!";
}
public void comprarProduto(int i, int x){
if(x>0){
prod[i].setQuantidade(prod[i].getQuantidade()+x);
caixa=caixa-prod[i].getPrecompra();
}
else if(x<0)aviso="Você não pode comprar uma quantidade negativa!";
}
public void comprarProduto(String nom,String mar,String des,String uni,int x){
for(int i=0;i<prod.length;i++)if(condBusca(nom,mar,des,uni,x)==true){
comprarProduto(i,x);
}
else aviso="Produto não encontrado!";
}
private boolean condBusca(String nom,String mar,String des,String uni,int i){
if(prod[i].getNome()==nom && prod[i].getMarca()==mar && prod[i].getDescricao()==des && prod[i].getUnidade()==uni)return true;
else return false;
}
//Interfaces ditas simples
public SiCaGerEs() {prod=new Produto[100];}
public void rmProduto(int i) {if(i><prod.length)prod[i]=null;}
public double getCaixa() {return caixa;}
public String getAviso() {return aviso;}
/*A OO defende um fraca ligação entre os objetos, entretanto a razão de existir desta classe é a classe produto.
De fato, se não existir classe produto, não existe SiCaGerEs! Eu chamaria isso de sistema binário, pra não chamar de
erro de modelagem, ehehehe...*/
}
bom, essa classe é um bixão meio estruturadão demais, mas a vida é assim mesmo, né? os mesmos alerts da classe de cima valem pra essa, embora mais velados e não me perguntem sobre persistência destes dados, pois isso é um problema que eu ia ver mais tarde, escrevendo uma outra versão dessa criança. Mas o cerne da questão é o seguinte:
1- Isso é um erro de modelagem, visto que qualquer mudança em Produto acarreta numa mudança em SiCaGerEs?
2- Produto tá mais pra “tipo” produto que “classe que representa um produto capaz de blábláblá…”?
3- Alguém tem algo mais útil que array de Produto pra armazenar e tornar mais maleáveis os produtos armazenados, e de quebra facilite no dia em que eu for fazer algo pra gravar um db?
4-Quantas UI (sem o “G” mesmo, a máquina do tio é um poderoso kripton 6 II, ehehehe…) diferentes vocês recomendam, visto que eu não planejo fazer uma só? sigo algo como Supervisor-PdV-Gerente-qqcoisa?
5-É pecado usar java assim?(rsrsrsrsrssrs!!! Mai eh sério, senão num passo na prova de certificação…)
eu posto aqui porquê a comunidade é que pode melhor opinar sobre o assunto, fora que um colega meu já falou um ouco sobre, mas eu ainda não tinha mostrado a classe pra ele, ehehehe… Ae as crasse, ehehehe…
vam lah povo, eu quero saber qq vcs tem a dizer sobre isso…>