Inmutabilidad

Tabla de contenidos

Resumir con:

La inmutabilidad se refiere a la incapacidad de un objeto o entidad para cambiar o ser alterado una vez que ha sido creado o definido. En el contexto de la programación, los datos inmutables no pueden modificarse una vez estén creados. Es decir, que una vez que se ha asignado un valor a un objeto inmutable, no se puede cambiar ese valor. 

Por ejemplo, en algunos lenguajes de programación, como Haskell o Clojure, muchos tipos de datos son inmutables por defecto. Si se intentara modificar un objeto inmutable, se generaría un objeto nuevo con los cambios efectuados.

¿Para qué sirven los objetos inmutables?

Los objetos inmutables se crean para mantener un estado constante e inalterable una vez que han sido creados. Su objetivo principal es garantizar que no se pueda modificar su estado después de su creación, lo que nos aporta varias ventajas:

  • Mayor seguridad en entornos multihilo: Imagina que estás desarrollando un sistema de autenticación de usuarios. Si los objetos que representan las credenciales de usuario son inmutables, una vez que se han establecido, no se pueden cambiar. Esto garantiza que las credenciales no puedan verse alteradas por accidente o maldad, especialmente en entornos multihilo en los que se ejecutan varios hilos de ejecución simultáneamente.
  • Mejora la concurrencia: Los objetos inmutables no pueden cambiar su estado una vez creados, lo que elimina la posibilidad de que múltiples hilos intenten modificar el mismo objeto simultáneamente. Esto evita las condiciones de carrera (que dos hilos acceden y modifiquen un objeto a la vez) y simplifica enormemente la programación concurrente, ya que no sería tan necesario establecer mecanismos de sincronización más complejos.

Sin embargo, muchos programadores se muestran muy reticentes a crear objetos inmutables. Esto se debe a que, si en el proyecto hay que modificar muchos datos en el código, habría que generar muchos objetos nuevos. Cuantos más objetos, más sobrecargada se verá la capacidad de memoria del software y más compromete el rendimiento del software.

Crear objetos inmutables en Java

Programar objetos inmutables o constantes en Java es muy sencillo en comparación con otros lenguajes, puesto que tiene una palabra clave específica para ello: “final”. Para impedir que una variable pueda heredarse, simplemente debemos declararla como final. Te ponemos un ejemplo práctico para ilustrártelo:

public final class Punto {

    private final int x;

    private final int y;

 

    public Punto(int x, int y) {

        this.x = x;

        this.y = y;

    }

 

    public int getX() {

        return x;

    }

 

    public int getY() {

        return y;

    }

 

    public Punto desplazar(int deltaX, int deltaY) {

        return new Punto(this.x + deltaX, this.y + deltaY);

    }

}

En este ejemplo, la clase Punto representa un punto en un plano cartesiano con coordenadas x e y. Los atributos x e y son final, lo que significa que no pueden ser modificados después de la inicialización en el constructor. Una vez creado un objeto Punto, sus coordenadas no pueden ser cambiadas.

Además, el método desplazar devuelve un nuevo objeto Punto con las coordenadas desplazadas según los argumentos proporcionados. En lugar de modificar el objeto actual, este método crea y devuelve un nuevo objeto Punto con las coordenadas actualizadas, manteniendo así la inmutabilidad del objeto original.

Por lo tanto, cualquier instancia de la clase Punto es inmutable, ya que sus atributos no pueden ser modificados una vez inicializados, y cualquier operación que aparentemente modifique el objeto en realidad crea y devuelve un nuevo objeto con el estado modificado.

Compartir en:

Artículos relacionados

Superordenador

Un superordenador es un ordenador con una potencia extraordinaria que puede procesar una cantidad colosal de datos a una velocidad récord para realizar miles de cálculos y simulaciones muy complejos simultáneamente en los campos de la investigación, inteligencia artificial o Big Data. ¿Cómo

Applet

Un applet es un pequeño programa que se ejecuta dentro de otra aplicación, típicamente un navegador web. Los applets están escritos en el lenguaje de programación Java y se utilizan para proporcionar funcionalidades interactivas y dinámicas en páginas web. A diferencia de las

Puntero

Un puntero es una variable que almacena la dirección de memoria de otra variable. En lugar de contener directamente un valor, como lo haría una variable común, un puntero contiene la ubicación donde se almacena ese valor en la memoria. Los punteros son

Sprint

Al hablar de metodologías ágiles, el sprint se define como un período de tiempo definido y corto, típicamente de una a cuatro semanas (aunque esto puede variar según lo estipulado por la empresa), durante el cual se lleva a cabo el trabajo en

Retour en haut