Eiffel: aflojar las condiciones previas y el endurecimiento de las post-condiciones?

StackOverflow https://stackoverflow.com/questions/3681503

  •  02-10-2019
  •  | 
  •  

Pregunta

En Eiffel se dice que hay que "aflojar las condiciones previas y el endurecimiento de las post-condiciones", pero no estoy seguro de lo que esto significa. ¿Cómo funciona este beneficio / es beneficiado por el sub-classing?

Gracias

¿Fue útil?

Solución

En el Diseño por contrato, se especifica un conjunto de precondiciones y un conjunto de post-condiciones para una función. Por ejemplo, digamos que usted estuviera escribiendo una función de asignación de memoria. Se requieren que acepte un número entero positivo como entrada, y produce un puntero uniformemente alineados como su resultado.

Al aflojar los medios de precondición que cuando se crea una clase derivada, tiene que aceptar cualquier entrada que la clase base puede aceptar, pero fuerza aceptar otras entradas también. Utilizando el ejemplo anterior, una clase derivada puede ser escrito a aceptar un número entero no negativo en lugar de números enteros simplemente positivos.

En el lado resultado, usted tiene que asegurarse de que el resultado de una función derivada cumple con todos los requisitos que debe cumplir la función de base - pero también puede agregar más restricciones. Por ejemplo, una versión derivada de la función anterior podría decidir sólo producen resultados que eran múltiplos de 8. Cada múltiplo de 8 es claramente incluso, por lo que todavía cumple con el requisito de la función de base, pero ha impuesto una restricción adicional también.

Lo contrario no funciona: si la función de clase de base permite enteros no negativos como entrada, entonces la clase derivada debe continuar para aceptar todos los números enteros no negativos como entrada. El intento de cambiarlo para aceptar sólo números enteros positivos (es decir, rechazar 0, que se permite por la clase base) no se le permitiría -. Su clase derivada ya no puede ser sustituido por la versión de la base en todas las circunstancias

Asimismo con resultados:. Si la clase base impuso un "múltiplo de 8" requisito en un resultado, la versión derivada debe también asegurar que todos los resultados son múltiplos de 8. Volviendo 2 o 4 violaría ese requisito

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top