Duvida sobre Teoria de Objetos

8 respostas
H

Pessoal eu esto estudando bastante java e fazendo pequenos programas, mas o que não me entra na cabeça é a questão de objetos. tenho duvidas ainda então postei esse codigo aqui
e ao lado de cada linha comentarei sobre o que está acontecendo. Gostaria que alguem me corrigisse se estiver errado. preciso entender isso para ir adiante. abraço a todos

public class Mix4 {
   int counter = 0;


public static void main(String [] args)
{
    int count =0;
    Mix4 []m = new Mix4[20];// aqui o 'm' é o objeto da classe Mix4 seria isso? eu não entendo o que é o new? 
    int x =0;
    while (x<20 )
    {
        m[x].counter = m[x].counter+1; // aqui o objeto na posição 0 acessa a variavel counter? seria isso.
        count = count +1;
        count = count + m[x].maybeNew(x); // aqui o objeto chama o metodo e depois retorna para a variavel count??
        x = x+1;
    }
}

       public int maybeNew(int index)
       {
           if(index<5)
           {
               Mix4 m = new Mix4();  // Não entendi essa linha. Para que construir outro objeto??
               m.counter = m.counter+1;
               return 1;
           }
               return 0;
       }
}

8 Respostas

pvrsouza
halm:
Pessoal eu esto estudando bastante java e fazendo pequenos programas, mas o que não me entra na cabeça é a questão de objetos. tenho duvidas ainda então postei esse codigo aqui e ao lado de cada linha comentarei sobre o que está acontecendo. Gostaria que alguem me corrigisse se estiver errado. preciso entender isso para ir adiante. abraço a todos
public class Mix4 {
   int counter = 0;


public static void main(String [] args)
{
    int count =0;
    Mix4 []m = new Mix4[20];// aqui o 'm' é o objeto da classe Mix4 seria isso? eu não entendo o que é o new? 
    int x =0;
    while (x<20 )
    {
        m[x].counter = m[x].counter+1; // aqui o objeto na posição 0 acessa a variavel counter? seria isso.
        count = count +1;
        count = count + m[x].maybeNew(x); // aqui o objeto chama o metodo e depois retorna para a variavel count??
        x = x+1;
    }
}

       public int maybeNew(int index)
       {
           if(index<5)
           {
               Mix4 m = new Mix4();  // Não entendi essa linha. Para que construir outro objeto??
               m.counter = m.counter+1;
               return 1;
           }
               return 0;
       }
}
Um objeto é uma instância de uma classe.

aqui o 'm' é o objeto da classe Mix4 seria isso? eu não entendo o que é o new?
Isso. "m" é uma instancia da classe Mix4 , portanto é um objeto do tipo Mix4. O new server para chamar o construtor da classe.
aqui o objeto na posição 0 acessa a variavel counter? seria isso.
Isso mesmo
aqui o objeto chama o metodo e depois retorna para a variavel count??
Não. O objeto na posicao X, chama o maybeNew() e o retorno deste método é somado ao valor de counter
Não entendi essa linha. Para que construir outro objeto??
Porque muitas vezes é necessário ter varios objetos do mesmo tipo. Imagine uma corrida de carros, vc precisa de varios carros para realizar a corrida. Sacou?

Abraços

E
1. public class  Mix4 {  
   2.    int counter = 0;  
   3.   
   4.   
   5. public static void main(String [] args)  
   6. {  
   7.     int count =0;  
   8.     Mix4 []m = new Mix4[20];// m é uma variável que referencia um novo objeto do tipo "array de Mix4". Esse array de Mix4 foi criado com o tamanho 20.
// Ele tem 20 posições nulas. Tome cuidado! Quando se cria um array de alguma coisa, esse array vem com todas as posições zeradas ou nulas. Isso
// é muito chato; você precisa inicializar as posições sempre que possível.
   9.     int x =0;  
  10.     while (x<20 )  
  11.     {  
  12.         m[x].counter = m[x].counter+1; // A rigor, este programa está errado, porque neste ponto do programa 
// a posição x da variável m não contém nenhum objeto. Você iria encontrar aqui um "NullPointerException". 
  13.         count = count +1;  
  14.         count = count + m[x].maybeNew(x); // aqui o objeto chama o metodo e depois retorna para a variavel count??  
// Seria mais ou menos isso, se m[x] contivesse um objeto do tipo Mix4. Do jeito que está esse programa, nem chega neste ponto. 
  15.         x = x+1;  
  16.     }  
  17. }  
  18.   
  19.        public int maybeNew(int index)  
  20.        {  
  21.            if(index<5)  
  22.            {  
  23.                Mix4 m = new Mix4();  // Não entendi essa linha. Para que construir outro objeto??  
// É porque o cara que escreveu este exemplo totalmente estúpido criou um objeto à toa. Realmente você tem toda a razão. 
  24.                m.counter = m.counter+1;  
  25.                return 1;  
  26.            }  
  27.                return 0;  
  28.        }  
  29. }
