2012-07-04 21 views
21

ich das Buch Java Concurrency in Practice lese und ein wenig verwirrt mit diesen Bedingungen erhalten:Was sind die Unterschiede Vorbedingung, Nachbedingung und unveränderlich in der Computerterminologie

  1. Pre Bedingung
  2. Beitrag Zustand
  3. Invarianten

Kann mir bitte jemand erklären (mit einem Beispiel, wenn es möglich ist)?

+0

mit einer Neigung, Ihnen zu helfen, richtigere Fragen über SO zu stellen, stellen Sie bitte spezifische Fragen, etwas, das Ihre eigene Forschung/Arbeit in das Thema zeigt, Wert Ihrer Frage hinzufügend. Dinge, die Sie im Internet allgemein finden können, stellen keine guten Fragen zu SO. PS: Ich habe dich nicht selbst abgelehnt. – Bhaskar

+8

Das ist ein bisschen hart ... – yshavit

+4

Wie ist die Frage mehrdeutig? Er wollte klären, was diese Begriffe mit einem Codebeispiel bedeuten. Und er hat recherchiert, weil er das verdammte Buch liest. Manchmal schleift SO einfach meine Zahnräder. Pfui. – Ungeheuer

Antwort

41

Sie werden eine Menge Probleme haben Java zu schreiben, vor allem Multi-Threaded-Code, wenn Sie nicht diese einfachen Ideen verstehen:

  1. Pre-Bedingungen sind die Dinge, die vor einem Verfahren erfüllt sein müssen wird genannt. Die Methode sagt Kunden "das ist, was ich von Ihnen erwarte".
  2. Post-Bedingungen sind die Dinge, die nach Abschluss der Methode wahr sein müssen. Die Methode sagt Kunden "das ist, was ich verspreche, für Sie zu tun".
  3. Invarianten sind die Dinge, die immer wahr sind und sich nicht ändern werden. Die Methode sagt den Klienten, "wenn das wahr war, bevor du mich angerufen hast, verspreche ich, dass es immer noch wahr sein wird, wenn ich fertig bin".

Sie sind alle Teil einer Idee namens "Programmierung per Vertrag". Es wurde von einem Typen namens C.A.R. Hoare erfunden. Bertrand Meyer hat darum eine objektorientierte Sprache namens Eiffel aufgebaut. Niemand benutzt es sehr, aber er hatte deswegen einen Tag in der Sonne.

Eiffel ist nicht sehr beliebt. Es gibt über vier Millionen Fragen zu SO, während ich dies schreibe, aber nur 32 von ihnen sind mit "Eiffel" markiert.

Update: Es gab 11.966.392 Frage zu SO am 29-Jun-2016. Nur 92 von ihnen wurden mit "Eiffel" getaggt. Der Prozentsatz der Eiffel-Fragen bleibt ungefähr konstant bei ~ 0,00077%.

Ich stehe korrigiert - danke, flamingpenguin. Ich habe meine Antwort aktualisiert.

+1

http://en.wikipedia.org/wiki/Hoare_logic – lexicalscope

+0

Also, wenn ich eine Methode mit bestimmten Voraussetzungen schreibe, würde ich überprüfen, ob diese Voraussetzungen erfüllt sind, oder soll ich das übernehmen Client ist schlau genug, um die Vorbedingung nicht zu verletzen? – Ungeheuer

+0

Ihre Wahl, aber die ganze Idee besteht darin, Fehler zu überprüfen und zu vermeiden. Fragen Sie sich, wie die Verbraucher Ihren Vertrag kennen. – duffymo