Para poder seguir adentrándonos en lo que representa la orientación a objetos como filosofía, debemos entender diferentes conceptos, unos más simples, otros más complejos, pero que al ir sumándolos en nuestro conocimiento lograremos tener un mayor entendimiento de cómo afrontar una aplicación.
Clases Inmutables
Cuando creamos un objeto, lo normal es que podamos modificar sus atributos en el curso de su existencia en nuestros programas o aplicaciones, sin embargo este comportamiento no siempre es lo que deseamos, ya sea por razones técnicas o por que deseamos mantener la integridad de las instancias, habrá momentos en los que nos vamos a querer que un objeto sea modificado.
Para lograr que una clase sea inmutable uno de los primeros pasos es no tener métodos set, es decir aquellos que le asignan valores a los atributos, veamos en el siguiente código un pequeño ejemplo de cómo conseguir una clase inmutable:
Vemos en el ejemplo como construimos una clase Estudiante, en dicha clase entonces tenemos que cumplimos con todos los requisitos para que sea una clase inmutable, hemos definido atributos privados, el constructor es el único que asigna valores al momento de instanciar y tenemos métodos que nos permiten acceder a los valores de los atributos.
Podemos pensar que esto es muy sencillo, pero en parte no lo es, ya que a pesar que colocar los atributos privados y no tener métodos que los modifiquen es un inicio, sin embargo debemos estar atentos a otros elementos que podamos incluir en nuestras clases que puedan contravenir el principio que hemos estado desarrollando, veamos el siguiente ejemplo:
Vemos que es prácticamente nuestra misma clase estudiante, pero hemos definido un nuevo atributo que es “fechaCreado” dicho atributo tiene como función almacenar la fecha en la que creamos un objeto, pero es del tipo Date, esto nos supone un problema ya que al ser de este tipo podemos utilizar un método que cambie el valor y asociarlo a la referencia del atributo, con ello ya no sería una clase inmutable.
Tenemos entonces que debemos cuidar estos detalles si queremos utilizar este recurso en la creación de nuestras aplicaciones y programas.
Hemos aprendido en este tutorial un concepto nuevo de la orientación a objetos y más allá que hayamos realizado los ejemplos en Java, esto podemos aplicarlo a cualquier lenguaje, claro salvando las diferencias técnicas, con lo que estaremos trabajando con filosofía y no con tecnicismos.