Inmutable

1 Sinopsis

Permite almacenar datos para tenerlos de solo lectura, y se puede compartir un objeto entre varios objetos. Es como definir un objeto constante.

2 Contexto

Se desea compartir un objeto que represente la Posicion de un objeto, con sus coordenadas x e y. Se deben proporcionar metodos de solo lectura (es decir solo metodos get) y via el constructor se indican los valores iniciales del objeto

3 Solucion

Definir una clase que tenga el conjunto de propiedades a guardar. Se define un constructor en el cual se indican dichas propiedades. Se proporcionan metodos get sobre cada propiedad. Si se necesita hacer un cambio en el objeto, proporcionar un metodo que cree una nueva instancia, sin que transforme al objeto original (de ahi que es inmutable)

4 Consecuencias

5 Ejemplo

Se necesita una clase que represente el concepto de coordenadas x e y. Debe tener como propiedades dos numeros reales, x e y. Dicha clase la llamamos Posicion.


public class Posicion  {
    ....
}
See the complete code for Posicion here.
  private int _x,_y;
  public Posicion(int x,int y) { _x = x; _y=y;}
  public int getX() { return _x; }
  public int getY() { return _y; }
  public Posicion trasladar(Posicion p){
      new Posicion(this._x+p.getX() , this._y+p.getY());
  }

El diagrama UML es el siguiente: