2012-07-04 23 views
21

我讀的書Java Concurrency in Practice並得到一個有點困惑了這些條件:有什麼區別前置條件,後置條件和不變在計算機術語

  1. 前期狀態
  2. 後置條件
  3. 不變

有人可以解釋我他們(如果有可能的話,舉個例子)?

+0

傾向於幫助您發佈有關SO的更正確的問題,請提出具體問題,這些問題顯示了您自己的研究/工作,併爲您的問題增加了價值。一般來說,你可以在互聯網上找到的東西不會在SO上提出很好的問題。 PS:沒有downvoted你自己。 – Bhaskar

+8

這有點苛刻... – yshavit

+4

問題如何模糊?他希望澄清這些術語在代碼示例中的含義。他展示了研究,因爲他正在閱讀該書。有時候,我只是在研究我的裝備。啊。 – Ungeheuer

回答

41

你有很多編寫Java,特別是多線程代碼,問題,如果你不明白這些簡單的想法:

  1. 前提條件是事情的方法之前必須是真實的叫做。該方法告訴客戶「這是我期望的從你」。
  2. 後期條件是方法完成後必須成立的事情。該方法告訴客戶「這是我承諾爲你做的」。
  3. 不變量是永遠是真實的東西,不會改變。該方法告訴客戶「在你打電話給我之前這是否屬實,我保證在我完成時它仍然是真的」。

它們都是「合約編程」這個概念的一部分。它是由一個名叫C.A.R. Hoare的人發明的。 Bertrand Meyer在它周圍建立了一個名爲Eiffel的面嚮對象語言。沒有人使用它,但他因爲它而在陽光下度過了一天。

埃菲爾不是很受歡迎。在我寫這篇文章時,有超過400萬個問題,但其中只有32個被標記爲「埃菲爾」。

更新:2016年6月29日SO上有11,966,392個問題。其中只有92個被標記爲「埃菲爾」。埃菲爾問題的百分比大致保持在0.00077%左右。

我糾正 - 謝謝,flamingpenguin。我已經更新了我的答案。

+1

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

+0

所以,當我編寫一個具有某些前提條件的方法時,我會檢查是否滿足這些前提條件,或者我是否會假設客戶端足夠聰明,不會違反先決條件? – Ungeheuer

+0

您的選擇,但整個想法是驗證和防止錯誤。問問自己消費者如何知道你的合同。 – duffymo

相關問題