Duvida na modelagem de classes

9 respostas
D

De principio eu sou novo aqui, queria a ajuda de vcs.

Bem estava pensando como posso modelar minhas classes, é uma duvida simples eu imagino…
Preciso de montar um modelo que eu possa controlar estoque. e preciso controlar esse estoque com os produtos individuais e em caixas…
Ex:
tenho 1000unidades de bala…
se eu vender uma unidade terei 999
entao se eu vender 1 caixa X eu terei 899 (supondo que a caixa X vem com 100)…
e se eu vender a caixa Y terei 849 ( a caixa Y vem com 50…)

como eu poderia cricar classes para trabalharem dessa forma?

usar heranca??
-uma classe “Produto”, e duas que extendem: “ProdutoUnidade” e “ProdutoCaixa”

ou usar referencia a um objeto??
-na classe “ProdutoUnidade” e “ProdutoCaixa” terá uma propriedade do objeto “Produto”

desde já, nao sei se fui claro.

9 Respostas

nel

Boa noite.

Está muito superficial sua dúvida, na minha opinião, ou melhor, o que realmente quer fazer? Seu objetivo?
A partir do que disse podemos citar algumas formas, mas vou supor uma.

Crie uma classe produtos e entre seus atributos tenha algo:

ProductType

//atributos, entre eles
//Descreve o seu produto: bala, chocolate, cereal....
String description;
int quantity;

E sua classe produto...

Produto

//atributos, entre eles...
ProductType productType;

É por ai....em relação ao tipo de caixa, pode até mesmo criar uma classe para isso ou simplesmente verificar no seu sistema, quando o usuario informar que a caixa é do tipo x você assume que a quantidade é 100 e a caixa Y é 50.

Abraços

xjunior

Bom amigo, vc foi muito vago na sua definição, pois se vc sabe a lógica do negócio porque não fazer uns casos de uso pra identificar as situações do seu problema,
após faz um diagrama de classes, se vc ver algo em comun vc pode fazer herança e polimorfismo, e ainda, se vc ver que pode haver situações pra usar design patterns, aconselho vc a utilizá-los, não sei se entendi, mas se vc possui um produto que vai sendo descontado de forma que depende do desconto do anterior, usa um design pattern que utilizo muito que faz parte da família dos comportamentais, o “chain of responsability” no qual vc faz um encadeamento de instâncias e cada uma pega o cliente e trata ele de acordo com a sua responsabilidade, agora depende realmente do que vc quer.

Lembre-se, todo projeto que for fazer, comece com algum tipo de documentação, embora que seja mínima, mas vai te ajudar e facilitar no futuro.

A

O Padrão Strategy acredito que poderia resolver este problema bem…

De uma lida no mesmo e veja se ele pode te ajudar.

Att

Felagund

Vou postar mais ou menos o que eu entendi do seu problema

public class Bala{
 private String cor;
 //Outros atributos e metodos
}

public abstract class Caixa{
   private int quantidade;
   private List<Bala> balas;

   //metodos de acesso

   public abstract void efetuarVenda();

}

public class CaixaX extends Caixa{
   public void efetuarVenda(){
       //remove 100 do estoque
   }

}

public class CaixaY extends Caixa{
   public void efetuarVenda(){
       //remove 50 do estoque
   }

}

Bem simples e bem compacto, espero que sirva de ajuda.

A

Não entendi para que a Lista?

private List<Bala> balas; Att

sergiotaborda

dimribeiro:
De principio eu sou novo aqui, queria a ajuda de vcs.

Bem estava pensando como posso modelar minhas classes, é uma duvida simples eu imagino…
Preciso de montar um modelo que eu possa controlar estoque. e preciso controlar esse estoque com os produtos individuais e em caixas…
Ex:
tenho 1000unidades de bala…
se eu vender uma unidade terei 999
entao se eu vender 1 caixa X eu terei 899 (supondo que a caixa X vem com 100)…
e se eu vender a caixa Y terei 849 ( a caixa Y vem com 50…)

E se voce vender a caixa toda ?
O que é o seu produto ? as balas dentro das caixas, ou as caixas em si mesmas, ou os dois ?

Este problema é conhecido. Um produto pode ter diferentes “tipos” conforme ele pode ser vendido ou não.
Para modelar as classes vc precisa ter um modelo na sua cabeça e esse modelo tem que funcionar

