Busqué en Google el tema, pero además de Wikipedia no encontré más documentación o artículos útiles.
¿Alguien puede explicarme en palabras simples lo que significa o remitirme a alguna documentación agradable y fácil de entender?
java
terminology
invariants
Saurabh Kumar
fuente
fuente
Respuestas:
No significa nada en particular en referencia a java.
Un invariante de clase es simplemente una propiedad que se aplica a todas las instancias de una clase, siempre, sin importar lo que haga el otro código.
Por ejemplo,
X tiene la clase invariante de que hay una
y
propiedad y nunca lo esnull
y tiene un valor de tipoY
.no mantiene dos importantes invariantes
count
nunca devuelve un valor negativo debido a un posible subdesbordamiento.count
están aumentando estrictamente de manera monótona.La clase modificada conserva esos dos invariantes.
pero no conserva el invariante que llama a
count
tener éxito siempre con normalidad (ausencia de violaciones TCB † ) porquecount
podría generar una excepción o podría bloquear si un subproceso bloqueado posee el monitor del contador.Cada idioma con clases facilita el mantenimiento de algunas invariantes de clase pero no de otras. Java no es una excepción:
private
campos, por lo que los invariantes que dependen de datos privados son fáciles de mantener.null
valores se cuelen de muchas formas, por lo que es difícil mantener invariantes "tiene un valor real".† - Una externalidad o violación de TCB es un evento que un diseñador de sistemas asume con optimismo que no sucederá.
Por lo general, confiamos en que el hardware básico funciona como se anuncia cuando hablamos de las propiedades de los lenguajes de alto nivel construidos sobre ellos, y nuestros argumentos que sostienen los invariantes no tienen en cuenta la posibilidad de:
setAccessible
para modificarprivate
las tablas de búsqueda.Para algunos sistemas, nuestro TCB puede incluir solo partes del sistema, por lo que es posible que no asumamos que
pero podríamos asumir que
Cuanto más alto es un sistema, más grande es normalmente su TCB, pero cuanto menos fiables son las cosas que puede obtener de su TCB, es más probable que se mantengan sus invariantes y más fiable será su sistema a largo plazo.
fuente
count
nunca devuelve el mismo valor dos veces" realmente se considera invariante de clase?Invariante significa algo que debe ajustarse a sus condiciones sin importar los cambios o quien lo use / transforme. Es decir, una propiedad de una clase siempre cumple o satisface alguna condición incluso después de pasar por transformaciones utilizando métodos públicos. Entonces, el cliente o usuario de esta clase está asegurado sobre la clase y su propiedad.
Por ejemplo,
fuente
Son hechos que deben ser ciertos sobre una clase de instancia. Por ejemplo, si una clase tiene una propiedad X y el invariante puede ser X, debe ser mayor que 0. Que yo sepa, no existe un método incorporado para mantener invariantes, debe hacer que las propiedades sean privadas y asegurarse de que sus captadores y definidores apliquen la propiedad de invariancia.
Hay anotaciones disponibles que pueden verificar las propiedades mediante reflexión e interceptores. http://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html
fuente