Los invariantes son condiciones que deben ser siempre ciertas. Hemos visto anteriormente los invariantes de ciclos, que son condiciones que deben permanecer ciertas durante la ejecución de un ciclo. Existen también los invariantes de objetos, que son condiciones que deben ser ciertas a lo largo de toda la existencia de un objeto.
La clase ListaEnlazada
presentada en la sección anterior, cuenta con
dos invariantes que siempre debemos mantener. Por un lado, el atributo
len
debe contener siempre la cantidad de nodos de la lista. Es decir,
siempre que se modifique la lista, agregando o quitando un nodo, se
debe actualizar len
como corresponda.
Por otro lado, el atributo prim
referencia siempre al primer nodo de
la lista, si se agrega o elimina este primer nodo, es necesario
actualizar esta referencia.
Cuando se desarrolla una estructura de datos, como la lista enlazada, es importante desta-car cuáles serán sus invariantes, ya que en cada método habrá que tener especial cuidado de que los invariantes permanezcan siempre ciertos.
Así, si como se pidió en el ejercicio 16.4, se modifica la lista para
que la inserción al final pueda hacerse en tiempo constante, se está
agregando a la lista un nuevo invariante (un atribu-to de la lista que
apunte siempre al último elemento) y no es sólo el método append
el
que hay que modificar, sino todos los métodos que puedan de una u otra
forma cambiar la referencia al último elemento de la lista.