Qué es una instancia de clase en Java y cómo crearla

Comienza gratis a usar HubSpot CMS en español
Maria Coppola
Maria Coppola

Actualizado:

Publicado:

El método de programación orientada a objetos (POO) consiste en la creación de objetos que interactúan entre sí para realizar operaciones y resolver problemas. En la POO se modela el mundo real a través de la definición de objetos, los cuales poseen propiedades (atributos) y comportamientos (métodos).

Instancia de clase en Java

Los objetos son instancias de una clase y una clase es una plantilla que define la estructura y el comportamiento de un objeto. Cada objeto tiene un estado (valor de sus atributos) y un comportamiento (acciones que realiza por medio de sus métodos), y puede interactuar con otros objetos mediante el intercambio de mensajes.

    << [Comienza ya] Gestiona tu contenido de una manera fácil con el software  CMS gratuito de HubSpot>>   

Conceptos básicos de la programación orientada a objetos

La POO se basa en cuatro conceptos fundamentales:

  • Encapsulamiento: permite ocultar la complejidad interna de un objeto y exponer solo las operaciones necesarias para su uso. Los atributos y métodos de un objeto están protegidos y solo se puede acceder a ellos desde su propia clase.
  • Herencia: permite crear nuevas clases a partir de clases existentes, aprovechando sus atributos y métodos. La herencia permite la reutilización de código y la simplificación de la estructura de los programas.
  • Polimorfismo: permite que diferentes objetos respondan de manera diferente a un mismo mensaje. El polimorfismo da la posibilidad de que los objetos puedan ser tratados como si fueran de una clase más general, lo que hace que el código sea más flexible y escalable.
  • Abstracción: permite representar un objeto complejo con una estructura simple y fácil de entender. La abstracción implica seleccionar las características más relevantes de un objeto y definir una interfaz para interactuar con él.

Las instancias son un concepto clave en la programación orientada a objetos (POO), ya que representan objetos específicos creados a partir de una clase.

Qué es una instancia de clase

Las instancias son la materialización de una clase, es decir, son objetos concretos que tienen su propio estado (los valores de sus atributos) y su propio comportamiento (los métodos que pueden ejecutar).

Las instancias se relacionan directamente con el concepto de encapsulamiento, debido a que los atributos de una instancia están protegidos y solo se puede acceder a ellos y modificarse por medio de los métodos de la clase. Esto asegura que el estado interno de un objeto se mantenga coherente y que su comportamiento se ajuste a los requerimientos de la aplicación.

Las instancias también están relacionadas con el polimorfismo, ya que cada instancia puede responder de manera diferente a un mismo mensaje, dependiendo de la implementación específica de los métodos en la clase. Esto permite que diferentes instancias de una misma clase puedan ser tratadas como si fueran de una clase más general, lo que hace que el código sea más flexible y escalable.

En resumen, las instancias son una parte fundamental de la POO, ya que permiten la creación de objetos concretos a partir de una clase y su posterior manipulación a través de métodos. Las instancias están relacionadas con el encapsulamiento y el polimorfismo, dos de los cuatro conceptos fundamentales de la POO.

Aplicaciones de clases e instancias en Java

Como recomendación general, antes de comenzar a codificar en Java es preferible desarrollar una solución conceptual del problema; esto permitirá analizar y entender los requerimientos y seleccionar mejor la solución.

La herramienta más popular es el diagrama de clases que es una herramienta de modelado visual que representa las clases, sus atributos, métodos y relaciones con otras clases. Se utiliza para describir la estructura estática de un sistema. Los diagramas de clases se pueden crear utilizando herramientas como UML (Lenguaje Unificado de Modelado), mismo que proporciona una notación estándar para representar clases y sus relaciones.

Después de tener el el diagrama de clases se procede a implementarlo en Java:

1. Identificar el nombre y los atributos de la clase

El nombre de la clase debe ser descriptivo y reflejar el propósito de la misma. Los atributos son las variables que conformarán el estado interno de los objetos creados a partir de la clase. Por ejemplo, si queremos crear una clase para representar un coche, podríamos definir los atributos «marca», «modelo», «año», «color», «precio», entre otros.

2. Crear la clase

En Java, las clases se definen utilizando la palabra clave class, seguida del nombre de la clase y las llaves para encerrar el cuerpo de la misma.  

public class Coche {

// aquí se definirán los atributos y métodos de la clase

}

También se utilizan palabras clave antes de la definición class que afectan el comportamiento de la clase creada, estos son:

public

Indica que la clase es accesible desde cualquier otro lugar en el código, tanto dentro como fuera del paquete en el que se encuentra definida.

