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.
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.
Propiedades de las clases:
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:
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.
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 :).
¿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.
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
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!