Clases, objetos y métodos en Java

Para todos aquellos que nos iniciamos en el mundo de la programación orientada a objetos y en especial en el mundo de , hay tres vocablos técnicos que oímos hasta la saciedad en los manuales, tutoriales y cursos, pero que tanto para quien empiezan en el mundo de la programación como para aquellos que vienen del paradigma de la programación estructurada son un tanto difíciles de entender; las clases, objetos y métodos. Por esta razón intentaré explicar por encima “quien es quien” en el mundo de la POO, y como podemos implementarlo en Java, ya que son la espina dorsal de este lenguaje de programación.

Clases

Las clases son declaraciones o abstracciones de objetos, lo que significa, que una clase es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase. Se puede visualizar como un contenedor de uno o más datos (variables o propiedades miembro) junto a las operaciones de manipulación de dichos datos (funciones/métodos). Las clases pueden definirse como estructuras (struct), uniones (union) o clases (class) pudiendo existir diferencias entre cada una de las definiciones según el lenguaje. Además las clases son agrupaciones de objetos que describen su comportamiento.

Métodos

Un método es parecido a lo que, en programación estructurada se llama función. Es decir, un fragmento de código al que se llama, acompañado de unos datos de entrada, y produce una determinada salida. Para esto tenemos que indicar el tipo de los primitivos de entrada, el tipo de los de salida, el nombre del método y el trabajo que realizara.

[tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {
//Código del método
return primitivoSalida;
}

Para ser más explícitos, vamos a poner un ejemplo porque no creo que me haya explicado demasiado bien. Imagina que queremos hacer un método al que le pasamos un parámetro determinado (un primitivo tipo int) y devuelva el resultado del primitivo de entrada más 5. Primero definimos el tipo del primitivo de entrada y el de salida (en nuestro caso ambos serán tipo int). Seguidamente, le damos un nombre (en este caso lo he bautizado como sumaCinco) y lo escribimos :

int sumaCinco(int entrada) {
return entrada + 5;
}

Para usar este método, podemos hacer lo siguiente

int numero;
numero = sumaCinco(10);
System.out.println("El resultado es " + numero + ".");

Como puedes imaginar, el resultado es, efectivamente, 15.

Un detalle importante que me he olvidado comentar es el tema de los modificadores. No entraré demasiado en detalle con esto, pero debemos saber que para usar un método desde otro método tipo static (como el método main, que se declara como public static void main(String[] args)). Otro tipo de modificador es el public, que permite que el método sea usado desde otro paquete. Pero como en nuestros pequeños programas aún no usamos paquetes, lo dejaremos para otro día. Para terminar con esto, una cosa muy importante, debo decir que los modificadores se especifican justo antes de poner el tipo del primitivo de salida. Completando el esquema de un método estándar que había empezado antes, nos queda esto

[modificadores] [tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {
//Código del método
return primitivoSalida;
}

Clases

Ahora que ya sabemos lo que son los primitivos y los métodos, podemos crear una clase. Como he dicho al principio, una clase es un conjunto de primitivos y métodos, así que también podemos hacer un esquema de como será una clase estándar.

class NombreClase {
//Primitivos

//Métodos
}

Así como los nombres de los primitivos empiezan con una minúscula por convención, los nombres de clases empiezan con una mayúscula por el mismo motivo.
Para dejarlo claro, hagamos un ejemplo. Queremos crear una clase que nos permita “simular” un disco de música. Los parámetros que definen un disco son su título, el nombre del grupo que lo edita, el estilo de música de sus canciones, el número de canciones, el nombre de la productora, y demás. Estos serían los primitivos de la clase. ¿Y que pasa con los métodos? Pues en nuestra clase DiscoMusica podrían ser métodos que especificaran estos valores (los primitivos) para cada cd de nuestra colección. Un método llamado definirEstilo, al que le pasaremos un string con el nombre del estilo de música, y un método para definir cada primitivo. Para ponernos lo sencillo y no complicarnos con el uso de strings o arrays, solo trabajaremos con enteros, y simplificaremos mucho la clase. También pondré un método que nos devuelva el número de componentes del grupo, mediante un return. El código sería así

class DiscoMusica {
int numeroCanciones;
int numeroComponentesGrupo;
int anioPublicacion;

void definirNumeroCanciones(int numero) {
numeroCanciones = numero;
}

void definirNumeroComponentes(int num) {
numeroComponentesGrupo = num;
}

void definirAnio(int anio) {
anioPublicacion = anio;
}

int devolverNumeroComponentes() {
return numeroComponentesGrupo;
}
}

¡Hecho, una clase que pseudo define un disco! Tenemos primero los tres primitivos, y luego sus métodos que los definen. Muy bien, pero esto define un disco genérico. Imaginemos que queremos hacer una clasificación de 3 discos, ¿tengo que hacer una clase diferente para cada uno de ellos? ¡Pues claro que no, porque aquí entran en juego los famosos objetos! Un objeto no es más que una personificación de una clase, el conjunto de primitivos y métodos definidos en la clase, que ahora definen un objeto determinado (por ejemplo, disco1, disco2, disco3 …). Para definir un objeto, debemos especificar en que clase se basará, con la siguiente sintaxis:

[nombreClase] [nombreObjeto] = new [nombreClase]();

Por ejemplo, para crear un objeto llamado disco1 basado en la clase que creamos anteriormente, hacemos
DiscoMusica disco1 = new DiscoMusica();
Ahora que ya tenemos el objeto disco1, podemos asignar un valor a sus primitivos. Podemos usar los métodos del objeto disco1 que hemos creado usando la clase DiscoMusica (como ves, en esta frase se resumen los 3 conceptos que quiero dejar claros) usando el nombre del objeto junto con el nombre del método a usar, separados por un punto entre ellos

[nombreObjeto].[nombreMétodo]([primitivosEntrada]);

En nuestro caso, vamos a especificar el número de componentes, canciones y el año publicación del disco1

disco1.definirNumeroCanciones(14);
disco1.definirNumeroComponentes(3);
disco1.definirAnio(2005);

También podemos usar el método que nos devuelve el numero de componentes del objeto disco1
System.out.println(“Hay ” + disco1.devolverNumeroComponentes() + ” músicos.”);
Con esto imprimimos por pantalla la cadena “Hay “, concatenada (el operador + suma números, pero también sirve para unir dos o más cadenas) con el resultado de disco1.devolverNumeroComponentes(), y también lo concatena con la cadena ” músicos.”. El resultado es “Hay 3 músicos.”, que es impreso en pantalla.

Si has llegado aquí, espero que te haya quedado claro todo lo explicado.

Post Relacionados:

  1. ¿Qué es la Herencia?
  2. Generar una cadena alfanumérica aleatoria en java
  3. Tipos de Variables primitivas en Java
  4. Hola Mundo para dispositivos móviles con J2ME
  5. Instalar la documentación de Java en Debian/Ubuntu

2 pensamientos en “Clases, objetos y métodos en Java

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>