Declarar una clase pública facilita la reutilización de la misma en diferentes partes del programa. Además, se pueden crear bibliotecas de clases públicas que pueden ser utilizadas por otros desarrolladores. Sin embargo, al permitir el acceso a la clase desde cualquier parte del código, también se pierde el control sobre quién y cómo se utiliza la clase. Esto puede llevar a problemas de seguridad y mantenimiento del código.

private

Indica que la clase solo es accesible desde dentro de la misma clase. Esta palabra clave se utiliza para crear clases internas o clases de ayuda que no deben ser visibles desde fuera de la clase que las contiene.

La ventaja de limitar el acceso a la clase solo desde dentro de la misma es que se garantiza una mayor seguridad y privacidad del código. Además, permite la creación de clases de ayuda que solo se utilizan dentro de la misma clase principal. No obstante, esta propiedad limita la reutilización de la clase en otras partes del programa, ya que no se puede acceder a ella desde fuera de la clase. También puede llevar a la creación de código duplicado si se necesita una funcionalidad similar en otras partes del programa.

protected

Indica que la clase es accesible desde cualquier clase en el mismo paquete y desde cualquier subclase, independientemente del paquete en el que se encuentren.

Esta propiedad permite el acceso a la clase desde cualquier clase en el mismo paquete y desde cualquier subclase, lo que facilita la creación de jerarquías de clases y la reutilización de código en diferentes partes del programa. Aun así, al admitir el acceso a la clase desde diferentes partes del programa, también se pierde un poco el control sobre quién y cómo se utiliza la clase. Además, limita la accesibilidad de la clase a otros paquetes, lo que puede dificultar la reutilización del código en diferentes proyectos.

default

Si no se especifica ninguna palabra clave antes de class, la clase tiene un nivel de acceso predeterminado, también conocido como default. En este caso, la clase es accesible solo dentro del mismo paquete en el que se encuentra definida.

Al no especificar ninguna palabra clave, se establece un nivel de acceso predeterminado que limita el acceso a la clase solo desde dentro del mismo paquete. Esto facilita el control sobre quién y cómo se utiliza la clase, y evita problemas de seguridad y mantenimiento del código. No obstante, al limitar el acceso a la clase solo desde dentro del mismo paquete, también se restringe su reutilización en diferentes partes del programa y en distintos proyectos.

3. Definir los atributos

Dentro de la clase, se deben declarar los atributos como variables. Es recomendable definirlos como private para asegurar el encapsulamiento, y también se deben proporcionar los métodos getter (métodos de acceso) y setter (métodos de asignación) para acceder y modificar los valores de los atributos desde fuera de la clase.

public class Coche {

private String marca;

private String modelo;

private int año;

private String color;

private double precio;

public String getMarca() {

return marca;

}

public void setMarca(String marca) {

this.marca = marca;

}

public String getModelo() {

return modelo;

}

public void setModelo(String marca) {

this.modelo = modelo;

}

public String getAño() {

return año;

}

public void setAño(String marca) {

this.año = año;

}

public String getColor() {

return color;

}

public void setColor(String marca) {

this.color = color;

}

}

Un método getter (método de acceso) permite obtener el valor de una variable privada de una clase. Su nombre comienza con la palabra get seguida del nombre de la variable a la que se quiere acceder. Por convención, se utiliza el mismo nombre que la variable a la que hace referencia. Este método debe tener un tipo de retorno que coincida con el tipo de dato de la variable a la que se accede. Con el método getter se puede controlar el acceso a la variable privada y asegurarse de que se obtiene el valor correcto.

public int getEdad() {

return edad;

}

Un método setter (método de modificación) permite modificar el valor de una variable privada de una clase desde fuera de ella. Su nombre comienza con la palabra set seguida del nombre de la variable a la que se quiere acceder. Por convención, se utiliza el mismo nombre que la variable a la que hace referencia. Este método debe tener un parámetro de entrada que coincida con el tipo de dato de la variable a la que se accede. Con el método setter se puede controlar la modificación de la variable privada y asegurarse de que se le asigna un valor válido.

public void setEdad(int edad) {

this.edad = edad;

}

La palabra clave this se utiliza para hacer referencia al objeto actual de la clase. En el caso de los métodos setter, se utiliza this para referirse a la variable privada de la clase a la que se quiere asignar un valor.

4. Definir los métodos

Los métodos son las acciones que puede realizar un objeto creado a partir de la clase. Es recomendable definirlos como public para permitir su acceso desde fuera de la clase.

