3
respostas

Duvida Instanciação, atributos e referências.

Essa parte não ficou muito claro pra mim, não consegui entender cada uma delas. Alguém poderia me ajduar?

3 respostas

Olá Silas, tudo bem com você?

Instanciação é processo de criar uma cópia de uma classe existente. Essas classes funcionam como a planta de uma casa que especifica exatamente como a casa real será depois que for construída. Trazendo para o nosso contexto, a casa real será o objeto que foi construído com base na classe, em outras palavras, o objeto é a instância da classe. Usando o explicação da apostila de Java e OO da Caelum:

A palavra classe vem da taxonomia da biologia. Todos os seres vivos de uma mesma classe biológica têm uma série de atributos e comportamentos em comum, mas não são iguais, podem variar nos valores desses atributos e como realizam esses comportamentos.

Homo Sapiens define um grupo de seres que possuem características em comum, porém a definição (a ideia, o conceito) de um Homo Sapiens é um ser humano? Não. Tudo está especificado na classe Homo Sapiens, mas se quisermos mandar alguém correr, comer, pular, precisaremos de uma instância de Homo Sapiens, ou então de um objeto do tipo Homo Sapiens.

Um outro exemplo: uma receita de bolo. A pergunta é certeira: você come uma receita de bolo? Não. Precisamos instanciá-la, criar um objeto bolo a partir dessa especificação (a classe) para utilizá-la. Podemos criar centenas de bolos a partir dessa classe (a receita, no caso), eles podem ser bem semelhantes, alguns até idênticos, mas são objetos diferentes.

Já a referência guarda o endereço de memória de um objeto. Então quando fazemos algo atribuir uma nova instância de uma classe Conta para uma variável, na verdade estamos criando um novo objeto na memória e passando apenas sua localização para a variável:

public static void main(String[] args) {
    Conta c1;
    c1 = new Conta();

    Conta c2;
    c2 = new Conta();
}

Portanto, não é correto dizer que "temos um objeto c1 do tipo Conta". O correto seria dizer que "temos uma referência c1 a um objeto do tipo Conta". Então, uma variável que "aponta" para a localização de um objeto é pode ser chamada de referência, mas a variável em si nunca será um objeto.

Espero ter ajudado. Se tiver qualquer dúvida ou algum ponto ainda não faz sentido, é só avisar!

Abraços e bons estudos!!

Thiago, boa tarde! Então, no caso aí do seu exemplo, não se pode dizer que c1 é uma instância da classe Conta? Ou seja, qual a diferença entre instância e referência? Agradeço a atenção e aguardo retorno, Luciana

Boa tarde Luciana!

Então, imagine a variável referência c1 como uma caixinha. E dentro dessa caixinha é onde nós guardamos o endereço da instância (objeto) da classe Conta.

Objeto (ou instância) é um conjunto de dados criado a partir de uma classe, então ele realmente existe na memória e pode ser manipulado. Porém, ele fica guardado em um lugar da memória chamado Heap, que é um lugar onde os objetos ficam armazenados separado de onde ficam as variáveis e todo o resto. Bom, sabendo que variáveis e objetos ficam em lugares diferentes da memória, podemos concluir que é através dos endereços guardados dentro de variáveis referência como c1 que encontramos o caminho até a instância/objeto de Conta que criamos no Heap.

Voltando ao paralelo que eu fiz com a caixinha, basta imaginar que ao abrir a caixinha c1, você encontrará o endereço de memória do objeto que você está buscando e não o objeto em si. Por isso chamamos variáveis que guardam esses endereços de referências, já que o conteúdo armazenado nelas se refere ao objeto real que está localizado em outro lugar da memória onde só podemos acessar e manipular graças a essas variáveis referência.

Espero que isso te ajude. Se algum ponto ainda não está claro é só me avisar!

Grande abraço e bons estudos!!