Saber quantos objetos foram criados de uma classe

9 respostas
J

Estou na luta pra desenvolver um sistema de pedidos em J2ME.

Tenho uma classe chamada ItemPedido, basicamente:
public class ItemPedido {

    private double quantidade;
    private Produto produto;

    //....

}
Na medida que vou adicionando itens ao meu pedido atual, vou criando os objetos (e colocando a descrição do item num List):
ItemPedido ip1 = new ItemPedido();
ip1.setProduto(produto);
ip1.setQuantidade(quantidade);
lista.addItem(ip1.getProduto().getDescricao());
totalItensPedido++; //essa variavel controla quantos itens  tenho, o item atual que vou incluir

Acredito ter criado uma POG vergonhosa aqui: vários ifs, controlando se totalItensPedido == 1, então ItemPedido 1, e por ai vai.

1º dúvida: existe alguma maneira de eu criar esses objetos (não sei a quantidade, é variável) com um método, ou coisa parecida?

2º dúvida: é possível saber quantos objetos foram criados dessa classe? (preciso colocar eles num vetor de itensPedido[])

Qualquer ajuda é bem vinda, desde já agradeço.

9 Respostas

Rafael_Marques1

se nao forem varias pessoas inserindo ao mesmo tempo, vc pode ter um atributo static q contabiliza qntos objetos foram criados, depois vc zera ela para começar tudo de novo…

ou vc pode ter uma list em algum lugar, e na medida que vc vai criando objetos, adicionando a essa lista, depois pega o tamanho dela…

sei la, deve ter milhares de maneiras de acompanhar isso em um codigo… varios pogs, ou varias solucoes mais elegantes…

Rodrigo_Vieira_Pinto

Se eu entendi o problema, faria o seguinte:

  • criaria uma classe que tivesse como atributo uma lista de itens de pedido;
  • essa classes receberia os novos itens de pedido e controlaria também sua instanciação, se for o caso;

Enfim, colocaria essas regras numa classe, com métodos bem definidos.

J

ceb10n:
se nao forem varias pessoas inserindo ao mesmo tempo, vc pode ter um atributo static q contabiliza qntos objetos foram criados, depois vc zera ela para começar tudo de novo…

ou vc pode ter uma list em algum lugar, e na medida que vc vai criando objetos, adicionando a essa lista, depois pega o tamanho dela…

sei la, deve ter milhares de maneiras de acompanhar isso em um codigo… varios pogs, ou varias solucoes mais elegantes…

Olá ceb10n, é mais ou menos isso que estou fazendo… mas estou encontrando muitas dificuldades e está gerando muito código.

Criei algumas variáveis no escopo da classe (ItemPedido ip1, ip2, ip3… ipn) e estou trabalhando com elas, mas é um código feio pra caramba e não atende a todas as necessidades.
Vou tentar encontrar uma maneira mais elegante, como vc disse, de fazer isso.

J
Rodrigo Vieira Pinto:
Se eu entendi o problema, faria o seguinte:

* criaria uma classe que tivesse como atributo uma lista de itens de pedido;
* essa classes receberia os novos itens de pedido e controlaria também sua instanciação, se for o caso;

Enfim, colocaria essas regras numa classe, com métodos bem definidos.

Olá Rodrigo Vieira Pinto, obrigado por responder.

Me pareceu uma idéia interessante (mesmo não entendendo como poderia fazer isso).

Imagino que acabou de sugerir seria algo mais ou menos assim:

public class ControlaItensPedido{

List itensPedido;
Produto produto;
double quantidade;

    //construtor
    public ControlaItensPedido(Produto produto, double quantidade){
        this.produto = produto;
        this.quantidade = quantidade;
        crieObjetoItemPedido(produto, quantidade);
    }

    private void crieObjetoItemPedido(Produto produto, double quantidade){
        //recebo um produto e uma quantidade, então posso criar um objeto da classe ItemPedido
        ItemPedido ip = new ItemPedido();
        ip.setProduto(produto);
        ip.setQuantidade(qdade);

        //não entendo como posso criar vários objetos com esse método, objeto1, objeto2, objeto n...
        //vejo que teria que ser assim: ItemPedido ip1, ItemPedido ip2, etc (estou certo?)

    }

    private Integer quantosObjetosItemPedidoForamCriados(){
        
        //como vou saber quantos objetos foram criados?
        return numeroObjetosCriados;

    }