public class Coche { /

/ atributos de la clase

// métodos getter y setter

public void arrancar() {

System.out.println("El coche está arrancando...");

}

public void detener() {

System.out.println("El coche se ha detenido.");

}

// se deben definir otros métodos necesarios según la funcionalidad de la clase

}

Otros modificadores de los métodos son:

public

Este modificador se utiliza para indicar que el método es accesible desde cualquier parte del programa. Por ejemplo, si queremos definir un método para sumar dos números enteros y devolver el resultado, podemos hacerlo de la siguiente manera:

public int sumar(int a, int b) {

return a + b;

}

private

Este modificador se utiliza para indicar que el método solo es accesible desde dentro de la misma clase en la que se ha definido. Por ejemplo, si queremos definir un método privado para validar un número de identificación, podemos hacerlo de la siguiente manera:

private boolean validarNumeroIdentificacion(String numero) {

// código de validación

}

protected

Este modificador se utiliza para indicar que el método es accesible desde dentro de la misma clase y también desde las subclases que hereden de esta clase. Por ejemplo, si queremos definir un método protegido para calcular el área de una figura geométrica, podemos hacerlo de la siguiente manera:

protected double calcularArea() {

// código de cálculo del área

}

default o sin especificar

Este modificador se utiliza cuando no se especifica ningún modificador de acceso para el método. En este caso, el método es accesible desde cualquier clase que se encuentre en el mismo paquete, pero no desde clases que estén fuera de este paquete. Por ejemplo, si queremos definir un método para imprimir un mensaje de saludo en una clase de utilidades, podemos hacerlo de la siguiente manera:

void imprimirSaludo() {

System.out.println("Hola, bienvenido!");

}

static

Este modificador se utiliza para indicar que el método es un método de clase que se puede llamar sin necesidad de crear una instancia de la clase en la que se ha definido. Por ejemplo, si queremos definir un método estático para calcular el factorial de un número, podemos hacerlo de la siguiente manera:

public static int calcularFactorial(int n) {

int resultado = 1;

for (int i = 1; i <= n; i++) {

resultado *= i;

} return resultado;

}

final

Este modificador se utiliza para indicar que el método no puede ser sobrescrito por las subclases que hereden de esta clase. Por ejemplo, si queremos definir un método final para imprimir el nombre de una persona, podemos hacerlo de la siguiente manera:

public final void imprimirNombre() {

System.out.println("Mi nombre es Juan");

}

abstract

Este modificador se utiliza para indicar que el método no tiene implementación en la clase en la que se ha definido, sino que debe ser implementado en las subclases que hereden de esta clase. Por ejemplo, si queremos definir un método abstracto para calcular el perímetro de una figura geométrica, podemos hacerlo de la siguiente manera:

public abstract double calcularPerimetro();

synchronized

Este modificador se utiliza para garantizar que solo se puede acceder a un bloque de código o un método mediante un hilo (thread) a la vez. Es decir, si un hilo está ejecutando un bloque de código o un método sincronizado, ningún otro hilo podrá acceder a ese mismo bloque de código o método hasta que el hilo actual haya terminado de ejecutarlo.

public void metodoNoSincronizado() {

// Código no sincronizado

synchronized(this) {

// Código sincronizado

}

// Código no sincronizado

}

5. Utilizar la clase

Una vez creada la clase, se pueden crear objetos a partir de ella utilizando la palabra clave new, y acceder a sus atributos y métodos por medio del objeto creado.

public static void main(String[] args) {

Coche miCoche = new Coche();

miCoche.setMarca("Toyota");

miCoche.setModelo("Corolla");

miCoche.setAño(2020);

miCoche.setColor("Rojo");

miCoche.setPrecio(20000.0);

miCoche.arrancar();

miCoche.detener();

}

En resumen, en la programación orientada a objetos, las clases y los objetos son dos conceptos fundamentales que están relacionados entre sí. Una clase es una plantilla que define las propiedades y comportamientos de un conjunto de objetos similares. Por lo tanto, una clase es una especificación de cómo debe ser un objeto, pero no es el objeto en sí mismo.

Un objeto, por otro lado, es una instancia de una clase. Es decir, es un elemento concreto que se crea a partir de una clase y tiene sus propias propiedades y métodos. Cada objeto puede tener sus propios valores para las propiedades definidas en la clase, lo que le permite tener su propio estado único.

Aprende más acerca de las clases en Java aquí.

New Call-to-action
Temas: Java

Artículos relacionados

Gestiona tu contenido de manera fácil con el software CMS en español gratuito de HubSpot.

COMENZAR GRATIS

CMS Hub is flexible for marketers, powerful for developers, and gives customers a personalized, secure experience

START FREE OR GET A DEMO