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

Latencia

Aunque parezca que la conexión a Internet sea instantánea, no lo es tanto, ya que los datos deben hacer un recorrido cuya duración se denomina latencia de red. La latencia es el tiempo medio que mide la velocidad a la que viajan los datos

Joysticks

Nos referimos al joystick como el dispositivo de entrada que permite controlar sistemas digitales mediante el movimiento de una palanca. El uso más popular del joystick está relacionado con los videojuegos, donde sus elementos facilitan la interacción con entornos virtuales, aunque el joystick

Keylogger

Los keyloggers son herramientas de software diseñadas para registrar y monitorizar las pulsaciones de teclas en un dispositivo. Su función principal es recopilar información sobre las acciones del usuario, capturando todo lo que se escribe, desde contraseñas hasta mensajes de correo electrónico. Aunque

Edge computing

El edge computing es una revolucionaria aproximación en el procesamiento de datos que busca llevar el poder de cómputo más cerca de la fuente de los datos, en lugar de depender exclusivamente de centros de datos centralizados. Este enfoque descentralizado permite realizar tareas de procesamiento

Scroll al inicio