Clases y objetos en Java

Home >> Programación >> Java


Como ya sabrás, una de las características principales de Java es que es un lenguaje orientado a objetos, por lo que la pieza fundamental para trabajar con este lenguaje son (como ya te imaginarás) los objetos. Por supuesto también las clases, porque sin clases no puede haber objetos.

Si quieres saber cómo definir clases y objetos en Java has llegado al sitio correcto. En este artículo vas a encontrar todo lo que necesitas saber para empezar a definir clases en Java y a declarar objetos.

Las clases en Java

¿Qué es una clase en Java?

Como en cualquier lenguaje orientado a objetos, las clases en Java sirven para definir el estado de datos complejos y su respectivo comportamiento. Son la plantilla que posteriormente nos permitirá declarar objetos.

Dicho así seguramente no te habré aclarado nada, así que mira el siguiente ejemplo para que lo entiendas mejor:

El estado

Imagina que quieres definir un coche. No pienses en ningún coche en concreto, solo concéntrate en el concepto de coche. ¿Qué características podrías decir que son comunes a todos los coches?

Voy a listar algunas de esas características aquí: color, marca, modelo, matrícula, kilómetros, etc.

Ahora piensa esto ¿Hay algún tipo de dato en Java que permita definir toda esta información como una única unidad? Por ejemplo, ¿Podrías usar el tipo int para describir un coche (color, modelo, etc.)? ¿O el tipo double? ¿O el tipo String?

Evidentemente no. Un coche es un tipo de dato complejo y solo con los tipos de datos que existen predefinidos no es suficiente. Aquí es donde entran en juego las clases. Gracias a ellas podemos definir tipos de datos mucho más complejos que un simple int o un double.

Volviendo al ejemplo del coche. Todas esas características que listé anteriormente son lo que se conoce como atributos y forman el estado.

El comportamiento

Gracias a las clases podemos ir un poco más allá. Si nos limitamos a definir atributos podremos describir diferentes coches sin problema, pero ¿No te parece que falta algo?

Un coche es algo más que un color, una marca o un modelo. Un coche puede realizar ciertas acciones. ¿Se te ocurre alguna?

Aquí te voy a listar algunas: arrancar, acelerar, frenar, repostar, etc.

Como puedes observar en todo momento utilizo verbos, porque se trata de acciones. Estas acciones son el comportamiento. Es lo que se conoce como métodos de la clase.

Habrás notado que tanto el estado como el comportamiento son genéricos. No estoy concretando ningún coche en concreto. La idea es definir una clase que sirva como plantilla para poder declarar cualquier coche posteriormente.

Te dejo aquí debajo la definición UML de la clase Coche que hemos descrito en este apartado. Esto nos será útil para traducirlo posteriormente a código Java.

clase coche en Java

¿Cómo se define una clase en Java?

Ya tenemos claro cuál es el estado y el comportamiento de un coche, ahora vamos a traducirlo a código Java.

Lo primero que debes hacer cuando definas una clase en Java es crear un nuevo archivo .java. (A no ser que quieras definir una inner class, pero eso no te lo voy a contar aquí. Todo a su debido tiempo).

Los nombres de las clases en Java siempre empiezan en mayúscula y cumplen con la sintaxis Camel. El nombre del fichero fuente .java debe tener el mismo nombre que le des a tu clase.

Volviendo al ejemplo, la clase se llamará Coche, por lo que el fichero .java será Coche.java.

El código de la clase quedará de la siguiente forma:

public class Coche {
    private String matricula;
    private String marca;
    private String modelo;
    private String color;
    private int kilometros;

    public void arrancar(){
        //acción de arrancar
        System.out.println("Arrancando...");
    }

    public void acelerar(){
        //acción de acelerar
        System.out.println("Acelerando...");
    }

    public void frenar(){
        //acción de frenar
        System.out.println("Frenando...");
    }
    public void repostar(){
        //acción de repostar
        System.out.println("Repostando...");
    }
}

Fíjate que utilizo la palabra reservada class y a continuación el nombre de la clase con la primera letra en mayúscula: public class Coche. Por la palabra public por ahora no te preocupes, profundizaré en esto más adelante.

A continuación del nombre de la clase se abre una llave y su correspondiente llave de cierre está al final. Estas dos llaves abarcan toda la clase.

Dentro de la clase hay dos partes, por un lado el estado (todos los atributos) y por otro lado el comportamiento (todos los métodos).

Los atributos

Como puedes comprobar los atributos son variables con un tipo y un identificador. El tipo puede ser cualquiera, desde un primitivo hasta una clase que definas. Lo importante es que el tipo sea el adecuado para la información que contendrá el atributo. En cuanto al identificador, siempre empezará en minúscula (menos las constantes) y cumplirá con la sintaxis Camel.

Si te fijas, el atributo matricula es de tipo String puesto que las matrículas de los coches pueden contener tanto letras como números. Sin embargo el atributo kilómetros es de tipo int puesto que almacenará el número total de kilómetros que ha hecho el coche y este dato suele ser un valor numérico sin decimales.

