web-dev-qa-db-fra.com

Quelles sont les différences pré-condition, post-condition et invariantes en terminologie informatique

Je lis le livre Java Concurrency in Practice et je suis un peu confus avec ces termes:

  1. Condition préalable
  2. Condition de publication
  3. Invariants

Quelqu'un peut-il me les expliquer (avec un exemple, si c'est possible)?

26
Inquisitive

Vous aurez beaucoup de problèmes à écrire Java, en particulier du code multi-thread, si vous ne comprenez pas ces idées simples:

  1. Les conditions préalables sont les choses qui doivent être vraies avant d'appeler une méthode. La méthode dit aux clients "c'est ce que j'attends de vous".
  2. Les post-conditions sont les choses qui doivent être vraies une fois la méthode terminée. La méthode dit aux clients "c'est ce que je promets de faire pour vous".
  3. Les invariants sont les choses qui sont toujours vraies et ne changeront pas. La méthode dit aux clients "si cela était vrai avant que vous ne m'appeliez, je vous promets que ce sera toujours vrai quand j'aurai fini".

Ils font tous partie d'une idée appelée "programmation par contrat". Il a été inventé par un gars nommé C.A.R. Hoare . Bertrand Meyer a construit autour de lui un langage orienté objet appelé Eiffel . Personne ne l'utilise beaucoup, mais il a passé une journée au soleil à cause de cela.

Eiffel n'est pas très populaire. Il y a plus de quatre millions de questions sur SO au moment où j'écris ceci, mais seulement 32 d'entre elles sont étiquetées "eiffel".

Mise à jour: il y avait 11 966 392 questions le SO le 29-juin-2016. Seulement 92 d'entre elles ont été étiquetées "eiffel". Le pourcentage de questions Eiffel reste à peu près constant à ~ 0,00077%.

Je me tiens corrigé - merci, pingouin enflammé. J'ai mis à jour ma réponse.

50
duffymo