H

OK esto quase entendendo. “m” é uma variavel de referencia, mas desta maneira fica dificil de entender. Em palavras simples “m” é um objeto da classe MIX4 ou não? esse negocio de referencia eu acho meio confuso? abraço

# public static  void main(String [] args)    
 {    
     int count =0;    
     Mix4 []m = new Mix4[20];// m é uma variável que referencia um novo objeto do tipo "array de Mix4". Esse array de Mix4 foi criado com o tamanho 20.  
     int x =0;    
     while (x<20 )    
    {

}
E

m não é um objeto (objetos não têm nome!) mas sim uma variável.
O tipo dessa variável não é Mix e sim Mix[].
Pense em uma referência como se fosse um endereço de uma casa. Uma variável é um pedaço de papel onde você escreveu o endereço da casa. Ou seja, a variável (pedaço de papel) contém uma referência (endereço da casa) para um objeto (casa).

E

Por outro lado, eu costumo pensar em um array como sendo uma caixinha de ovos (aquelas de polpa de papel reciclado).

Quando você cria um array, na verdade cria uma caixinha de ovos sem ovos (ou seja, algo como Ovo[] caixa = new Ovo[12]; )

Para você poder usar o array (que vem vazio), você precisa criar os ovos.

Ovo[] caixa = new Ovo[12]; // variável caixa aponta para uma nova caixa de ovos, vazia mas com 12 posições.
// Agora vamos encher a caixa de ovos.
for (int i = 0; i < caixa.length; ++i) {
    caixa[i] = new Ovo();
}
H
Só mais uma duvida neste codigo para entender mais. abraço
public static void main(String [] args)
{
   Puzzle[]obj = new Puzzle[6];
   int y =1;
   int x =0;
   int result = 0;
   while (x<6)
   {
      
      obj[x]= new Puzzle();// O que está acontecendo aqui nesta linha. è uma varialvel na posição x e o resto?
      obj[x].ivar = y; // e aqui??? 
      y = y*10;
      x++;
      System.out.println("teste"+ y);

   }
E

Obs: Estou falando em “ovos” abaixo mas obviamente eu sei que “puzzle” = “quebra-cabeça”. É que não quero
perder a analogia da caixa de ovos. Quando você pensar em um array, pense em uma caixa de ovos

  • elas são fabricadas de tal forma que não podem ficar menores ou maiores, e elas são fabricadas
    vazias (ou seja, sem ovos).
    Para arranjar uma caixa maior ou menor, você precisa jogar a caixa fora,
    e fabricar uma caixa nova com o tamanho desejado.
# public  static void main(String [] args)  
# {  
#    Puzzle[]obj = new Puzzle[6];  // crio uma caixa de ovos, vazia, com 6 ovos
#    int y =1;  
#    int x =0;  
#    int result = 0;  
#    while (x<6)  
#    {  
#         
#       obj[x]= new Puzzle();// O que está acontecendo aqui nesta linha. è uma varialvel na posição x e o resto?  
// preencho a posição x da caixa de ovos (você deve ter percebido que x = 0, x = 1 e assim por diante)
// com um novo ovo.
#       obj[x].ivar = y; // e aqui???   
// Atribuo ao membro "ivar" do ovo que está na posição x da caixa de ovos, o valor y. 
#       y = y*10;  
#       x++;  
#       System.out.println("teste"+ y);  
#   
#    }
JxtaNode

Bom dia,

Não é assim tão facile de comprender esta frase Java :

Typo[]   varRef  =  new   Typo[12];

Ok, uma tabela (array) é um objeto em java (neste caso de tipo Typo[] e não de tipo Typo).
Typo é o tipo dos elementos da tabela(array) e Typo[] o tipo do objeto referenciado através variável varRef.

E como qualquer objeto deve ser referenciado através de uma variável (varRef ).

Uma referencia é um apontador sobre objeto em java que esta na memoria(HEAP).

Um objeto pode ser referenciado por múltiplas variáveis (referências ou apontador)
Exemplo : varRef2=varRef ; varRef3=varRef ;

Quando o objeto já não é referenciado em seguida, o coletor de lixo (Garbage Collector) pode passar.

Uma tabela, java é caracterizado por: um tamanho fixo(neste caso 12), conteúdo(exemplo ovos ;-) ), índices(começa a zero).

OK por tudo isto !

Agora um bucado mais complicado : "uma tabela(array) é um objeto"

No caso de uma classe, nós podemos escrever :

MihnaClass varRef = new MihnaClass();

Typo[] varRef = new Typo[12];

Analogias : MihnaClass equivalente a Typo[]

MihnaClass(); equivalente a Typo[12];

A questão é qual é a classe que se esconde atrás de um array java ?

Abraços

Criado 8 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 8
Participantes 4