viernes, 22 de noviembre de 2013

Clases y objetos en Java


Un saludo a todos los lectores, en esta ocasión hablaremos de las clases y objetos en Java.

Como ya se comentó en una entrada anterior, debido a la naturaleza de Java de poseer un paradigma de programación orientada a objetos, resulta que todo el código que deseamos escribir debe estar necesariamente dentro de alguna clase, y por lo menos una de las clases que componen el programa debe incluir el método main.


Siguiendo con esta idea, una clase en Java es una descripción de algo, sí, de algo, que puede ser algo real o imaginado, una cosa o una idea, es algo que queremos representar dentro del programa, por ejemplo: bicicleta, persona, perro, relación, sentimiento, etc. 

Y aquí viene la pregunta, si eso es una clase... ¿Qué es un objeto?, ¿No es acaso lo mismo? Obviamente la respuesta es no, y hay que resaltar que es fundamental diferenciar entre clase y objeto porque es la base para la programación orientada a objetos y por ende, es la base para entender Java.

Entonces, en los libros van a encontrar que un objeto es una instancia de una clase, pero, ¿Qué significa esto?, vamos a poner un ejemplo sencillo.

Vamos a suponer que hacemos un programa de inscripciones, y el elemento principal de una inscripción son las personas, y de estas personas necesitamos su nombre, año de nacimiento. Lo que acabamos de hacer es especificar una clase, llamada Persona, y hemos definido unos atributos. En java, nuestra clase Persona quedaría así:
package Main;

public class Persona {
    public String nombre;
    public int añoNacimiento;
}
Ya hemos definido nuestra clase, ahora imaginemos que necesitamos inscribir a una persona, lo que hacemos es crear un objeto, un objeto de la clase Persona.

Puesto que una clase no es más que la definición/descripción general de lo que queremos tratar en el programa, y un objeto es el caso particular de cada existencia de esa descripción.

Es más difícil explicarlo que entenderlo. Si aún no lo han entendido, hagamos un pequeño ejercicio: 
Imaginemos por un momento que somos una especie de Dios, que estamos creando un mundo, e imaginamos algo nuevo, un animal al que llamaremos xyz y describimos las características generales de xyz, por ejemplo, tendrá patas, color, ojos, etc. No definimos los valores (como qué color o cuántas patas) sólo mencionamos las características, y una vez que lo tenemos definido, comenzamos a crear animales de este tipo, de esta claze xyz, y por cada animal que creamos, vamos poniéndole sus valores, por ejemplo, creo un xyz de color marrón, otro de color negro, etc. Y cada uno de los xyz que he creado, es un objeto.

Entonces, ya hemos visto cómo se crea una clase en Java, ahora veamos cómo creamos los objetos de la clase Persona.

Primero, especificamos la estructura de nuestro proyecto (sea Netbeans o Eclipse, o si lo están trabajando sin un IDE):

Paquete Main:
--Persona.java
--Main.java


El archivo Persona.java, contiene a la clase Persona que hemos declarado anteriormente. Ahora nos centraremos en el archivo Main.java. El algoritmo a seguir es el siguiente:
  1. Vamos a crear un objeto de tipo Persona, llamado objPersona.
  2. Modificaremos los atributos del objeto objPersona.
  3. Mostrar los datos de objPersona en pantalla.
Ahora que ya tenemos los pasos, vamos a transformarlo en código. La clase Main fue creada por el IDE, pero aquí está el código, para quienes no están usando IDE:
package Main;

public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    }
    
}
Primero definimos la variable objPersona, el tipo de variable será Persona, así:
Persona objPersona;

Ahora viene algo muy importante, la instrucción anterior sólo le dice al sistema que reserve un espacio en memoria para una variable de tipo Persona. Un objeto no se puede "usar" mientras no se le haya asignado un valor. A esto se le llama inicializar una variable. Por ejemplo una variable x, de tipo int, no puede ser usada si, anteriormente, no se le asignó un valor, y si intentamos usarla sin haberla inicializado, tendríamos el siguiente error:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - variable x might not have been initialized

Por lo tanto, siempre hay que inicializar una variable antes de su primer uso. Para inicializar un objeto, Java brinda la palabra reservada new seguida del <tipo>() (la clase), que indica que se debe crear un dato de la clase especificada. Por ejemplo, en nuestro caso, crearemos una nueva persona (new Persona()) y la almacenaremos en objPersona, así:
Persona objPersona;
objPersona = new Persona();

Luego de esto podemos llenar los valores de los atributos, accediendo a los mismos usando "." (punto) así:
Persona objPersona;
objPersona = new Persona();
objPersona.nombre = "Edder Sánchez";
objPersona.añoNacimiento = 1992;

Ahora vamos a comprobar que los datos se guardaron, mostrando el nombre y año de nacimiento de el objeto:
System.out.println("Nombre de la persona: " + objPersona.nombre);
System.out.println("Año de Nacimiento: " + objPersona.añoNacimiento);

El archivo Main completo, queda de la siguiente manera:

package Main;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Persona objPersona;
        objPersona = new Persona();
        
        objPersona.nombre = "Edder Sánchez";
        objPersona.añoNacimiento = 1992;
        
        System.out.println("Nombre de la persona: " + objPersona.nombre);
        System.out.println("Año de Nacimiento: " + objPersona.añoNacimiento);
    }
    
}

Si ejecutamos el programa, el resultado es el siguiente:


El proyecto en Netbeans aquí (github): Tutorial_04

Nuevamente, cualquier duda, recomendación o incluso alguna corrección déjenla en los comentarios.

Hasta la próxima!

No hay comentarios:

Publicar un comentario