¿Qué es un objeto inmutable?

En la programación orientada a objetos, un objeto inmutable es un objeto cuyas propiedades no se pueden cambiar después de haber sido creado. La mayoría de los objetos, por el contrario, son objetos mutables, lo que significa que algunas o todas sus propiedades pueden cambiarse libremente después de la creación. Una variedad de lenguajes de computadora tienen la capacidad de crear objetos inmutables, incluidos Java, C ++, erlang, Tcl y scala.

Un objeto inmutable se puede crear de dos maneras: creando una clase que es por definición inmutable o declarando explícitamente que un objeto mutable de otro modo es inmutable. La metodología para crear una clase inmutable varía según el lenguaje informático que se utilice. Independientemente del idioma, una clase inmutable no debe tener métodos que puedan cambiar sus datos internos y ninguna forma de cambiar los métodos, es decir, anular o sobrecargar, de una manera que cambie sus datos internos. Este es el más complicado de los dos enfoques. Por otro lado, para crear un objeto inmutable a partir de un objeto mutable, a menudo se puede aplicar una palabra clave para designar el objeto como inmutable.

Como ejemplo, la creación de objetos inmutables en Java se basa en gran medida en la palabra clave «final». Una forma rápida de hacer que una clase sea inmutable en Java es declarar la clase, así como todos sus métodos y miembros de datos, final. También se puede utilizar una estrategia similar en C ++ con la palabra clave «const». Sin embargo, estos enfoques, dependiendo del contenido de la clase, pueden no ser los mejores. En general, los objetos pueden hacerse inmutables mediante un cuidadoso mantenimiento de sus datos internos.

Hacer un objeto inmutable usando una palabra clave, como en el ejemplo anterior, es a menudo mucho más fácil que escribir una clase entera para que sea inmutable. Sin embargo, utilizar este enfoque tiene sus peligros. Al designar explícitamente un objeto inmutable de esta manera, es importante que el programador se asegure de que todas las propiedades y datos apropiados se hayan incorporado primero al objeto. Depender de un objeto incompleto puede ser peligroso, especialmente si le falta una información esencial.

Si un objeto es mutable pero requiere que los datos inmutables se creen correctamente, los datos inmutables deben inicializarse antes de que se pueda crear el objeto mutable. Los objetos inmutables son siempre inmutables, ya sean valores de datos u objetos grandes, y siempre deben tratarse como tales. En general, un objeto inmutable no se puede convertir en mutable después de haber sido creado, aunque a veces se pueden copiar como objetos mutables. Por lo general, se puede suponer que un objeto inmutable y cualquiera de sus copias también son inmutables, lo que puede evitar problemas de datos o memoria.