Normalmente se suelen declarar todos los atributos juntos en la parte superior de la clase, pero no es obligatorio, aunque por orden y claridad yo te recomiendo que lo hagas así.

Los métodos

Justo debajo de los atributos están los métodos. Son los responsables de definir el comportamiento que tendrán posteriormente los objetos de esta clase. Normalmente los métodos manipulan los atributos, aunque puede haber métodos que no utilicen los atributos para nada. Esto depende por completo de las necesidades de la aplicación.

Como puedes ver los métodos también tienen un identificador (el nombre del método). Debe ser un verbo, empezar en minúscula y cumplir con la sintaxis Camel.

Los métodos también tienen unas llaves. Estas llaves encerrarán el código Java que realizará la acción. Ahora para simplificar he puesto una instrucción System.out.println() con un mensaje que se mostrará por pantalla, porque entender cómo funciona el freno o el acelerador de un coche no es el objetivo de este artículo.

Los métodos son bastante complejos y hay muchas cosas que debes tener en cuenta a la hora de definirlos. Por ejemplo, si reciben datos del exterior (como puedes ver tienen unos paréntesis después del identificar) o si devuelven algún resultado (en este caso no, por eso he puesto void antes del identificador). No te preocupes por esto ahora, te lo contaré más adelante en detalle en otro artículo.

Con esto ya tenemos la clase Coche, ahora vamos a utilizarla, para eso necesitamos objetos.

Los objetos en Java

¿Qué es un objeto en Java?

Como ya te comenté anteriormente, la clase sirve de plantilla para poder definir datos con un estado y un comportamiento concretos. Los datos con esta estructura son los objetos.

La clase Java no ocupa memoria, es simplemente la definición. Sin embargo el objeto si, puesto que es el que tendrá la información con la estructura descrita en la clase.

En el ejemplo del coche no nos fijábamos en ningún coche concreto para definir la clase, porque buscábamos una estructura común a todos los coches. En el caso del objeto es distinto. El objeto contendrá información específica de un coche concreto y podrás definir todos los objetos coche que necesites a partir de la clase.

Para que recuerdes esto te doy un truco. Es una tontería pero creo que te puede ayudar. Imagina que la clase es un molde y los objetos son flanes. Puedes cambiar los ingredientes del flan, pero la forma siempre será la del molde.

Volvamos al ejemplo del coche. Imagina que tienes un parking y quieres registrar todos los coches que aparcan dentro. Cada coche que aparca es un nuevo objeto, pero la información que almacenas de cada uno es la establecida en la clase Coche, porque es el molde que utilizas para instanciar (crear) los objetos.

¿Cómo se instancia un objeto en Java?

Ahora que ya conoces la teoría, vamos a ver la práctica.

Para crear un objeto en Java hay que instanciarlo. Básicamente tienes que reservar memoria y especificar la clase de la que vas a crear la instancia.

Siguiendo con el ejemplo voy a crear un objeto Coche en la clase principal del proyecto:

Para instanciar objetos en Java hay que utilizar el operador new. Es el operador responsable de realizar la reserva de memoria.

Fíjate en el siguiente código:

public class Main {
    public static void main(String[] args) {

        Coche miCoche = new Coche();
        
        miCoche.arrancar();
        miCoche.acelerar();
        miCoche.frenar();
        miCoche.repostar();

    }
}

El objeto es miCoche. Como puedes comprobar el identificador que he elegido empieza en minúscula y cumple con la sintaxis Camel.

Delante del identificador indico la clase de la que creo la instancia, en este caso la clase Coche.

Recuerda que la clase Coche es un tipo de dato, por eso lo declaro así: Coche miCoche. Primero el tipo y luego el identificador. No es muy distinto a declarar un entero (int numero) o un punto flotante (double precio).

La diferencia entre declarar un objeto y un dato primitivo radica en la reserva de memoria. Como puedes ver, justo en la parte derecha de la declaración utilizo el operador new seguido del constructor. Esto ya lo veremos con calma, por ahora quédate con la idea de que tienes que escribir el nombre de la clase justo después de new.

Como puedes ver instanciar un objeto es muy sencillo.

Una vez tienes el objeto lo puedes utilizar para ejecutar los métodos descritos en la clase. Si te fijas en el código, en la línea 6 llamo a arrancar(), acelerar(), frenar() y repostar(). Si lo ejecutas verás que se muestran los mensajes que habíamos descrito en la clase Coche:

Arrancando...
Acelerando...
Frenando...
Repostando...

Y ahora, ¿Qué pasa con los datos? Se supone que en cada objeto puedo guardar información concreta de un coche ¿No? Pues si, de eso se trata. Pero esto te lo voy a contar en el próximo artículo. Cuando esté publicado lo enlazaré aquí.

Los comentarios están cerrados.

Subir ↑