Eiffel: desserrant les conditions préalables et le resserrement des conditions post-?

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

  •  02-10-2019
  •  | 
  •  

Question

En Eiffel, il est dit que nous devrions « assouplir les conditions préalables et le resserrement des post-conditions », mais je ne suis pas sûr de ce que cela veut dire. Comment fonctionne cette prestation / est bénéficié par sous-classage?

Merci

Était-ce utile?

La solution

Dans la conception par contrat, vous spécifiez un ensemble de conditions préalables et un ensemble de conditions de post-pour une fonction. Par exemple, supposons que vous écriviez une fonction d'allocation de mémoire. Vous avez besoin que d'accepter un nombre entier positif en entrée, et produit un pointeur aligné régulièrement que son résultat.

desserrant les moyens de condition préalable que lorsque vous créez une classe dérivée, il doit accepter toute entrée que la classe de base pourrait accepter, mais peut accepter d'autres entrées aussi bien. En utilisant l'exemple ci-dessus, une classe dérivée pourrait être écrit à accepter un entier non négatif au lieu d'entiers positifs juste.

Du côté des résultats, vous devez vous assurer que le résultat d'une fonction dérivée répond à toutes les exigences imposées à la fonction de base - mais il peut aussi ajouter des restrictions. Par exemple, une version dérivée de la fonction ci-dessus pourrait décider des résultats de produire seulement qui étaient des multiples de 8. Chaque multiple de 8 est clairement même, il répond toujours à l'exigence de la fonction de base, mais a imposé une restriction supplémentaire ainsi.

Le contraire ne travaillerait: si la fonction de la classe de base permet des entiers non négatifs en entrée, puis la classe dérivée doit continuer à accepter tous les entiers non négatifs en entrée. Toute tentative de changer d'accepter seulement des nombres entiers positifs (à savoir, rejeter 0, ce qui est autorisé par la classe de base) ne serait pas autorisée -. Votre classe dérivée ne peut plus être remplacée par la version de base en toutes circonstances

De même avec les résultats. Si la classe de base a imposé une exigence « multiple de 8 » sur un résultat, la version dérivée doit également faire en sorte que tous les résultats sont des multiples de 8. De retour 2 ou 4 serait contraire à cette exigence

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top