Inmutabilidad

Table of contents

Summarise with:

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.

Share in:

Related articles

Metaverso

El término metaverso se refiere a un universo digital interconectado y compartido en el que los usuarios pueden interactuar entre sí y con su entorno de manera inmersiva, utilizando avatares o representaciones digitales de sí mismos. A menudo, el metaverso es visto como

Nginx

Nginx es un software ampliamente utilizado en el ámbito de los servidores web, conocido por su alto rendimiento, estabilidad y capacidad para manejar múltiples conexiones simultáneas. Originalmente desarrollado por Igor Sysoev en 2004. ¿Qué es Nginx? Nginx ha evolucionado para convertirse en una

Spam

Definimos como spam cualquier tipo de mensaje o forma de comunicación digital indeseada, no solicitada y, generalmente, molesta para el receptor. Es muy común hablar del spam que recibimos en el correo electrónico, pero también podemos verlo en mensajes de texto, llamadas o

Deep learning

El deep learning o aprendizaje profundo es una técnica de aprendizaje automático mediante el cual se le instruye a los ordenadores a completar tareas de igual forma que la mente humana. Es enseñar a las máquinas conocimientos a través de la experiencia, es

Scroll to Top