    private ItemPedido[] retorneVetorComItensPedido(){

        //além de saber quantos objetos foram criados, como colocar eles num vetor? algo como
        ItemPedido itensPedido[] = new ItemPedido(quantosObjetosItemPedidoForamCriados());
        itensPedido[0] = objeto1;
        itensPedido[1] = objeto2;
        itensPedido[2] = objeto3;
        itensPedido[n] = ...

    }

}

é esse o caminho sugerido?

Rodrigo_Vieira_Pinto

hmmm…acho melhor assim:

public class Produto{
   private List<ItemPedido> itensPedido;

   public Produto(){
      itensPedido = new ArrayList<ItemPedido>();
   }

   public void adiciona(ItemPedido itemPedido){
      itemPedido.doProduto(this);
      itensPedido.add(itemPedido);
   }
 
   public int quantidadeItens(){
      return itensPedido.size();
   }

   public ItemPedido[] itensToArray(){
      return itensPedido.toArray(new ItemPedido[itensPedidos.size()]);
   }
}

public class ItemPedido{
   private Produto produto;
   
   public void doProduto(Produto produto){
      this.produto = produto
   }
}

Dessa forma você, em resumo, coloca as regras de negócio em objetos do domínio. Falta só definir quem cria o ItemPedido. Pode ser uma classe fábrica.

Outra coisa: se para existir um ItemPedido deve existir um produto associado, então no construtor de ItemPedido deve ser passado uma instância de Produto. Aí é só chamar o método doProduto() dentro do construtor.

laurocaetano1

bom, pelo q eu entendi, vc quer saber quantos objetos foram criados… isto é simples kra… faz assim:

cria um atributo static e coloca pra incrementa-lo no metodo construtor… exemplo:
(toda vez que essa classe for instanciada, o contador irá incrementar 1, resultando no final, quantos objetos foram criados)

public class Blablabla {

private static int contador = 0;

public Blablabla() {
    contador++;
}
//pra vc conseguir ver a quantidade de objetos já criados

public int getContador() {

return contador;

}

}
J

Obrigado por todos os que responderam.

Rodrigo Vieira Pinto,

Quando tentei implementar o seu código no meu MIDLet, tive a mensagem
generics are not supported in -source 1.3
use -source 5 or higher to enable generics

Num primeiro momento, pesquisei sobre generics, passando por collections, e percebi que é justamente o caminho para resolver o problema.
Ainda estou encontrando exemplos e tentando entender sobre como trabalhar com essa novidade (ao menos pra mim).

Vasculhando do porque do 1.3, encontrei no build.xml a linha

<property name="javac.source" value="1.3"/>

Vi em alguns blogs que Generics só apareceu a partir da versão 1.5

Não estou entendendo o motivo, estou usando as bibliotecas da 1.3? (sic, não tenho a última versão ???)
Estou usando Platform Micro Edition SDK 3.0, Netbeans 6.8, JRE6 e JDK 1.6 U17.

Alguém já teve esse problema?

j0nny

joellazzari:
Obrigado por todos os que responderam.

Rodrigo Vieira Pinto,

Quando tentei implementar o seu código no meu MIDLet, tive a mensagem
generics are not supported in -source 1.3
use -source 5 or higher to enable generics

Num primeiro momento, pesquisei sobre generics, passando por collections, e percebi que é justamente o caminho para resolver o problema.
Ainda estou encontrando exemplos e tentando entender sobre como trabalhar com essa novidade (ao menos pra mim).

Vasculhando do porque do 1.3, encontrei no build.xml a linha

<property name="javac.source" value="1.3"/>

Vi em alguns blogs que Generics só apareceu a partir da versão 1.5

Não estou entendendo o motivo, estou usando as bibliotecas da 1.3? (sic, não tenho a última versão ???)
Estou usando Platform Micro Edition SDK 3.0, Netbeans 6.8, JRE6 e JDK 1.6 U17.

Alguém já teve esse problema?

Em J2ME não vai ter Generics msm :lol:

nel

Boa tarde.

Saber quantos objetos foram criados, faça assim:

public class ItemPedido() {

private static int objetosCriados = 0;
//seus outros atributos

//construtor da sua classe
public ItemPedido(){
   objetosCriados++;
}

public static int numDeItensPedidos(){
   return objetosCriados;
}

Abraços.

Criado 22 de janeiro de 2010
Ultima resposta 12 de fev. de 2010
Respostas 9
Participantes 6