O modelo mais simples (não de implementar, mas de usar) é considerar que todo o produto é composto por outros produtos (padrão composite object)

Um produto “caixa de bala de morango” é composto por 900 balas de morango. Então vc tem dois produtos.
O produto mais simples ( aquele que não é composto por nada mais) é a unidade do que vc vende. No sistema de estoque a composição é importante ( não apenas para estoque para control de produção tb).

O modelo é então : Produto A -> X produto B + Y produto C + …

Caixa de balas = 900 balas
bala = 1 bala

O preço é atribuido ao menor produto (que é a unidade) e o preço da caixa é simplesmente a multiplicação com um fator de desconto (ou não).
O exemplo classico 3x2 ou 2x1. Vc compra dois frascos de shamppo e leva 3. A unidade é o fraco, o produto é a embalagem com os 3

Embalagem 3x2 de Shampoo HTC = 3 frasco shampoo HTC
1 rasco shampoo HTC = rasco shampoo HTC

O sistema de preço é variável conforme a forma de embalagem, mas tudo é produto, tudo é vendivel…bom, quase tudo.
Caixa de bala vêm em paletes de caixa de bala. Provavelmente vc não venderá paletes inteiras, mas irá comprá-las. O sistema de produtos é o coração tanto das vendas como das compras, portanto a herarquia de produtos é o cerne do negocio da emrpesa.

Em java

interface Produto  {

    public String getNome()
    public List<ComposicaoProduto> composicao;


   public void add(Produto p , Quantidade quantidade){
         compiosicao.add(new ComposicaoProduto(p, quantidade);
   }

}

public class ComposicaoProduto {

         public Quantidade getQuantidade()
         public Produto getProduto() 
}

Tem que usar Quantidade e não int porque produtos diferentes têm unidades diferentes. (tecido é por metro, bala é por unidade , fruta é por quilo,etc)

B

Acho que o modelo mais simples seria não implementar nada.

Digo, apenas ter uma classe Produto com uma descrição, “BALA DE MORANGO” ou “CX COM 10 UN BALA DE MORANGO”. Esse é o tipo de controle de estoque mais simples e mais usado na vida real.

A menos que o negócio peça o controle das unidades individuais dentro de cada caixa, não vejo tantos problemas.

D

entao gnt…
vejam se tomei a decisao certa…

class TipoProduto {
 String nome;
 int qtdeEstoque;

 void MovimentarEstoque(int q) {
  qtdeEstoque+=q;
 }
}

class Produto {
 TipoProduto prod;
 int qtdeCaixa;

 void Vender(int q) {
  prod.MovimentarEstoque(-qtdeCaixa*q);
 }
}

(valeu as respostas o pessoal aqui responde mesmo! =D)

O

Ola ! Nao sei se ajudaria e nem sei se era exatamente esse a sua duvida, mas aqui na empresa onde trabalho, para cada produto, utilizamos unidades com fator de entrada e saida.

Por exemplo, ao fazermos um pedido de 1000 balas, o fornecedor as entrega em 10 caixas (cada um contendo 100 balas). E vem com a seguinte nota nota fiscal (entrada):

codigo descricao qtde unidade preco unitario subtotal

0001 balas gostosinhas 10 CX 100,00 1000,00

Porem, eu como comerciante, vendo por “Pacote c/ 2”.

Entao, temos na nossa tabela de Unidades:

codigo descricao fator

CX Caixa 100
PC/2 Pacote c/2 2

No controle de estoque, utilizamos na quantidade sempre a unidade de venda (saida). Assim, no exemplo da nota de entrada, atualizamos o estoque fazendo o calculo:

entrada = qtde de entrada da nf * fator da unidade de entrada / fator da unidade de saida
entrada = 10 * 100 / 2 = 500 PC/2

A saida eh mais facil pois a unidade de venda e do controle de estoque estao iguais.

Exemplo: vendeu 2 PC/2 … Logo, no estoque, basta subtrair 2.

Bom, nao sei se falei alguma besteira, mas acho que e isso.

Espero ter ajudado.

Criado 4 de fevereiro de 2010
Ultima resposta 8 de fev. de 2010
Respostas 9
Participantes 8