java - tiempo - sistemas lineales variantes
¿Cuáles son las diferencias entre condición previa, condición posterior e invariante en terminología de computadora (1)
Tendrá muchos problemas para escribir Java, especialmente código multihilo, si no puede entender estas ideas simples:
- Las condiciones previas son las cosas que deben ser verdaderas antes de que se llame un método. El método le dice a los clientes "esto es lo que espero de ti".
- Las condiciones posteriores son las cosas que deben ser verdaderas una vez que se completa el método. El método le dice a los clientes "esto es lo que prometo hacer por ti".
- Las invariantes son las cosas que siempre son ciertas y no cambiarán. El método le dice a los clientes "si esto era cierto antes de que me llamaras, te prometo que seguirá siendo cierto cuando termine".
Todos ellos son parte de una idea llamada "programación por contrato". Fue inventado por un tipo llamado CAR Hoare . Bertrand Meyer construyó un lenguaje orientado a objetos llamado Eiffel a su alrededor. Nadie lo usa mucho, pero tuvo un día al sol debido a eso.
Eiffel no es muy popular. Mientras escribo esto, hay más de cuatro millones de preguntas sobre SO, pero solo 32 de ellas están etiquetadas como "eiffel".
Actualización: Hubo 11,966,392 preguntas sobre SO el 29 de junio de 2016. Sólo 92 de ellos fueron etiquetados "eiffel". El porcentaje de preguntas de Eiffel se mantiene aproximadamente constante en ~ 0.00077%.
Estoy corregido - gracias, flamingpenguin. He actualizado mi respuesta.
Estoy leyendo el libro Java Concurrency in Practice y me estoy confundiendo un poco con estos términos:
- Condición previa
- Condición del puesto
- Invariantes
¿Alguien me puede explicar por favor (con un ejemplo, si es posible)?