2012-07-04 13 views
21

Sto leggendo il libro Java Concurrency in Practice e ottenere un po 'confuso con questi termini:quali sono le differenze di condizione pre, condizione post e invarianti nella terminologia informatica

  1. condizione pre
  2. Messaggio condizione
  3. invarianti

Qualcuno può spiegarmi per favore (con un esempio, se è possibile)?

+0

con una inclinazione per aiutarvi a pubblicare domande più appropriate su SO, si prega di fare domande specifiche, qualcosa che mostra la propria ricerca/lavoro nella materia, aggiungendo valore alla tua domanda. Le cose che puoi trovare discusse su internet in generale non fanno domande su SO. PS: non hai downvoted te stesso. – Bhaskar

+8

Questo è un po 'duro ... – yshavit

+4

Come è ambigua la domanda? Voleva chiarimenti su cosa significhino quei termini con un esempio di codice. E ha mostrato la ricerca perché sta leggendo il maledetto libro. A volte SO mi limita a muovere i miei ingranaggi. Ugh. – Ungeheuer

risposta

41

Avrai un sacco di problemi di scrittura Java, in particolare il codice multi-threaded, se non si riesce a capire queste idee semplici:

  1. pre-condizioni sono le cose che devono essere vere prima di un metodo è chiamato. Il metodo dice ai clienti "questo è quello che mi aspetto da te".
  2. Le post-condizioni sono le cose che devono essere vere dopo il completamento del metodo. Il metodo dice ai clienti "questo è ciò che prometto di fare per te".
  3. Gli invarianti sono le cose che sono sempre vere e che non cambieranno. Il metodo dice ai clienti "se questo fosse vero prima di chiamarmi, prometto che sarà ancora vero quando ho finito".

Sono tutti parte di un'idea chiamata "programmazione per contratto". È stato inventato da un ragazzo di nome C.A.R. Hoare. Bertrand Meyer ha creato un linguaggio orientato agli oggetti chiamato Eiffel. Nessuno la usa molto, ma a causa di ciò ha avuto un giorno di sole.

Eiffel non è molto popolare. Ci sono oltre quattro milioni di domande su SO mentre scrivo questo, ma solo 32 di loro sono etichettati "eiffel".

Aggiornamento: ci sono stati 11.966.392 domande su SO il 29-giu-2016. Solo 92 di loro sono stati taggati "eiffel". La percentuale di domande Eiffel si mantiene approssimativamente costante a ~ 0,00077%.

I in piedi corretto - grazie, flamingpenguin. Ho aggiornato la mia risposta.

+1

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

+0

Quindi, quando scrivo un metodo con determinate condizioni preliminari, dovrei controllare se tali pre-condizioni sono soddisfatte, o devo presumere che il il cliente è abbastanza intelligente da non violare la pre-condizione? – Ungeheuer

+0

La tua scelta, ma l'idea è quella di convalidare e prevenire gli errori. Chiediti come i consumatori conosceranno il tuo contratto. – duffymo

Problemi correlati