¿Qué es un invariante de clase?

En la programación y el diseño de la computadora orientado a objetos, un invariante de clase es un conjunto de reglas que se pueden usar para definir si existe una instancia de objeto en un estado válido. Desde una perspectiva de diseño, una clase invariante es un conjunto de límites entre los cuales los datos dentro de un objeto deben ser considerados en un estado funcional adecuado. Un invariante de clase se puede definir en la documentación de diseño o los comentarios del código fuente o, en algunos lenguajes de programación, se puede implementar directamente en el código de computadora procesable. Un programa que utiliza invariantes codificados y afirmaciones puede hacer que el programa cese la ejecución o arroje varios errores cuando no se cumplan las condiciones invariantes. A diferencia de la verificación de errores estándar, los invariantes de clase generalmente se usan solo con el fin de garantizar que la implementación interna de una clase funcione, y generalmente no figuran en la documentación pública o las interfaces de programación.

De un nivel muy básico, una clase invariante esencialmente es una colección de asercionespara una clase. Una afirmación, nuevamente en términos simples, es una declaración que verifica alguna parte del estado de la clase y debe evaluar como verdadero para la ejecución del programa para continuar. Un ejemplo de una afirmación es una declaración que garantiza que un entero dado sea siempre entre 1 y 10. Cuando se usa una clase invariante, se evalúan las afirmaciones para todas las partes relevantes de los datos que poseen el objeto, esencialmente validando que todos los datos en el objeto están dentro de los rangos definidos.

En muchos casos, el uso de una clase invariante se parece mucho a la verificación de errores estándar, en el que se miden las variables para garantizar que estén dentro de los límites utilizables o no son nulos. Sin embargo, la diferencia entre el uso de invariantes de clase y la verificación de errores estándar es que los invariantes y las afirmaciones se usan predominantemente para capturar errores que no deben ocurrir a menos que haya un defecto intrínseco en el código. Otra diferencia es thLa comprobación de errores estándar tiende a implicar la recuperación y los cambios en el flujo de control del programa, mientras que el resultado de una falla invariante debe ser la terminación del programa. La razón por la cual la mayoría de los programas terminan cuando falla una verificación de clase invariante es porque el objeto está en un estado comprometido y no puede, desde una vista de diseño, para cumplir con sus condiciones previas y posteriores necesarias para adherirse a su contrato de diseño.

.

Una de las propiedades de una clase invariante en lenguajes de programación orientados a objetos en los que están definidos implícitamente es que el invariante es un mecanismo heredado por cualquier subclases. Esto evita que una subclase anule cualquier control invariante que se realice en la clase principal. En última instancia, esto significa que una subclase no puede romper el contrato de diseño establecido por la superclase, lo que podría causar resultados impredecibles o errores de programa difíciles de encontrar.

OTROS IDIOMAS