¿Qué es un objeto en Java?

Recuerdo que fue en 2006 cuando me planteé, por primera vez, aprender a programar. Un amigo mío, estudiante de Ingeniería, me recomendó que aprendiera Java. No recuerdo qué argumentos me dio entonces, pero sí recuerdo que me dijo que "Java es un lenguaje orientado a objetos". Me sonó a chino, ya que no tenía ni idea de qué era un objeto en Java.

More...

Cuando, en 2015, comencé a aprender, aún tardé un tiempo en comprender qué era un objeto. Se hablaba de objetos en los tutoriales, cursos y manuales que consulté, pero en ninguno me lo explicaban desde cero. Al final, tras mucho darle vueltas, terminé entendiéndolo; pero no sin mucho esfuerzo. Los objetos son algo esencial en Java, y te los vas a encontrar continuamente a la hora de programar. Por eso, es muy importante que entiendas qué son y cómo se crean. Voy a intentar explicarte de la manera más sencilla posible qué es un objeto en Java y cómo se crea.

Entonces, ¿qué es un objeto en Java?

Un objeto en Java no es ni más ni menos que lo mismo que un objeto en el mundo real. No tiene existencia física (en el sentido de que no puedes tocarlo como puedes tocar una lámpara), pero sí existe como "algo" que contiene información sobre sí mismo y sobre su estado, y con el que puedes interactuar.

Imagínate, por ejemplo, la lámpara de la que te acabo de hablar. Es rosa y tiene un botón de encendido y apagado. Supongamos que está encendida.

Ahora, imagínate otra lámpara, igual a la anterior, que está a su lado. La única diferencia es que esta es verde. Y está apagada.

Ejemplo de lámpara

No, no encontré otra más fea

Pues bien: si queremos crear un objeto de tipo Lámpara en Java, primero debemos crear un molde o receta, donde vamos a especificar el comportamiento del objeto (cómo apagar y encender la lámpara), así como sus características (el color de la lámpara). Utilizando este molde podremos producir tantos objetos de tipo Lámpara como lo permita la memoria del dispositivo. A este molde se le denomina clase en Java.

Una clase en Java es un molde, que permite crear un número ilimitado de objetos.

Compártelo

Propiedades de las clases:

  • check
    Un archivo .java puede contener un número ilimitado de clases.
  • check
    De ese número ilimitado, solo una clase puede ser public. La clase pública ha de llamarse igual que el archivo que la contiene.
  • check
    Una clase, sin ser pública, puede llamarse igual que el archivo que la contiene.
  • check
    ¡No repitas nombres! Cada clase ha de tener su propio nombre, distinto de los demás.

Vamos a empezar por crear la clase Lampara. Lo he puesto sin tilde porque nunca sabes quién va a trabajar en tu código después, si va a tener tildes en el teclado o no. Eso sí, ten en cuenta que el código Java con tildes compila y se ejecuta con normalidad (y también con texto en cirílico. Lo he comprobado).

Como ves, un mismo archivo: 1) puede contener varias clases, 2) no es obligatorio que contenga una pública y, por último, 3) una clase puede llamarse igual que el archivo que la contiene sin ser pública.

Cómo crear (o instanciar) un objeto en Java

Una vez que has creado la clase, ya puedes crear (o instanciar) un objeto en Java. La "frase mágica" para instanciar un objeto contiene las siguientes partes:

Ejemplo de creación de objeto en Java
  • En primer lugar, especificamos el tipo de objeto que estamos creando. Dicho de otro modo, especificamos qué clase estamos instanciando. Aquí, Lampara.
  • A continuación, la referencia al objeto, es decir, el nombre del objeto.

Antes de continuar, tienes que entender que esta referencia no es el objeto, sino que apunta al objeto. Podemos tener varias referencias apuntando al mismo objeto. Yo, por ejemplo, me llamo Miguel. Pero varias personas pueden llamarme de maneras diferentes (apelativos cariñosos, o el apellido). Todas esas referencias apuntan a mi persona, sin ser yo.

Recuerda la diferencia entre objeto y referencia

En Java no tienes nunca acceso al objeto en sí, siempre vas a operar utilizando la referencia. Cuando un objeto se queda sin referencias que apunten a él (porque todas estas apunten a null, o a otro objeto), Java termina borrándolo de la memoria.

  • El signo = asigna a la referencia el objeto que creamos. Es decir, que es como decir esta referencia apunta a este objeto. En Java, este signo no significa "igual", sino que se utiliza para asignar un valor o, en este caso, una referencia. El signo para expresar igualdad es ==. No obstante, si utilizas este símbolo para comparar dos referencias, lo que estás haciendo es comparando si ambas apuntan al mismo objeto o no; no estás comparando la igualdad de los objetos a los que apuntan.

Puedes asignarle a una referencia otro objeto ya creado, o null. Null significa que la referencia no apunta a ninguna parte. Es una etiqueta en el suelo, una vez que la arrancas de la camiseta :).

Asignación de un objeto a otro, o a null

¿Cuántos objetos de tipo Lampara he creado? En realidad, solo dos. lampara y lampara3 apuntan al mismo objeto; hasta la última línea, donde a lampara se le asigna el valor null (es decir: que no apunte a ningún objeto).

Siguiendo con el ejemplo de los nombres...

...es como si tuviéramos primero una persona a la que llamamos Paquito. A continuación, a otra persona a la que llamamos Miguel. A continuación, decidimos que a Paquito lo vamos a llamar, también, Paco. Es decir, tendríamos a dos personas; una con un nombre (Miguel, o lampara2) y otra con dos (Paco y Paquito, o lampara y lampara3, que apuntan al mismo objeto). Al asignar el valor null a lampara es como si dijéramos: "Bien, a Paco lo vamos a llamar solo Paco, y nunca más Paquito". Paquito deja de ser un nombre que haga referencia a alguien.

  • La palabra clave new (nuevo, en inglés), que es la que se encarga de instanciar el objeto.
  • De nuevo, el tipo de la clase y un paréntesis.

El paréntesis se utiliza para introducir parámetros que sean necesarios para crear el objeto. Por ejemplo, si quiero crear un lámpara roja, podría ser la palabra "roja". Pero, para ello, debo de tener en la clase Lampara un constructor que acepte un parámetro de tipo String (cualquier texto entrecomillado). En nuestro ejemplo aún no lo tenemos, de manera que instanciar un objeto de tipo Lampara con parámetros no va a compilar. En el siguiente artículo te hablaré de qué es un constructor y verás ejemplos.

En resumidas cuentas

  • check
    Una clase es un "molde" para crear infinidad de objetos.
  • check
    Un objeto en Java, al igual que un objeto real, puede tener un comportamiento y características propias.
  • check
    Cuando operas con un objeto en realidad lo haces a través de una referencia que apunta a dicho objeto, no con el objeto en sí. Recuerda, es como cuando utilizas un nombre para referirte a una persona.

En los siguientes artículos voy a explicarte qué es el constructor, qué es la encapsulación y cómo definir las características y comportamientos de los objetos. Es decir: ¡aprenderás a encender y apagar la lámpara, y a crear lámparas de distintos colores! 🙂

Ejercicios recomendados

Dado el siguiente código:

¿Cuántos objetos he creado? ¿Cuántos objetos tienen una referencia que apunta a ellos, y cuántos objetos no tienen ninguna referencia asignada? (¡Te aconsejo que cojas papel y lápiz!) .

¡Espero tu respuesta en los comentarios!

Deja una respuesta 2 comentarios